Modularize learn schema and clean up channels/project schema stubs
This commit is contained in:
parent
fc9c07d204
commit
3db87c029d
5 changed files with 162 additions and 141 deletions
|
|
@ -1,21 +0,0 @@
|
|||
use diesel::prelude::*;
|
||||
|
||||
diesel::table! {
|
||||
channel_accounts (id) {
|
||||
id -> Uuid,
|
||||
organization_id -> Uuid,
|
||||
name -> Text,
|
||||
channel_type -> Text,
|
||||
credentials -> Jsonb,
|
||||
settings -> Jsonb,
|
||||
is_active -> Bool,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::joinable!(channel_accounts -> crate::core::shared::schema::core::organizations (organization_id));
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
channel_accounts,
|
||||
);
|
||||
118
src/core/shared/schema/learn.rs
Normal file
118
src/core/shared/schema/learn.rs
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
use diesel::prelude::*;
|
||||
|
||||
diesel::table! {
|
||||
learn_courses (id) {
|
||||
id -> Uuid,
|
||||
organization_id -> Nullable<Uuid>,
|
||||
title -> Text,
|
||||
description -> Nullable<Text>,
|
||||
category -> Text,
|
||||
difficulty -> Text,
|
||||
duration_minutes -> Int4,
|
||||
thumbnail_url -> Nullable<Text>,
|
||||
is_mandatory -> Bool,
|
||||
due_days -> Nullable<Int4>,
|
||||
is_published -> Bool,
|
||||
created_by -> Nullable<Uuid>,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_lessons (id) {
|
||||
id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
title -> Text,
|
||||
content -> Nullable<Text>,
|
||||
content_type -> Text,
|
||||
lesson_order -> Int4,
|
||||
duration_minutes -> Int4,
|
||||
video_url -> Nullable<Text>,
|
||||
attachments -> Jsonb,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_quizzes (id) {
|
||||
id -> Uuid,
|
||||
lesson_id -> Nullable<Uuid>,
|
||||
course_id -> Uuid,
|
||||
title -> Text,
|
||||
passing_score -> Int4,
|
||||
time_limit_minutes -> Nullable<Int4>,
|
||||
max_attempts -> Nullable<Int4>,
|
||||
questions -> Jsonb,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_user_progress (id) {
|
||||
id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
lesson_id -> Nullable<Uuid>,
|
||||
status -> Text,
|
||||
quiz_score -> Nullable<Int4>,
|
||||
quiz_attempts -> Int4,
|
||||
time_spent_minutes -> Int4,
|
||||
started_at -> Timestamptz,
|
||||
completed_at -> Nullable<Timestamptz>,
|
||||
last_accessed_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_course_assignments (id) {
|
||||
id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
assigned_by -> Nullable<Uuid>,
|
||||
due_date -> Nullable<Timestamptz>,
|
||||
is_mandatory -> Bool,
|
||||
assigned_at -> Timestamptz,
|
||||
completed_at -> Nullable<Timestamptz>,
|
||||
reminder_sent -> Bool,
|
||||
reminder_sent_at -> Nullable<Timestamptz>,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_certificates (id) {
|
||||
id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
issued_at -> Timestamptz,
|
||||
score -> Int4,
|
||||
certificate_url -> Nullable<Text>,
|
||||
verification_code -> Text,
|
||||
expires_at -> Nullable<Timestamptz>,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_categories (id) {
|
||||
id -> Uuid,
|
||||
name -> Text,
|
||||
description -> Nullable<Text>,
|
||||
icon -> Nullable<Text>,
|
||||
color -> Nullable<Text>,
|
||||
parent_id -> Nullable<Uuid>,
|
||||
sort_order -> Int4,
|
||||
created_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
learn_courses,
|
||||
learn_lessons,
|
||||
learn_quizzes,
|
||||
learn_user_progress,
|
||||
learn_course_assignments,
|
||||
learn_certificates,
|
||||
learn_categories,
|
||||
);
|
||||
|
|
@ -76,3 +76,13 @@ pub use self::meet::*;
|
|||
mod research;
|
||||
#[cfg(feature = "research")]
|
||||
pub use self::research::*;
|
||||
|
||||
#[cfg(feature = "learn")]
|
||||
mod learn;
|
||||
#[cfg(feature = "learn")]
|
||||
pub use self::learn::*;
|
||||
|
||||
#[cfg(feature = "project")]
|
||||
mod project;
|
||||
#[cfg(feature = "project")]
|
||||
pub use self::project::*;
|
||||
|
|
|
|||
|
|
@ -198,3 +198,35 @@ diesel::joinable!(social_praises -> bots (bot_id));
|
|||
diesel::joinable!(social_bookmarks -> social_posts (post_id));
|
||||
diesel::joinable!(social_hashtags -> organizations (org_id));
|
||||
diesel::joinable!(social_hashtags -> bots (bot_id));
|
||||
|
||||
diesel::table! {
|
||||
social_channel_accounts (id) {
|
||||
id -> Uuid,
|
||||
org_id -> Uuid,
|
||||
name -> Varchar,
|
||||
channel_type -> Varchar,
|
||||
credentials -> Jsonb,
|
||||
settings -> Jsonb,
|
||||
is_active -> Bool,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::joinable!(social_channel_accounts -> organizations (org_id));
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
social_communities,
|
||||
social_community_members,
|
||||
social_posts,
|
||||
social_comments,
|
||||
social_reactions,
|
||||
social_polls,
|
||||
social_poll_options,
|
||||
social_poll_votes,
|
||||
social_announcements,
|
||||
social_praises,
|
||||
social_bookmarks,
|
||||
social_hashtags,
|
||||
social_channel_accounts,
|
||||
);
|
||||
|
|
|
|||
122
src/learn/mod.rs
122
src/learn/mod.rs
|
|
@ -38,126 +38,8 @@ use uuid::Uuid;
|
|||
use crate::shared::state::AppState;
|
||||
use crate::shared::utils::DbPool;
|
||||
|
||||
// ============================================================================
|
||||
// DATABASE SCHEMA
|
||||
// ============================================================================
|
||||
|
||||
diesel::table! {
|
||||
learn_courses (id) {
|
||||
id -> Uuid,
|
||||
organization_id -> Nullable<Uuid>,
|
||||
title -> Text,
|
||||
description -> Nullable<Text>,
|
||||
category -> Text,
|
||||
difficulty -> Text,
|
||||
duration_minutes -> Int4,
|
||||
thumbnail_url -> Nullable<Text>,
|
||||
is_mandatory -> Bool,
|
||||
due_days -> Nullable<Int4>,
|
||||
is_published -> Bool,
|
||||
created_by -> Nullable<Uuid>,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_lessons (id) {
|
||||
id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
title -> Text,
|
||||
content -> Nullable<Text>,
|
||||
content_type -> Text,
|
||||
lesson_order -> Int4,
|
||||
duration_minutes -> Int4,
|
||||
video_url -> Nullable<Text>,
|
||||
attachments -> Jsonb,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_quizzes (id) {
|
||||
id -> Uuid,
|
||||
lesson_id -> Nullable<Uuid>,
|
||||
course_id -> Uuid,
|
||||
title -> Text,
|
||||
passing_score -> Int4,
|
||||
time_limit_minutes -> Nullable<Int4>,
|
||||
max_attempts -> Nullable<Int4>,
|
||||
questions -> Jsonb,
|
||||
created_at -> Timestamptz,
|
||||
updated_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_user_progress (id) {
|
||||
id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
lesson_id -> Nullable<Uuid>,
|
||||
status -> Text,
|
||||
quiz_score -> Nullable<Int4>,
|
||||
quiz_attempts -> Int4,
|
||||
time_spent_minutes -> Int4,
|
||||
started_at -> Timestamptz,
|
||||
completed_at -> Nullable<Timestamptz>,
|
||||
last_accessed_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_course_assignments (id) {
|
||||
id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
assigned_by -> Nullable<Uuid>,
|
||||
due_date -> Nullable<Timestamptz>,
|
||||
is_mandatory -> Bool,
|
||||
assigned_at -> Timestamptz,
|
||||
completed_at -> Nullable<Timestamptz>,
|
||||
reminder_sent -> Bool,
|
||||
reminder_sent_at -> Nullable<Timestamptz>,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_certificates (id) {
|
||||
id -> Uuid,
|
||||
user_id -> Uuid,
|
||||
course_id -> Uuid,
|
||||
issued_at -> Timestamptz,
|
||||
score -> Int4,
|
||||
certificate_url -> Nullable<Text>,
|
||||
verification_code -> Text,
|
||||
expires_at -> Nullable<Timestamptz>,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::table! {
|
||||
learn_categories (id) {
|
||||
id -> Uuid,
|
||||
name -> Text,
|
||||
description -> Nullable<Text>,
|
||||
icon -> Nullable<Text>,
|
||||
color -> Nullable<Text>,
|
||||
parent_id -> Nullable<Uuid>,
|
||||
sort_order -> Int4,
|
||||
created_at -> Timestamptz,
|
||||
}
|
||||
}
|
||||
|
||||
diesel::allow_tables_to_appear_in_same_query!(
|
||||
learn_courses,
|
||||
learn_lessons,
|
||||
learn_quizzes,
|
||||
learn_user_progress,
|
||||
learn_course_assignments,
|
||||
learn_certificates,
|
||||
learn_categories,
|
||||
);
|
||||
// Use shared schema
|
||||
use crate::core::shared::schema::learn::*;
|
||||
|
||||
// ============================================================================
|
||||
// DATA MODELS
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue