[API/Usos] Change team codes to include unique ID or current year

This commit is contained in:
Kuba Szczodrzyński 2025-01-31 19:16:03 +01:00
parent c35222cdfd
commit 514fbafd00
No known key found for this signature in database
GPG Key ID: 43037AC62A600562
2 changed files with 48 additions and 18 deletions

View File

@ -9,6 +9,7 @@ import pl.szczodrzynski.edziennik.data.api.ERROR_USOS_API_INCOMPLETE_RESPONSE
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.DataUsos import pl.szczodrzynski.edziennik.data.api.edziennik.usos.DataUsos
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.ENDPOINT_USOS_API_COURSES import pl.szczodrzynski.edziennik.data.api.edziennik.usos.ENDPOINT_USOS_API_COURSES
import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.UsosApi import pl.szczodrzynski.edziennik.data.api.edziennik.usos.data.UsosApi
import pl.szczodrzynski.edziennik.data.db.entity.GradeCategory
import pl.szczodrzynski.edziennik.data.db.entity.Team import pl.szczodrzynski.edziennik.data.db.entity.Team
import pl.szczodrzynski.edziennik.ext.* import pl.szczodrzynski.edziennik.ext.*
@ -25,17 +26,20 @@ class UsosApiCourses(
apiRequest<JsonObject>( apiRequest<JsonObject>(
tag = TAG, tag = TAG,
service = "courses/user", service = "courses/user",
params = mapOf(
"active_terms_only" to false,
),
fields = listOf( fields = listOf(
// "terms" to listOf("id", "name", "start_date", "end_date"), // "terms" to listOf("id", "name", "start_date", "end_date"),
"course_editions" to listOf( "course_editions" to listOf(
"course_id", "course_id",
"course_name", "course_name",
// "term_id",
"user_groups" to listOf( "user_groups" to listOf(
"course_unit_id", "course_unit_id",
"group_number", "group_number",
// "class_type", "class_type",
"class_type_id", "class_type_id",
"term_id",
"lecturers", "lecturers",
), ),
), ),
@ -63,22 +67,38 @@ class UsosApiCourses(
for (courseEdition in courseEditions) { for (courseEdition in courseEditions) {
val courseId = courseEdition.getString("course_id") ?: continue val courseId = courseEdition.getString("course_id") ?: continue
val courseName = courseEdition.getLangString("course_name") ?: continue val courseName = courseEdition.getLangString("course_name") ?: continue
val userGroups = courseEdition.getJsonArray("user_groups")?.asJsonObjectList() ?: continue val userGroups =
courseEdition.getJsonArray("user_groups")?.asJsonObjectList() ?: continue
for (userGroup in userGroups) { for (userGroup in userGroups) {
val courseUnitId = userGroup.getLong("course_unit_id") ?: continue val courseUnitId = userGroup.getLong("course_unit_id") ?: continue
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 termId = userGroup.getString("term_id") ?: continue
val lecturers = userGroup.getLecturerIds("lecturers") val lecturers = userGroup.getLecturerIds("lecturers")
data.teamList.put(courseUnitId, Team( data.teamList.put(
courseUnitId, Team(
profileId, profileId,
courseUnitId, courseUnitId,
"${profile?.studentClassName} $classTypeId$groupNumber - $courseName", "${profile?.studentClassName} $courseName ($classTypeId$groupNumber)",
2, 2,
"${data.schoolId}:${courseId} $classTypeId$groupNumber", "${data.schoolId}:${termId}:${courseId} $classTypeId$groupNumber",
lecturers.firstOrNull() ?: -1L, lecturers.firstOrNull() ?: -1L,
)) )
)
val gradeCategory = data.gradeCategories[courseUnitId]
data.gradeCategories.put(
courseUnitId, GradeCategory(
profileId,
courseUnitId,
gradeCategory?.weight ?: -1.0f,
0,
courseId,
).addColumn(classType)
)
hasValidTeam = true hasValidTeam = true
} }
} }

View File

@ -32,7 +32,8 @@ class UsosApiUser(
"last_name", "last_name",
"student_number", "student_number",
"student_programmes" to listOf( "student_programmes" to listOf(
"programme" to listOf("id"), "id",
"programme" to listOf("id", "description"),
), ),
), ),
), ),
@ -40,9 +41,11 @@ class UsosApiUser(
) { json, response -> ) { json, response ->
val programmes = json.getJsonArray("student_programmes") val programmes = json.getJsonArray("student_programmes")
if (programmes.isNullOrEmpty()) { if (programmes.isNullOrEmpty()) {
data.error(ApiError(TAG, ERROR_USOS_NO_STUDENT_PROGRAMMES) data.error(
ApiError(TAG, ERROR_USOS_NO_STUDENT_PROGRAMMES)
.withApiResponse(json) .withApiResponse(json)
.withResponse(response)) .withResponse(response)
)
return@apiRequest return@apiRequest
} }
@ -50,13 +53,19 @@ class UsosApiUser(
val lastName = json.getString("last_name") val lastName = json.getString("last_name")
val studentName = buildFullName(firstName, lastName) val studentName = buildFullName(firstName, lastName)
val studentProgrammeId = programmes.getJsonObject(0)
.getString("id")
val programmeId = programmes.getJsonObject(0)
.getJsonObject("programme")
.getString("id")
data.studentId = json.getInt("id") ?: data.studentId data.studentId = json.getInt("id") ?: data.studentId
profile?.studentNameLong = studentName profile?.studentNameLong = studentName
profile?.studentNameShort = studentName.getShortName() profile?.studentNameShort = studentName.getShortName()
profile?.studentNumber = json.getInt("student_number", -1) profile?.studentNumber = json.getInt("student_number", -1)
profile?.studentClassName = programmes.getJsonObject(0).getJsonObject("programme").getString("id") profile?.studentClassName = programmeId
profile?.studentClassName?.let { val team = programmeId?.let {
data.getTeam( data.getTeam(
id = null, id = null,
name = it, name = it,
@ -64,6 +73,7 @@ class UsosApiUser(
isTeamClass = true, isTeamClass = true,
) )
} }
team?.code = "${data.schoolId}:${studentProgrammeId}:${programmeId}"
data.setSyncNext(ENDPOINT_USOS_API_USER, 4 * DAY) data.setSyncNext(ENDPOINT_USOS_API_USER, 4 * DAY)
onSuccess(ENDPOINT_USOS_API_USER) onSuccess(ENDPOINT_USOS_API_USER)