elearning/docs/api-docs/ERD v.1.txt

204 lines
3.8 KiB
Text

Table users {
id int [pk
]
name varchar
email varchar [unique
]
password varchar
role varchar // admin | instructor | learner
created_at datetime
updated_at datetime
}
Table courses {
id int [pk
]
categories_id int
title jsonb // { "th": "...", "en": "..." }
description jsonb // { "th": "...", "en": "..." }
price decimal
is_free boolean
status varchar // draft | pending | approved | rejected
instructor_id int
approved_by int // admin user id
created_at datetime
updated_at datetime
}
Table categories {
id int [pk
]
name jsonb // multi-language category name
description jsonb // optional
created_at datetime
updated_at datetime
}
Table chapters {
id int [pk
]
course_id int
title jsonb // multi-language
sort_order int
created_at datetime
updated_at datetime
}
Table lessons {
id int [pk
]
chapter_id int
title jsonb // multi-language
content jsonb // multi-language lesson content
type varchar // video | pdf | text | quiz
sort_order int
created_at datetime
updated_at datetime
}
Table quizzes {
id int [pk
]
lesson_id int
title jsonb // multi-language
passing_score int
time_limit int
created_at datetime
updated_at datetime
}
Table questions {
id int [pk
]
quiz_id int
question jsonb // multi-language
score int
created_at datetime
updated_at datetime
}
Table choices {
id int [pk
]
question_id int
text jsonb // multi-language
is_correct boolean
created_at datetime
updated_at datetime
}
Table enrollments {
id int [pk
]
user_id int
course_id int
status varchar // enrolled | completed
enrolled_at datetime
created_at datetime
updated_at datetime
}
Table announcements {
id int [pk
]
course_id int
instructor_id int
title jsonb // multi-language
content jsonb // multi-language
is_pinned boolean // pin important announcements to top
published_at datetime // scheduled publish date
created_at datetime
updated_at datetime
}
Table announcement_attachments {
id int [pk
]
announcement_id int
file_name varchar
file_path varchar
file_size int
mime_type varchar
created_at datetime
}
Table orders {
id int [pk
]
user_id int
total_amount decimal
status varchar // pending | paid | cancelled
created_at datetime
updated_at datetime
}
Table order_items {
id int [pk
]
order_id int
course_id int
price decimal
created_at datetime
updated_at datetime
}
Table payments {
id int [pk
]
order_id int
provider varchar
transaction_id varchar
amount decimal
status varchar // success | failed
paid_at datetime
created_at datetime
updated_at datetime
}
Table instructor_balances {
id int [pk
]
instructor_id int
available_amount decimal
withdrawn_amount decimal
created_at datetime
updated_at datetime
}
Table withdrawal_requests {
id int [pk
]
instructor_id int
amount decimal
status varchar // pending | approved | rejected | paid
approved_by int
created_at datetime
updated_at datetime
}
Ref: courses.instructor_id > users.id
Ref: courses.approved_by > users.id
Ref: courses.categories_id > categories.id
Ref: chapters.course_id > courses.id
Ref: lessons.chapter_id > chapters.id
Ref: quizzes.lesson_id > lessons.id
Ref: questions.quiz_id > quizzes.id
Ref: choices.question_id > questions.id
Ref: enrollments.user_id > users.id
Ref: enrollments.course_id > courses.id
Ref: announcements.course_id > courses.id
Ref: announcements.instructor_id > users.id
Ref: announcement_attachments.announcement_id > announcements.id
Ref: orders.user_id > users.id
Ref: order_items.order_id > orders.id
Ref: order_items.course_id > courses.id
Ref: payments.order_id > orders.id
Ref: instructor_balances.instructor_id > users.id
Ref: withdrawal_requests.instructor_id > users.id
Ref: withdrawal_requests.approved_by > users.id