@@ -6,12 +6,17 @@ import com.watcourses.wat_courses.persistence.DbStudentProfileRepo
6
6
import com.watcourses.wat_courses.persistence.DbStudentProfileSchedule
7
7
import com.watcourses.wat_courses.persistence.DbStudentProfileScheduleRepo
8
8
import com.watcourses.wat_courses.persistence.DbTermScheduleRepo
9
+ import com.watcourses.wat_courses.persistence.DbUserRepo
9
10
import com.watcourses.wat_courses.proto.*
10
11
import com.watcourses.wat_courses.rules.Checker
11
12
import com.watcourses.wat_courses.rules.DegreeRequirementLoader
13
+ import com.watcourses.wat_courses.utils.SessionManager
12
14
import com.watcourses.wat_courses.utils.create
13
15
import com.watcourses.wat_courses.utils.unionFlatten
16
+ import org.springframework.http.HttpStatus
14
17
import org.springframework.web.bind.annotation.*
18
+ import org.springframework.web.server.ResponseStatusException
19
+ import javax.servlet.http.HttpServletRequest
15
20
import javax.transaction.Transactional
16
21
17
22
@Transactional
@@ -22,7 +27,9 @@ class StudentProfileApi(
22
27
private val dbStudentProfileRepo : DbStudentProfileRepo ,
23
28
private val dbTermScheduleRepo : DbTermScheduleRepo ,
24
29
private val dbCourseRepo : DbCourseRepo ,
25
- private val checker : Checker
30
+ private val dbUserRepo : DbUserRepo ,
31
+ private val checker : Checker ,
32
+ private val sessionManager : SessionManager ,
26
33
) {
27
34
@GetMapping(" /profile/default" )
28
35
fun getDefaultStudentProfile (program : String ): StudentProfile {
@@ -35,29 +42,58 @@ class StudentProfileApi(
35
42
}
36
43
37
44
@PostMapping(" /profile/create" )
38
- fun createStudentProfile (@RequestBody request : CreateStudentProfileRequest ): StudentProfile {
45
+ fun createDefaultStudentProfile (
46
+ @RequestBody request : CreateDefaultStudentProfileRequest ,
47
+ httpRequest : HttpServletRequest
48
+ ): StudentProfile {
49
+ val owner = sessionManager.getCurrentUser(httpRequest)
50
+ ? : throw ResponseStatusException (HttpStatus .NOT_FOUND , " Not logged in" )
39
51
val degrees = request.degrees
40
52
val degreeRequirements = degrees.map { degreeRequirementLoader.getDegreeRequirement(it)!! }
41
53
val startingYear = request.startingYear!!
42
54
val stream = request.coopStream!!
43
- val defaultSchedule = degreeRequirements.single { it.defaultSchedule?.terms?.isNotEmpty() == true }
55
+ val defaultSchedule = degreeRequirements
56
+ .single { it.defaultSchedule?.terms?.isNotEmpty() == true }
44
57
.defaultSchedule!!
45
58
val importedSchedule = request.schedule
46
59
val mergedSchedule = importedSchedule?.let { mergeSchedule(it, defaultSchedule) } ? : defaultSchedule
47
60
48
61
val dbStudentProfile = DbStudentProfile .create(
49
62
dbStudentProfileRepo = dbStudentProfileRepo,
50
- schedule = DbStudentProfileSchedule .create (
63
+ schedule = DbStudentProfileSchedule .createOrUpdate (
51
64
dbStudentProfileScheduleRepo = dbStudentProfileScheduleRepo,
52
65
dbTermScheduleRepo = dbTermScheduleRepo,
53
66
dbCourseRepo = dbCourseRepo,
54
67
schedule = Schedule .create(mergedSchedule, startingYear, stream),
68
+ existingDbStudentProfileSchedule = null ,
55
69
),
56
70
degrees = degrees.toMutableList(),
57
71
labels = degreeRequirements.map { it.labels.toSet() }.unionFlatten().toMutableList(),
58
- owner = null ,
72
+ owner = owner ,
59
73
)
74
+ owner.studentProfile = dbStudentProfile
75
+ dbUserRepo.save(owner)
76
+ return dbStudentProfile.toProto()
77
+ }
78
+
79
+ @PostMapping(" /profile/create-or-update" )
80
+ fun createOrUpdateStudentProfile (
81
+ @RequestBody studentProfile : StudentProfile ,
82
+ httpRequest : HttpServletRequest
83
+ ): StudentProfile {
84
+ val owner = sessionManager.getCurrentUser(httpRequest)
85
+ ? : throw ResponseStatusException (HttpStatus .NOT_FOUND , " Not logged in" )
60
86
87
+ val dbStudentProfile = DbStudentProfile .createOrUpdate(
88
+ dbStudentProfileScheduleRepo = dbStudentProfileScheduleRepo,
89
+ dbTermScheduleRepo = dbTermScheduleRepo,
90
+ dbStudentProfileRepo = dbStudentProfileRepo,
91
+ dbCourseRepo = dbCourseRepo,
92
+ studentProfile = studentProfile,
93
+ owner = owner,
94
+ )
95
+ owner.studentProfile = dbStudentProfile
96
+ dbUserRepo.save(owner)
61
97
return dbStudentProfile.toProto()
62
98
}
63
99
0 commit comments