From 3db87c029d4b022d9af62d7501f5bcd99b15c19e Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Thu, 22 Jan 2026 14:01:50 -0300 Subject: [PATCH] Modularize learn schema and clean up channels/project schema stubs --- src/core/shared/schema/channels.rs | 21 ----- src/core/shared/schema/learn.rs | 118 ++++++++++++++++++++++++++++ src/core/shared/schema/mod.rs | 10 +++ src/core/shared/schema/social.rs | 32 ++++++++ src/learn/mod.rs | 122 +---------------------------- 5 files changed, 162 insertions(+), 141 deletions(-) delete mode 100644 src/core/shared/schema/channels.rs create mode 100644 src/core/shared/schema/learn.rs diff --git a/src/core/shared/schema/channels.rs b/src/core/shared/schema/channels.rs deleted file mode 100644 index e89d73e93..000000000 --- a/src/core/shared/schema/channels.rs +++ /dev/null @@ -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, -); diff --git a/src/core/shared/schema/learn.rs b/src/core/shared/schema/learn.rs new file mode 100644 index 000000000..47bef912e --- /dev/null +++ b/src/core/shared/schema/learn.rs @@ -0,0 +1,118 @@ +use diesel::prelude::*; + +diesel::table! { + learn_courses (id) { + id -> Uuid, + organization_id -> Nullable, + title -> Text, + description -> Nullable, + category -> Text, + difficulty -> Text, + duration_minutes -> Int4, + thumbnail_url -> Nullable, + is_mandatory -> Bool, + due_days -> Nullable, + is_published -> Bool, + created_by -> Nullable, + created_at -> Timestamptz, + updated_at -> Timestamptz, + } +} + +diesel::table! { + learn_lessons (id) { + id -> Uuid, + course_id -> Uuid, + title -> Text, + content -> Nullable, + content_type -> Text, + lesson_order -> Int4, + duration_minutes -> Int4, + video_url -> Nullable, + attachments -> Jsonb, + created_at -> Timestamptz, + updated_at -> Timestamptz, + } +} + +diesel::table! { + learn_quizzes (id) { + id -> Uuid, + lesson_id -> Nullable, + course_id -> Uuid, + title -> Text, + passing_score -> Int4, + time_limit_minutes -> Nullable, + max_attempts -> Nullable, + 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, + status -> Text, + quiz_score -> Nullable, + quiz_attempts -> Int4, + time_spent_minutes -> Int4, + started_at -> Timestamptz, + completed_at -> Nullable, + last_accessed_at -> Timestamptz, + } +} + +diesel::table! { + learn_course_assignments (id) { + id -> Uuid, + course_id -> Uuid, + user_id -> Uuid, + assigned_by -> Nullable, + due_date -> Nullable, + is_mandatory -> Bool, + assigned_at -> Timestamptz, + completed_at -> Nullable, + reminder_sent -> Bool, + reminder_sent_at -> Nullable, + } +} + +diesel::table! { + learn_certificates (id) { + id -> Uuid, + user_id -> Uuid, + course_id -> Uuid, + issued_at -> Timestamptz, + score -> Int4, + certificate_url -> Nullable, + verification_code -> Text, + expires_at -> Nullable, + } +} + +diesel::table! { + learn_categories (id) { + id -> Uuid, + name -> Text, + description -> Nullable, + icon -> Nullable, + color -> Nullable, + parent_id -> Nullable, + 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, +); diff --git a/src/core/shared/schema/mod.rs b/src/core/shared/schema/mod.rs index ecc6218a8..09ff7831d 100644 --- a/src/core/shared/schema/mod.rs +++ b/src/core/shared/schema/mod.rs @@ -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::*; diff --git a/src/core/shared/schema/social.rs b/src/core/shared/schema/social.rs index 0b296f688..0c1d7952d 100644 --- a/src/core/shared/schema/social.rs +++ b/src/core/shared/schema/social.rs @@ -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, +); diff --git a/src/learn/mod.rs b/src/learn/mod.rs index db940e21c..71adf6017 100644 --- a/src/learn/mod.rs +++ b/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, - title -> Text, - description -> Nullable, - category -> Text, - difficulty -> Text, - duration_minutes -> Int4, - thumbnail_url -> Nullable, - is_mandatory -> Bool, - due_days -> Nullable, - is_published -> Bool, - created_by -> Nullable, - created_at -> Timestamptz, - updated_at -> Timestamptz, - } -} - -diesel::table! { - learn_lessons (id) { - id -> Uuid, - course_id -> Uuid, - title -> Text, - content -> Nullable, - content_type -> Text, - lesson_order -> Int4, - duration_minutes -> Int4, - video_url -> Nullable, - attachments -> Jsonb, - created_at -> Timestamptz, - updated_at -> Timestamptz, - } -} - -diesel::table! { - learn_quizzes (id) { - id -> Uuid, - lesson_id -> Nullable, - course_id -> Uuid, - title -> Text, - passing_score -> Int4, - time_limit_minutes -> Nullable, - max_attempts -> Nullable, - 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, - status -> Text, - quiz_score -> Nullable, - quiz_attempts -> Int4, - time_spent_minutes -> Int4, - started_at -> Timestamptz, - completed_at -> Nullable, - last_accessed_at -> Timestamptz, - } -} - -diesel::table! { - learn_course_assignments (id) { - id -> Uuid, - course_id -> Uuid, - user_id -> Uuid, - assigned_by -> Nullable, - due_date -> Nullable, - is_mandatory -> Bool, - assigned_at -> Timestamptz, - completed_at -> Nullable, - reminder_sent -> Bool, - reminder_sent_at -> Nullable, - } -} - -diesel::table! { - learn_certificates (id) { - id -> Uuid, - user_id -> Uuid, - course_id -> Uuid, - issued_at -> Timestamptz, - score -> Int4, - certificate_url -> Nullable, - verification_code -> Text, - expires_at -> Nullable, - } -} - -diesel::table! { - learn_categories (id) { - id -> Uuid, - name -> Text, - description -> Nullable, - icon -> Nullable, - color -> Nullable, - parent_id -> Nullable, - 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