mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-04-01 22:34:28 +02:00
[API/Usos] Save lecturers as teachers. Add team class.
This commit is contained in:
parent
044cedff99
commit
cf25507850
@ -41,6 +41,14 @@ open class UsosApi(open val data: DataUsos, open val lastSync: Long?) {
|
|||||||
protected fun JsonObject.getLangString(key: String) =
|
protected fun JsonObject.getLangString(key: String) =
|
||||||
this.getJsonObject(key)?.getString("pl")
|
this.getJsonObject(key)?.getString("pl")
|
||||||
|
|
||||||
|
protected fun JsonObject.getLecturerIds(key: String) =
|
||||||
|
this.getJsonArray(key)?.asJsonObjectList()?.mapNotNull {
|
||||||
|
val id = it.getLong("id") ?: return@mapNotNull null
|
||||||
|
val firstName = it.getString("first_name") ?: return@mapNotNull null
|
||||||
|
val lastName = it.getString("last_name") ?: return@mapNotNull null
|
||||||
|
data.getTeacher(firstName, lastName, id = id).id
|
||||||
|
} ?: listOf()
|
||||||
|
|
||||||
private fun valueToString(value: Any) = when (value) {
|
private fun valueToString(value: Any) = when (value) {
|
||||||
is String -> value
|
is String -> value
|
||||||
is Number -> value.toString()
|
is Number -> value.toString()
|
||||||
|
@ -10,6 +10,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.usos.*
|
|||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiCourses
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiCourses
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiTerms
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiTerms
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiTimetable
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiTimetable
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api.UsosApiUser
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
|
|
||||||
class UsosData(val data: DataUsos, val onSuccess: () -> Unit) {
|
class UsosData(val data: DataUsos, val onSuccess: () -> Unit) {
|
||||||
@ -41,10 +42,10 @@ class UsosData(val data: DataUsos, val onSuccess: () -> Unit) {
|
|||||||
private fun useEndpoint(endpointId: Int, lastSync: Long?, onSuccess: (endpointId: Int) -> Unit) {
|
private fun useEndpoint(endpointId: Int, lastSync: Long?, onSuccess: (endpointId: Int) -> Unit) {
|
||||||
d(TAG, "Using endpoint $endpointId. Last sync time = $lastSync")
|
d(TAG, "Using endpoint $endpointId. Last sync time = $lastSync")
|
||||||
when (endpointId) {
|
when (endpointId) {
|
||||||
/*ENDPOINT_USOS_API_USER -> {
|
ENDPOINT_USOS_API_USER -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_student_info)
|
data.startProgress(R.string.edziennik_progress_endpoint_student_info)
|
||||||
// TemplateWebSample(data, lastSync, onSuccess)
|
UsosApiUser(data, lastSync, onSuccess)
|
||||||
}*/
|
}
|
||||||
ENDPOINT_USOS_API_TERMS -> {
|
ENDPOINT_USOS_API_TERMS -> {
|
||||||
data.startProgress(R.string.edziennik_progress_endpoint_school_info)
|
data.startProgress(R.string.edziennik_progress_endpoint_school_info)
|
||||||
UsosApiTerms(data, lastSync, onSuccess)
|
UsosApiTerms(data, lastSync, onSuccess)
|
||||||
|
@ -36,7 +36,7 @@ class UsosApiCourses(
|
|||||||
"group_number",
|
"group_number",
|
||||||
// "class_type",
|
// "class_type",
|
||||||
"class_type_id",
|
"class_type_id",
|
||||||
// "lecturers",
|
"lecturers",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@ -69,6 +69,7 @@ class UsosApiCourses(
|
|||||||
val groupNumber = userGroup.getInt("group_number") ?: continue
|
val groupNumber = userGroup.getInt("group_number") ?: continue
|
||||||
// val classType = userGroup.getLangString("class_type") ?: continue
|
// val classType = userGroup.getLangString("class_type") ?: continue
|
||||||
val classTypeId = userGroup.getString("class_type_id") ?: continue
|
val classTypeId = userGroup.getString("class_type_id") ?: continue
|
||||||
|
val lecturers = userGroup.getLecturerIds("lecturers")
|
||||||
|
|
||||||
data.teamList.put(courseUnitId, Team(
|
data.teamList.put(courseUnitId, Team(
|
||||||
profileId,
|
profileId,
|
||||||
@ -76,7 +77,7 @@ class UsosApiCourses(
|
|||||||
"${profile?.studentClassName} $classTypeId$groupNumber - $courseName",
|
"${profile?.studentClassName} $classTypeId$groupNumber - $courseName",
|
||||||
2,
|
2,
|
||||||
"${data.schoolId}:${courseId} $classTypeId$groupNumber",
|
"${data.schoolId}:${courseId} $classTypeId$groupNumber",
|
||||||
-1,
|
lecturers.firstOrNull() ?: -1L,
|
||||||
))
|
))
|
||||||
hasValidTeam = true
|
hasValidTeam = true
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2022-10-16.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.api
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.ERROR_USOS_NO_STUDENT_PROGRAMMES
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.DataUsos
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.ENDPOINT_USOS_API_USER
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.UsosApi
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
|
import pl.szczodrzynski.edziennik.ext.*
|
||||||
|
|
||||||
|
class UsosApiUser(
|
||||||
|
override val data: DataUsos,
|
||||||
|
override val lastSync: Long?,
|
||||||
|
val onSuccess: (endpointId: Int) -> Unit,
|
||||||
|
) : UsosApi(data, lastSync) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "UsosApiUser"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
apiRequest<JsonObject>(
|
||||||
|
tag = TAG,
|
||||||
|
service = "users/user",
|
||||||
|
params = mapOf(
|
||||||
|
"fields" to listOf(
|
||||||
|
"id",
|
||||||
|
"first_name",
|
||||||
|
"last_name",
|
||||||
|
"student_number",
|
||||||
|
"student_programmes" to listOf(
|
||||||
|
"programme" to listOf("id"),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
responseType = ResponseType.OBJECT,
|
||||||
|
) { json, response ->
|
||||||
|
val programmes = json.getJsonArray("student_programmes")
|
||||||
|
if (programmes.isNullOrEmpty()) {
|
||||||
|
data.error(ApiError(TAG, ERROR_USOS_NO_STUDENT_PROGRAMMES)
|
||||||
|
.withApiResponse(json)
|
||||||
|
.withResponse(response))
|
||||||
|
return@apiRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
val firstName = json.getString("first_name")
|
||||||
|
val lastName = json.getString("last_name")
|
||||||
|
val studentName = buildFullName(firstName, lastName)
|
||||||
|
|
||||||
|
data.studentId = json.getInt("id") ?: data.studentId
|
||||||
|
profile?.studentNameLong = studentName
|
||||||
|
profile?.studentNameShort = studentName.getShortName()
|
||||||
|
profile?.studentNumber = json.getInt("student_number", -1)
|
||||||
|
profile?.studentClassName = programmes.getJsonObject(0).getJsonObject("programme").getString("id")
|
||||||
|
|
||||||
|
profile?.studentClassName?.let {
|
||||||
|
data.getTeam(
|
||||||
|
id = null,
|
||||||
|
name = it,
|
||||||
|
schoolCode = data.schoolId ?: "",
|
||||||
|
isTeamClass = true,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_USOS_API_USER, 4 * DAY)
|
||||||
|
onSuccess(ENDPOINT_USOS_API_USER)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -449,14 +449,14 @@ abstract class Data(val app: App, val profile: Profile?, val loginStore: LoginSt
|
|||||||
return team
|
return team
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeacher(firstName: String, lastName: String, loginId: String? = null): Teacher {
|
fun getTeacher(firstName: String, lastName: String, loginId: String? = null, id: Long? = null): Teacher {
|
||||||
val teacher = teacherList.singleOrNull { it.fullName == "$firstName $lastName" }
|
val teacher = teacherList.singleOrNull { it.fullName == "$firstName $lastName" }
|
||||||
return validateTeacher(teacher, firstName, lastName, loginId)
|
return validateTeacher(teacher, firstName, lastName, loginId, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeacher(firstNameChar: Char, lastName: String, loginId: String? = null): Teacher {
|
fun getTeacher(firstNameChar: Char, lastName: String, loginId: String? = null): Teacher {
|
||||||
val teacher = teacherList.singleOrNull { it.shortName == "$firstNameChar.$lastName" }
|
val teacher = teacherList.singleOrNull { it.shortName == "$firstNameChar.$lastName" }
|
||||||
return validateTeacher(teacher, firstNameChar.toString(), lastName, loginId)
|
return validateTeacher(teacher, firstNameChar.toString(), lastName, loginId, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeacherByLastFirst(nameLastFirst: String, loginId: String? = null): Teacher {
|
fun getTeacherByLastFirst(nameLastFirst: String, loginId: String? = null): Teacher {
|
||||||
@ -464,9 +464,9 @@ abstract class Data(val app: App, val profile: Profile?, val loginStore: LoginSt
|
|||||||
val teacher = teacherList.singleOrNull { it.fullNameLastFirst == nameLastFirst }
|
val teacher = teacherList.singleOrNull { it.fullNameLastFirst == nameLastFirst }
|
||||||
val nameParts = nameLastFirst.split(" ", limit = 2)
|
val nameParts = nameLastFirst.split(" ", limit = 2)
|
||||||
return if (nameParts.size == 1)
|
return if (nameParts.size == 1)
|
||||||
validateTeacher(teacher, nameParts[0], "", loginId)
|
validateTeacher(teacher, nameParts[0], "", loginId, null)
|
||||||
else
|
else
|
||||||
validateTeacher(teacher, nameParts[1], nameParts[0], loginId)
|
validateTeacher(teacher, nameParts[1], nameParts[0], loginId, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeacherByFirstLast(nameFirstLast: String, loginId: String? = null): Teacher {
|
fun getTeacherByFirstLast(nameFirstLast: String, loginId: String? = null): Teacher {
|
||||||
@ -474,9 +474,9 @@ abstract class Data(val app: App, val profile: Profile?, val loginStore: LoginSt
|
|||||||
val teacher = teacherList.singleOrNull { it.fullName == nameFirstLast }
|
val teacher = teacherList.singleOrNull { it.fullName == nameFirstLast }
|
||||||
val nameParts = nameFirstLast.split(" ", limit = 2)
|
val nameParts = nameFirstLast.split(" ", limit = 2)
|
||||||
return if (nameParts.size == 1)
|
return if (nameParts.size == 1)
|
||||||
validateTeacher(teacher, nameParts[0], "", loginId)
|
validateTeacher(teacher, nameParts[0], "", loginId, null)
|
||||||
else
|
else
|
||||||
validateTeacher(teacher, nameParts[0], nameParts[1], loginId)
|
validateTeacher(teacher, nameParts[0], nameParts[1], loginId, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeacherByFDotLast(nameFDotLast: String, loginId: String? = null): Teacher {
|
fun getTeacherByFDotLast(nameFDotLast: String, loginId: String? = null): Teacher {
|
||||||
@ -495,10 +495,16 @@ abstract class Data(val app: App, val profile: Profile?, val loginStore: LoginSt
|
|||||||
getTeacher(nameParts[0][0], nameParts[1], loginId)
|
getTeacher(nameParts[0][0], nameParts[1], loginId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun validateTeacher(teacher: Teacher?, firstName: String, lastName: String, loginId: String?): Teacher {
|
private fun validateTeacher(
|
||||||
val obj = teacher ?: Teacher(profileId, -1, firstName, lastName, loginId).apply {
|
teacher: Teacher?,
|
||||||
id = fullName.crc32()
|
firstName: String,
|
||||||
teacherList[id] = this
|
lastName: String,
|
||||||
|
loginId: String?,
|
||||||
|
id: Long?
|
||||||
|
): Teacher {
|
||||||
|
val obj = teacher ?: Teacher(profileId, -1, firstName, lastName, loginId).also {
|
||||||
|
it.id = id ?: it.fullName.crc32()
|
||||||
|
teacherList[it.id] = it
|
||||||
}
|
}
|
||||||
return obj.also {
|
return obj.also {
|
||||||
if (loginId != null)
|
if (loginId != null)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user