headless_lms_models/
chapter_lock_action_logs.rs1use crate::prelude::*;
2use crate::user_chapter_locking_statuses::ChapterLockingStatus;
3use utoipa::ToSchema;
4
5#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, sqlx::FromRow, ToSchema)]
6pub struct ChapterLockActionLog {
7 pub id: Uuid,
8 pub actor_user_id: Option<Uuid>,
9 pub target_user_id: Uuid,
10 pub course_id: Uuid,
11 pub chapter_id: Uuid,
12 pub status: ChapterLockingStatus,
13 pub created_at: DateTime<Utc>,
14 pub updated_at: DateTime<Utc>,
15 pub deleted_at: Option<DateTime<Utc>>,
16}
17
18pub async fn insert(
19 conn: &mut PgConnection,
20 actor_user_id: Option<Uuid>,
21 target_user_id: Uuid,
22 course_id: Uuid,
23 chapter_id: Uuid,
24 status: ChapterLockingStatus,
25) -> ModelResult<ChapterLockActionLog> {
26 let row = sqlx::query_as!(
27 ChapterLockActionLog,
28 r#"
29INSERT INTO chapter_lock_action_logs (
30 actor_user_id,
31 target_user_id,
32 course_id,
33 chapter_id,
34 status
35)
36VALUES ($1, $2, $3, $4, $5)
37RETURNING *
38 "#,
39 actor_user_id,
40 target_user_id,
41 course_id,
42 chapter_id,
43 status as ChapterLockingStatus,
44 )
45 .fetch_one(conn)
46 .await?;
47 Ok(row)
48}