headless_lms_credit_registration/runtime/suotar/
encode.rs1use chrono::SubsecRound;
4use headless_lms_utils::services::suotar::{
5 ImportAttainmentRequestItem, ListByCourseRequestItem, ResolveEnrolmentRequestItem,
6 ResolvePersonRequestItem, ValidateCourseCodeRequestItem, VerifyAttainmentRequestItem,
7};
8
9use crate::registry::{
10 AttainmentSubmission, CourseCode, EnrolmentLookup, PersonLookup, StudentNumber,
11 VerificationRequest,
12};
13
14pub(super) fn person_item(
15 student_number: &StudentNumber,
16 request_item_id: String,
17) -> ResolvePersonRequestItem {
18 ResolvePersonRequestItem {
19 request_item_id,
20 student_number: student_number.as_secret().clone(),
21 }
22}
23
24pub(super) fn person_lookup_item(
25 lookup: &PersonLookup,
26 request_item_id: String,
27) -> ResolvePersonRequestItem {
28 person_item(&lookup.student_number, request_item_id)
29}
30
31pub(super) fn enrolment_item(
32 lookup: &EnrolmentLookup,
33 request_item_id: String,
34) -> ResolveEnrolmentRequestItem {
35 ResolveEnrolmentRequestItem {
36 request_item_id,
37 student_number: lookup.student_number.as_secret().clone(),
38 course_code: lookup.course_code.as_str().to_string(),
39 }
40}
41
42pub(super) fn import_item(
43 submission: &AttainmentSubmission,
44 request_item_id: String,
45) -> ImportAttainmentRequestItem {
46 ImportAttainmentRequestItem {
47 request_item_id,
48 student_number: submission.student_number.as_secret().clone(),
49 course_code: submission.course_code.as_str().to_string(),
50 enrolment_id: submission.enrolment_id.clone(),
51 attainment_date: submission.attained_at.trunc_subsecs(0),
52 attainment_language: submission.attainment_language.clone(),
53 grade_scale_id: submission.grade.grade_scale_id.clone(),
54 grade_id: submission.grade.grade_id.clone(),
55 credits: submission.credits.as_f64(),
56 }
57}
58
59pub(super) fn verify_item(
60 request: &VerificationRequest,
61 request_item_id: String,
62) -> VerifyAttainmentRequestItem {
63 VerifyAttainmentRequestItem {
64 request_item_id,
65 submitted_attainment_id: request.submitted_attainment_id.as_str().to_string(),
66 }
67}
68
69pub(super) fn roster_item(
70 course_code: &CourseCode,
71 request_item_id: String,
72) -> ListByCourseRequestItem {
73 ListByCourseRequestItem {
74 request_item_id,
75 course_code: course_code.as_str().to_string(),
76 }
77}
78
79pub(super) fn course_code_item(
80 course_code: &CourseCode,
81 request_item_id: String,
82) -> ValidateCourseCodeRequestItem {
83 ValidateCourseCodeRequestItem {
84 request_item_id,
85 course_code: course_code.as_str().to_string(),
86 }
87}