From 514fbafd00a723c26bc6b171276d029dd69181be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 31 Jan 2025 19:16:03 +0100 Subject: [PATCH] [API/Usos] Change team codes to include unique ID or current year --- .../edziennik/usos/data/api/UsosApiCourses.kt | 44 ++++++++++++++----- .../edziennik/usos/data/api/UsosApiUser.kt | 22 +++++++--- 2 files changed, 48 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiCourses.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiCourses.kt index e93c63dd..e5086b15 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiCourses.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiCourses.kt @@ -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.ENDPOINT_USOS_API_COURSES 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.ext.* @@ -25,17 +26,20 @@ class UsosApiCourses( apiRequest( tag = TAG, service = "courses/user", + params = mapOf( + "active_terms_only" to false, + ), fields = listOf( // "terms" to listOf("id", "name", "start_date", "end_date"), "course_editions" to listOf( "course_id", "course_name", - // "term_id", "user_groups" to listOf( "course_unit_id", "group_number", - // "class_type", + "class_type", "class_type_id", + "term_id", "lecturers", ), ), @@ -63,22 +67,38 @@ class UsosApiCourses( for (courseEdition in courseEditions) { val courseId = courseEdition.getString("course_id") ?: 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) { val courseUnitId = userGroup.getLong("course_unit_id") ?: 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 termId = userGroup.getString("term_id") ?: continue val lecturers = userGroup.getLecturerIds("lecturers") - data.teamList.put(courseUnitId, Team( - profileId, - courseUnitId, - "${profile?.studentClassName} $classTypeId$groupNumber - $courseName", - 2, - "${data.schoolId}:${courseId} $classTypeId$groupNumber", - lecturers.firstOrNull() ?: -1L, - )) + data.teamList.put( + courseUnitId, Team( + profileId, + courseUnitId, + "${profile?.studentClassName} $courseName ($classTypeId$groupNumber)", + 2, + "${data.schoolId}:${termId}:${courseId} $classTypeId$groupNumber", + 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 } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiUser.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiUser.kt index 29a3e22b..0e3808f8 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiUser.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/usos/data/api/UsosApiUser.kt @@ -32,7 +32,8 @@ class UsosApiUser( "last_name", "student_number", "student_programmes" to listOf( - "programme" to listOf("id"), + "id", + "programme" to listOf("id", "description"), ), ), ), @@ -40,9 +41,11 @@ class UsosApiUser( ) { json, response -> val programmes = json.getJsonArray("student_programmes") if (programmes.isNullOrEmpty()) { - data.error(ApiError(TAG, ERROR_USOS_NO_STUDENT_PROGRAMMES) - .withApiResponse(json) - .withResponse(response)) + data.error( + ApiError(TAG, ERROR_USOS_NO_STUDENT_PROGRAMMES) + .withApiResponse(json) + .withResponse(response) + ) return@apiRequest } @@ -50,13 +53,19 @@ class UsosApiUser( val lastName = json.getString("last_name") 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 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 = programmeId - profile?.studentClassName?.let { + val team = programmeId?.let { data.getTeam( id = null, name = it, @@ -64,6 +73,7 @@ class UsosApiUser( isTeamClass = true, ) } + team?.code = "${data.schoolId}:${studentProgrammeId}:${programmeId}" data.setSyncNext(ENDPOINT_USOS_API_USER, 4 * DAY) onSuccess(ENDPOINT_USOS_API_USER)