headless_lms_server/programs/seed/builder/mod.rs
1//! Builder pattern API for creating course seed data declaratively.
2//!
3//! # Usage
4//!
5//! ```rust
6//! use chrono::Utc;
7//! use sqlx::Connection;
8//! use headless_lms_base::config::ApplicationConfiguration;
9//!
10//! use headless_lms_server::programs::seed::builder::{
11//! course::CourseBuilder,
12//! module::ModuleBuilder,
13//! chapter::ChapterBuilder,
14//! page::PageBuilder,
15//! context::SeedContext,
16//! };
17//!
18//! # async fn example() -> anyhow::Result<()> {
19//! # let mut conn = sqlx::PgConnection::connect("postgresql://").await?;
20//! # let app_config = ApplicationConfiguration::try_from_env()?;
21//! # let teacher = uuid::Uuid::new_v4();
22//! # let org = uuid::Uuid::new_v4();
23//! # let base_course_ns = uuid::Uuid::new_v4();
24//! # let mut context = SeedContext { teacher, org, base_course_ns };
25//! let course = CourseBuilder::new("My Course", "my-course")
26//! .desc("A sample course")
27//! .chatbot(true)
28//! .module(
29//! ModuleBuilder::new()
30//! .order(0)
31//! .name("Introduction")
32//! .ects(5.0)
33//! .chapter(
34//! ChapterBuilder::new(1, "Getting Started")
35//! .opens(Utc::now())
36//! .page(PageBuilder::new("/intro", "Introduction Page"))
37//! )
38//! );
39//!
40//! let (course, instance, module) = course.seed(&mut conn, &app_config, &context).await?;
41//! # Ok(())
42//! # }
43//! ```
44
45pub mod certificate;
46pub mod chapter;
47pub mod context;
48pub mod course;
49pub mod exercise;
50pub mod id;
51pub mod json_source;
52pub mod module;
53pub mod page;