headless_lms_models/library/
course_instances.rs1use crate::{
4 course_background_question_answers::NewCourseBackgroundQuestionAnswer,
5 course_instance_enrollments::{CourseInstanceEnrollment, NewCourseInstanceEnrollment},
6 prelude::*,
7};
8
9pub async fn enroll(
11 conn: &mut PgConnection,
12 user_id: Uuid,
13 course_instance_id: Uuid,
14 background_question_answers: &[NewCourseBackgroundQuestionAnswer],
15) -> anyhow::Result<CourseInstanceEnrollment> {
16 let mut tx = conn.begin().await?;
17
18 let instance =
19 crate::course_instances::get_course_instance(&mut tx, course_instance_id).await?;
20 let enrollment = crate::course_instance_enrollments::insert_enrollment_and_set_as_current(
21 &mut tx,
22 NewCourseInstanceEnrollment {
23 user_id,
24 course_id: instance.course_id,
25 course_instance_id,
26 },
27 )
28 .await?;
29
30 if !background_question_answers.is_empty() {
31 crate::course_background_question_answers::upsert_backround_question_answers(
32 &mut tx,
33 user_id,
34 background_question_answers,
35 )
36 .await?;
37 }
38 tx.commit().await?;
39 Ok(enrollment)
40}