Modularize learn schema and clean up channels/project schema stubs

This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2026-01-22 14:01:50 -03:00
parent fc9c07d204
commit 3db87c029d
5 changed files with 162 additions and 141 deletions

View file

@ -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,
);

View 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,
);

View file

@ -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::*;

View file

@ -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,
);

View file

@ -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