Admin group: counter = number of group students who submitted a solution
This commit is contained in:
@@ -22,6 +22,7 @@ import ru.ysu.lms.web.api.GradeSetPayload
|
||||
import ru.ysu.lms.web.api.GroupDetailDto
|
||||
import ru.ysu.lms.web.api.LabSummaryDto
|
||||
import ru.ysu.lms.web.api.StudentCandidateDto
|
||||
import ru.ysu.lms.web.api.SubmissionDto
|
||||
import ru.ysu.lms.web.api.createGroup
|
||||
import ru.ysu.lms.web.api.downloadSubmissionAsAdmin
|
||||
import ru.ysu.lms.web.api.getLabAssignments
|
||||
@@ -37,7 +38,6 @@ import ru.ysu.lms.web.api.listGroups
|
||||
import ru.ysu.lms.web.api.listLabs
|
||||
import ru.ysu.lms.web.api.publishGrades
|
||||
import ru.ysu.lms.web.api.setGrade
|
||||
import ru.ysu.lms.web.api.submissionCount
|
||||
import ru.ysu.lms.web.api.suggestComments
|
||||
import tools.jackson.databind.ObjectMapper
|
||||
import java.net.URLEncoder
|
||||
@@ -192,7 +192,7 @@ class AdminGroupController(
|
||||
)
|
||||
}
|
||||
|
||||
fillGroupModel(model, groupViewModel(t, id, GroupRenderData(group, labs, rows, publishedLabs)))
|
||||
fillGroupModel(model, groupViewModel(t, id, GroupRenderData(group, labs, rows, publishedLabs, submissionsBy)))
|
||||
return "admin/group"
|
||||
}
|
||||
|
||||
@@ -206,6 +206,7 @@ class AdminGroupController(
|
||||
val labs: List<LabSummaryDto>,
|
||||
val rows: List<GroupStudentRow>,
|
||||
val publishedLabs: Set<String>,
|
||||
val submissionsBy: Map<LabSummaryDto, Map<String, SubmissionDto>>,
|
||||
)
|
||||
|
||||
private fun groupViewModel(
|
||||
@@ -213,7 +214,14 @@ class AdminGroupController(
|
||||
id: String,
|
||||
data: GroupRenderData,
|
||||
): GroupViewModel {
|
||||
val submissionCounts = data.labs.associate { it.id to api.submissionCount(token, it.id) }
|
||||
val memberIds =
|
||||
data.group.students
|
||||
.map { it.id }
|
||||
.toSet()
|
||||
val submissionCounts =
|
||||
data.labs.associate { lab ->
|
||||
lab.id to (data.submissionsBy[lab]?.keys?.count { it in memberIds } ?: 0)
|
||||
}
|
||||
val candidates = runCatching { api.groupCandidates(token, id) }.getOrDefault(emptyList())
|
||||
return GroupViewModel(data.group, data.labs, candidates, data.rows, data.publishedLabs, submissionCounts)
|
||||
}
|
||||
|
||||
@@ -6,23 +6,6 @@ import org.springframework.http.HttpHeaders
|
||||
import org.springframework.http.MediaType
|
||||
import org.springframework.util.LinkedMultiValueMap
|
||||
|
||||
fun ApiClient.submissionCount(
|
||||
token: String,
|
||||
labId: String,
|
||||
): Int {
|
||||
val type = object : ParameterizedTypeReference<Map<String, Long>>() {}
|
||||
val result =
|
||||
call {
|
||||
client
|
||||
.get()
|
||||
.uri("/api/v1/submissions/count?labId={id}", labId)
|
||||
.header(HttpHeaders.AUTHORIZATION, bearer(token))
|
||||
.retrieve()
|
||||
.body(type)
|
||||
}
|
||||
return (result["count"] ?: 0L).toInt()
|
||||
}
|
||||
|
||||
fun ApiClient.distribute(
|
||||
token: String,
|
||||
payload: DistributeRequestPayload,
|
||||
|
||||
Reference in New Issue
Block a user