Lint: strict mode on; tune detekt thresholds; more decompositions
This commit is contained in:
@@ -159,63 +159,77 @@ class GroupService(
|
||||
val updated = mutableListOf<String>()
|
||||
|
||||
parsed.students.forEach { parsedStudent ->
|
||||
val existing = students.findByStudentNo(parsedStudent.studentNo)
|
||||
val student =
|
||||
if (existing != null) {
|
||||
existing.lastName = parsedStudent.lastName
|
||||
existing.firstName = parsedStudent.firstName
|
||||
existing.middleName = parsedStudent.middleName
|
||||
existing.basis = parsedStudent.basis
|
||||
existing.note = parsedStudent.note
|
||||
students.save(existing)
|
||||
updated.add(parsedStudent.studentNo)
|
||||
existing
|
||||
} else {
|
||||
val password = Passwords.generate()
|
||||
val account =
|
||||
accounts.save(
|
||||
Account(
|
||||
login = parsedStudent.studentNo,
|
||||
passwordHash = passwordEncoder.encode(password) ?: "",
|
||||
role = LmsRole.STUDENT,
|
||||
mustChangePassword = true,
|
||||
tempPassword = password,
|
||||
),
|
||||
)
|
||||
val created =
|
||||
Student(
|
||||
studentNo = parsedStudent.studentNo,
|
||||
lastName = parsedStudent.lastName,
|
||||
firstName = parsedStudent.firstName,
|
||||
middleName = parsedStudent.middleName,
|
||||
basis = parsedStudent.basis,
|
||||
note = parsedStudent.note,
|
||||
)
|
||||
created.account = account
|
||||
students.save(created)
|
||||
added.add(
|
||||
Credential(
|
||||
id = account.id.toString(),
|
||||
studentNo = parsedStudent.studentNo,
|
||||
fullName = parsedStudent.fullName,
|
||||
password = password,
|
||||
),
|
||||
)
|
||||
created
|
||||
}
|
||||
|
||||
val accountId = student.accountId!!
|
||||
val enrollment = enrollments.findByStudentAccountId(accountId)
|
||||
if (enrollment == null) {
|
||||
enrollments.save(Enrollment(group = group, student = student))
|
||||
} else {
|
||||
enrollment.group = group
|
||||
enrollments.save(enrollment)
|
||||
}
|
||||
val student = upsertStudent(parsedStudent, added, updated)
|
||||
enrollIntoGroup(group, student)
|
||||
}
|
||||
return ImportResult(group.id.toString(), group.name, added, updated)
|
||||
}
|
||||
|
||||
/** Обновляет существующего студента или создаёт нового с временным паролем. */
|
||||
private fun upsertStudent(
|
||||
parsed: ParsedStudent,
|
||||
added: MutableList<Credential>,
|
||||
updated: MutableList<String>,
|
||||
): Student {
|
||||
val existing = students.findByStudentNo(parsed.studentNo)
|
||||
if (existing != null) {
|
||||
existing.lastName = parsed.lastName
|
||||
existing.firstName = parsed.firstName
|
||||
existing.middleName = parsed.middleName
|
||||
existing.basis = parsed.basis
|
||||
existing.note = parsed.note
|
||||
students.save(existing)
|
||||
updated.add(parsed.studentNo)
|
||||
return existing
|
||||
}
|
||||
val password = Passwords.generate()
|
||||
val account =
|
||||
accounts.save(
|
||||
Account(
|
||||
login = parsed.studentNo,
|
||||
passwordHash = passwordEncoder.encode(password) ?: "",
|
||||
role = LmsRole.STUDENT,
|
||||
mustChangePassword = true,
|
||||
tempPassword = password,
|
||||
),
|
||||
)
|
||||
val created =
|
||||
Student(
|
||||
studentNo = parsed.studentNo,
|
||||
lastName = parsed.lastName,
|
||||
firstName = parsed.firstName,
|
||||
middleName = parsed.middleName,
|
||||
basis = parsed.basis,
|
||||
note = parsed.note,
|
||||
)
|
||||
created.account = account
|
||||
students.save(created)
|
||||
added.add(
|
||||
Credential(
|
||||
id = account.id.toString(),
|
||||
studentNo = parsed.studentNo,
|
||||
fullName = parsed.fullName,
|
||||
password = password,
|
||||
),
|
||||
)
|
||||
return created
|
||||
}
|
||||
|
||||
/** Зачисляет студента в группу (или переводит из другой). */
|
||||
private fun enrollIntoGroup(
|
||||
group: GroupEntity,
|
||||
student: Student,
|
||||
) {
|
||||
val accountId = student.accountId!!
|
||||
val enrollment = enrollments.findByStudentAccountId(accountId)
|
||||
if (enrollment == null) {
|
||||
enrollments.save(Enrollment(group = group, student = student))
|
||||
} else {
|
||||
enrollment.group = group
|
||||
enrollments.save(enrollment)
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
fun groupOfStudent(accountId: UUID): GroupSummary? {
|
||||
val group = enrollments.findByStudentAccountId(accountId)?.group ?: return null
|
||||
|
||||
Reference in New Issue
Block a user