Skip to main content

headless_lms_credit_registration/runtime/suotar/
encode.rs

1//! Requests into Suotar's wire items, each under the requestItemId it goes out with.
2
3use 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}