From 36368f543e54ffcebef0cefa4192a65c1f895f62 Mon Sep 17 00:00:00 2001 From: Vladislav Kopnin Date: Sun, 27 Sep 2026 22:31:06 +0300 Subject: [PATCH] Refactor: move defense API methods into separate extension file --- .../ru/ysu/lms/web/api/ApiClientDefense.kt | 118 ++++++++++++++++++ .../ru/ysu/lms/web/api/ApiClientProgress.kt | 113 ----------------- 2 files changed, 118 insertions(+), 113 deletions(-) create mode 100644 web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientDefense.kt diff --git a/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientDefense.kt b/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientDefense.kt new file mode 100644 index 0000000..8368ca0 --- /dev/null +++ b/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientDefense.kt @@ -0,0 +1,118 @@ +package ru.ysu.lms.web.api + +import org.springframework.core.ParameterizedTypeReference +import org.springframework.http.HttpHeaders +import org.springframework.http.MediaType + +fun ApiClient.labDefenses( + token: String, + labId: String, +): List { + val type = object : ParameterizedTypeReference>() {} + return call { + client + .get() + .uri("/api/v1/defenses?labId={labId}", labId) + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .retrieve() + .body(type) + } +} + +fun ApiClient.assignDefense( + token: String, + studentId: String, + labId: String, + assignmentMd: String, +): DefenseDto = + call { + client + .post() + .uri("/api/v1/defenses/assign") + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .contentType(MediaType.APPLICATION_JSON) + .body(mapOf("studentId" to studentId, "labId" to labId, "assignmentMd" to assignmentMd)) + .retrieve() + .body(DefenseDto::class.java) + } + +fun ApiClient.issueDefenseCode( + token: String, + sessionId: String, +): String = + call { + client + .post() + .uri("/api/v1/defenses/{id}/issue-code", sessionId) + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .retrieve() + .body(Map::class.java) + }.get("code").toString() + +fun ApiClient.resetDefense( + token: String, + sessionId: String, +) { + call { + client + .post() + .uri("/api/v1/defenses/{id}/reset", sessionId) + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .retrieve() + .toBodilessEntity() + } +} + +fun ApiClient.myDefenses(token: String): List { + val type = object : ParameterizedTypeReference>() {} + return call { + client + .get() + .uri("/api/v1/me/defenses") + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .retrieve() + .body(type) + } +} + +fun ApiClient.myDefense( + token: String, + labId: String, +): DefenseDto? = + callOrNull { + client + .get() + .uri("/api/v1/me/defenses/{labId}", labId) + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .retrieve() + .body(DefenseDto::class.java) + } + +fun ApiClient.startDefense( + token: String, + code: String, +): DefenseDto = + call { + client + .post() + .uri("/api/v1/me/defenses/start") + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .contentType(MediaType.APPLICATION_JSON) + .body(mapOf("code" to code)) + .retrieve() + .body(DefenseDto::class.java) + } + +fun ApiClient.finishDefense( + token: String, + sessionId: String, +): DefenseDto = + call { + client + .post() + .uri("/api/v1/me/defenses/{id}/finish", sessionId) + .header(HttpHeaders.AUTHORIZATION, bearer(token)) + .contentType(MediaType.APPLICATION_JSON) + .retrieve() + .body(DefenseDto::class.java) + } diff --git a/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientProgress.kt b/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientProgress.kt index 1c0d2cb..ec736c4 100644 --- a/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientProgress.kt +++ b/web/src/main/kotlin/ru/ysu/lms/web/api/ApiClientProgress.kt @@ -258,116 +258,3 @@ fun ApiClient.downloadSubmissionAsAdmin( } return downloadOf(entity) } - -fun ApiClient.labDefenses( - token: String, - labId: String, -): List { - val type = object : ParameterizedTypeReference>() {} - return call { - client - .get() - .uri("/api/v1/defenses?labId={labId}", labId) - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .retrieve() - .body(type) - } -} - -fun ApiClient.assignDefense( - token: String, - studentId: String, - labId: String, - assignmentMd: String, -): DefenseDto = - call { - client - .post() - .uri("/api/v1/defenses/assign") - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .contentType(MediaType.APPLICATION_JSON) - .body(mapOf("studentId" to studentId, "labId" to labId, "assignmentMd" to assignmentMd)) - .retrieve() - .body(DefenseDto::class.java) - } - -fun ApiClient.issueDefenseCode( - token: String, - sessionId: String, -): String = - call { - client - .post() - .uri("/api/v1/defenses/{id}/issue-code", sessionId) - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .retrieve() - .body(Map::class.java) - }.get("code").toString() - -fun ApiClient.resetDefense( - token: String, - sessionId: String, -) { - call { - client - .post() - .uri("/api/v1/defenses/{id}/reset", sessionId) - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .retrieve() - .toBodilessEntity() - } -} - -fun ApiClient.myDefenses(token: String): List { - val type = object : ParameterizedTypeReference>() {} - return call { - client - .get() - .uri("/api/v1/me/defenses") - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .retrieve() - .body(type) - } -} - -fun ApiClient.myDefense( - token: String, - labId: String, -): DefenseDto? = - callOrNull { - client - .get() - .uri("/api/v1/me/defenses/{labId}", labId) - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .retrieve() - .body(DefenseDto::class.java) - } - -fun ApiClient.startDefense( - token: String, - code: String, -): DefenseDto = - call { - client - .post() - .uri("/api/v1/me/defenses/start") - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .contentType(MediaType.APPLICATION_JSON) - .body(mapOf("code" to code)) - .retrieve() - .body(DefenseDto::class.java) - } - -fun ApiClient.finishDefense( - token: String, - sessionId: String, -): DefenseDto = - call { - client - .post() - .uri("/api/v1/me/defenses/{id}/finish", sessionId) - .header(HttpHeaders.AUTHORIZATION, bearer(token)) - .contentType(MediaType.APPLICATION_JSON) - .retrieve() - .body(DefenseDto::class.java) - }