Refactor: move defense API methods into separate extension file

This commit is contained in:
2026-09-27 22:31:06 +03:00
parent ab382ed178
commit 36368f543e
2 changed files with 118 additions and 113 deletions

View File

@@ -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<DefenseDto> {
val type = object : ParameterizedTypeReference<List<DefenseDto>>() {}
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<DefenseDto> {
val type = object : ParameterizedTypeReference<List<DefenseDto>>() {}
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)
}

View File

@@ -258,116 +258,3 @@ fun ApiClient.downloadSubmissionAsAdmin(
} }
return downloadOf(entity) return downloadOf(entity)
} }
fun ApiClient.labDefenses(
token: String,
labId: String,
): List<DefenseDto> {
val type = object : ParameterizedTypeReference<List<DefenseDto>>() {}
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<DefenseDto> {
val type = object : ParameterizedTypeReference<List<DefenseDto>>() {}
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)
}