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;
|
mod research;
|
||||||
#[cfg(feature = "research")]
|
#[cfg(feature = "research")]
|
||||||
pub use self::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_bookmarks -> social_posts (post_id));
|
||||||
diesel::joinable!(social_hashtags -> organizations (org_id));
|
diesel::joinable!(social_hashtags -> organizations (org_id));
|
||||||
diesel::joinable!(social_hashtags -> bots (bot_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::state::AppState;
|
||||||
use crate::shared::utils::DbPool;
|
use crate::shared::utils::DbPool;
|
||||||
|
|
||||||
// ============================================================================
|
// Use shared schema
|
||||||
// DATABASE SCHEMA
|
use crate::core::shared::schema::learn::*;
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
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,
|
|
||||||
);
|
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// DATA MODELS
|
// DATA MODELS
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue