Skip to main content

headless_lms_server/programs/seed/seed_courses/
seed_introduction_to_course_auditing.rs

1use crate::programs::seed::builder::chapter::ChapterBuilder;
2use crate::programs::seed::builder::context::SeedContext;
3use crate::programs::seed::builder::course::{CourseBuilder, CourseInstanceConfig};
4use crate::programs::seed::builder::module::ModuleBuilder;
5use crate::programs::seed::seed_courses::CommonCourseData;
6use anyhow::Result;
7use headless_lms_base::config::ApplicationConfiguration;
8use headless_lms_models::roles::UserRole;
9use tracing::info;
10use uuid::Uuid;
11
12pub async fn seed_introduction_to_course_auditing(
13    app_config: &ApplicationConfiguration,
14    course_id: Uuid,
15    course_name: &str,
16    course_slug: &str,
17    common_course_data: CommonCourseData,
18) -> Result<Uuid> {
19    let CommonCourseData {
20        db_pool,
21        organization_id: org,
22        teacher_user_id,
23        student_user_id: _student,
24        langs_user_id: _langs_user_id,
25        example_normal_user_ids: _users,
26        jwt_key: _jwt_key,
27        base_url: _base_url,
28    } = common_course_data;
29
30    let mut conn = db_pool.acquire().await?;
31    let cx = SeedContext {
32        teacher: teacher_user_id,
33        org,
34        base_course_ns: course_id,
35    };
36
37    info!(
38        "inserting introduction to course auditing course {}",
39        course_name
40    );
41
42    let course = CourseBuilder::new(course_name, course_slug)
43        .desc("Course for viewing and editing course data within course auditing page")
44        .course_id(course_id)
45        .instance(CourseInstanceConfig {
46            name: None,
47            description: None,
48            support_email: None,
49            teacher_in_charge_name: "admin".to_string(),
50            teacher_in_charge_email: "admin@example.com".to_string(),
51            opening_time: None,
52            closing_time: None,
53            instance_id: Some(cx.v5(b"071e2dcf-1e3d-4f58-8b1e-c9962420e317")),
54        })
55        .role(teacher_user_id, UserRole::Teacher)
56        .module(ModuleBuilder::new().order(0).chapter(
57            ChapterBuilder::new(1, "Chapter 1").fixed_ids(
58                cx.v5(b"cd4bf055-f5a6-4338-973a-88dad559bdcd"),
59                cx.v5(b"9bef81f2-c95f-4ff8-aebc-6e0fcd4ef42c"),
60            ),
61        ))
62        .module(
63            ModuleBuilder::new()
64                .order(1)
65                .name("Another module")
66                .uh_course_code("TEST002".to_string())
67                .chapter(ChapterBuilder::new(2, "Chapter 2").fixed_ids(
68                    cx.v5(b"d22c47f0-c442-4032-ad2d-3544a0463a02"),
69                    cx.v5(b"c11d8d2e-3e53-4ed3-9b96-4092a2fec2da"),
70                )),
71        )
72        .module(
73            ModuleBuilder::new()
74                .order(2)
75                .name("Bonus module")
76                .uh_course_code("TEST003".to_string())
77                .chapter(ChapterBuilder::new(3, "Chapter 3").fixed_ids(
78                    cx.v5(b"5602b4f4-f07e-4a6d-82b0-c26fc0ed94c8"),
79                    cx.v5(b"eb4d622c-24b4-4d18-b4da-a99ed24ca7ff"),
80                )),
81        );
82
83    let (course, _default_instance, _last_module) = course.seed(&mut conn, app_config, &cx).await?;
84
85    Ok(course.id)
86}