bitcain docs

Education

Education

Learning platform with courses, lessons, progress tracking, and certificates.

8 tables in this group.

courses

Course catalog for trading education platform with beginner/intermediate/advanced tracks

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
titlevarchar(255)No
slugvarchar(255)No
descriptiontextYes
difficultydifficulty_levelNo'beginner'::difficulty_level
duration_minutesint4Yes0
estimated_completion_timevarchar(50)Yes
thumbnail_urltextYes
preview_video_urltextYes
instructor_namevarchar(255)Yes
instructor_biotextYes
instructor_avatar_urltextYes
is_publishedboolNofalse
is_featuredboolNofalse
display_orderint4Yes0
categoryvarchar(100)Yes
tags_textYesARRAY[]::text[]
learning_objectives_textYesARRAY[]::text[]
prerequisites_textYesARRAY[]::text[]
total_lessonsint4Yes0
total_enrollmentsint4Yes0
average_ratingnumericYes0.0
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()
published_attimestamptzYes

RLS Policies:

  • rls_courses_delete_service — DELETE for {service_role}
  • rls_courses_insert_service — INSERT for {service_role}
  • rls_courses_select_public — SELECT for {authenticated}
  • rls_courses_select_service — SELECT for {service_role}
  • rls_courses_update_service — UPDATE for {service_role}

Indexes:

  • courses_pkey
  • courses_slug_key
  • idx_courses_category
  • idx_courses_difficulty
  • idx_courses_display_order
  • idx_courses_featured
  • idx_courses_published
  • idx_courses_slug

course_modules

Organizational structure dividing courses into modules

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
course_iduuidNo
titlevarchar(255)No
descriptiontextYes
module_orderint4No0
duration_minutesint4Yes0
is_optionalboolNofalse
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_course_modules_delete_service — DELETE for {service_role}
  • rls_course_modules_insert_service — INSERT for {service_role}
  • rls_course_modules_select_public — SELECT for {authenticated}
  • rls_course_modules_select_service — SELECT for {service_role}
  • rls_course_modules_update_service — UPDATE for {service_role}

Indexes:

  • course_modules_course_order_unique
  • course_modules_pkey
  • idx_course_modules_course_id
  • idx_course_modules_order

lessons

Individual learning units within course modules

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
module_iduuidNo
titlevarchar(255)No
descriptiontextYes
lesson_orderint4No0
duration_minutesint4Yes0
is_previewboolNofalse
summarytextYes
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_lessons_delete_service — DELETE for {service_role}
  • rls_lessons_insert_service — INSERT for {service_role}
  • rls_lessons_select_public — SELECT for {authenticated}
  • rls_lessons_select_service — SELECT for {service_role}
  • rls_lessons_update_service — UPDATE for {service_role}

Indexes:

  • idx_lessons_module_id
  • idx_lessons_order
  • idx_lessons_preview
  • lessons_module_order_unique
  • lessons_pkey

lesson_content

Multi-format content items (video, text, quiz) for lessons

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
lesson_iduuidNo
content_typecontent_typeNo
titlevarchar(255)Yes
contenttextYes
video_urltextYes
resource_urltextYes
content_orderint4No0
duration_secondsint4Yes
quiz_datajsonbYes
interactive_configjsonbYes
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_lesson_content_delete_service — DELETE for {service_role}
  • rls_lesson_content_insert_service — INSERT for {service_role}
  • rls_lesson_content_select_public — SELECT for {authenticated}
  • rls_lesson_content_select_service — SELECT for {service_role}
  • rls_lesson_content_update_service — UPDATE for {service_role}

Indexes:

  • idx_lesson_content_lesson_id
  • idx_lesson_content_order
  • idx_lesson_content_type
  • lesson_content_lesson_order_unique
  • lesson_content_pkey

user_progress

User progress tracking for lessons and content completion

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
user_iduuidNo
course_iduuidNo
lesson_iduuidYes
content_iduuidYes
statuscompletion_statusNo'not_started'::completion_status
progress_percentageint4Yes0
video_position_secondsint4Yes0
quiz_scoreint4Yes
quiz_attemptsint4Yes0
quiz_passedboolYesfalse
completed_attimestamptzYes
time_spent_minutesint4Yes0
user_notestextYes
is_bookmarkedboolNofalse
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_user_progress_delete — DELETE for {authenticated}
  • rls_user_progress_insert — INSERT for {authenticated}
  • rls_user_progress_select — SELECT for {authenticated}
  • rls_user_progress_service — ALL for {service_role}
  • rls_user_progress_update — UPDATE for {authenticated}

Indexes:

  • idx_user_progress_bookmarked
  • idx_user_progress_course_id
  • idx_user_progress_lesson_id
  • idx_user_progress_status
  • idx_user_progress_user_course
  • idx_user_progress_user_id
  • user_progress_pkey
  • user_progress_user_lesson_unique

certificates

User completion certificates with verification codes and public verification

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
user_iduuidNo
course_iduuidNo
verification_codevarchar(64)No
issue_datetimestamptzNonow()
recipient_namevarchar(255)No
course_titlevarchar(255)No
course_difficultydifficulty_levelNo
completion_datetimestamptzNo
total_time_spent_minutesint4Yes0
total_lessons_completedint4Yes0
final_scoreint4Yes
certificate_templatevarchar(50)Yes'default'::character varying
certificate_numbervarchar(50)No
instructor_namevarchar(255)Yes
instructor_signature_urltextYes
certificate_pdf_urltextYes
verification_urltextYes
qr_code_urltextYes
is_revokedboolNofalse
revocation_reasontextYes
revoked_attimestamptzYes
revoked_byuuidYes
is_publicboolNotrue
shared_countint4Yes0
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_certificates_delete_service — DELETE for {service_role}
  • rls_certificates_insert_service — INSERT for {service_role}
  • rls_certificates_select — SELECT for {authenticated}
  • rls_certificates_update_service — UPDATE for {service_role}
  • rls_certificates_verify_public — SELECT for {anon}

Indexes:

  • certificates_certificate_number_key
  • certificates_pkey
  • certificates_user_course_unique
  • certificates_verification_code_key
  • idx_certificates_certificate_number
  • idx_certificates_course_id
  • idx_certificates_issue_date
  • idx_certificates_public
  • idx_certificates_revoked
  • idx_certificates_user_active
  • idx_certificates_user_id
  • idx_certificates_verification_code

tutorials

Interactive platform tutorials with step-by-step guided tours

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
titlevarchar(255)No
slugvarchar(255)No
descriptiontextYes
categorytutorial_categoryNo'getting_started'::tutorial_category
difficultydifficulty_levelNo'beginner'::difficulty_level
estimated_duration_minutesint4Yes5
thumbnail_urltextYes
iconvarchar(50)Yes
display_orderint4Yes0
is_publishedboolNofalse
is_recommendedboolNofalse
prerequisite_tutorial_ids_uuidYesARRAY[]::uuid[]
required_feature_flags_textYesARRAY[]::text[]
stepsjsonbNo'[]'::jsonb
target_routevarchar(255)Yes
required_route_paramsjsonbYes'{}'::jsonb
auto_trigger_on_first_visitboolNofalse
auto_trigger_conditionsjsonbYes'{}'::jsonb
total_stepsint4Yes0
completion_countint4Yes0
skip_countint4Yes0
average_completion_time_minutesnumericYes0.0
tags_textYesARRAY[]::text[]
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()
published_attimestamptzYes

RLS Policies:

  • rls_tutorials_delete_service — DELETE for {service_role}
  • rls_tutorials_insert_service — INSERT for {service_role}
  • rls_tutorials_select_public — SELECT for {authenticated}
  • rls_tutorials_select_service — SELECT for {service_role}
  • rls_tutorials_update_service — UPDATE for {service_role}

Indexes:

  • idx_tutorials_category
  • idx_tutorials_difficulty
  • idx_tutorials_display_order
  • idx_tutorials_published
  • idx_tutorials_recommended
  • idx_tutorials_slug
  • idx_tutorials_target_route
  • tutorials_pkey
  • tutorials_slug_key

user_tutorial_progress

User progress tracking for interactive tutorials

ColumnTypeNullableDefault
iduuidNogen_random_uuid()
user_iduuidNo
tutorial_iduuidNo
statustutorial_statusNo'not_started'::tutorial_status
current_step_numberint4Yes1
total_steps_completedint4Yes0
started_attimestamptzYes
completed_attimestamptzYes
last_accessed_attimestamptzYes
time_spent_minutesint4Yes0
steps_skippedint4Yes0
times_restartedint4Yes0
was_helpfulboolYes
feedback_ratingint4Yes
feedback_commenttextYes
metadatajsonbYes'{}'::jsonb
created_attimestamptzNonow()
updated_attimestamptzNonow()

RLS Policies:

  • rls_user_tutorial_progress_delete — DELETE for {authenticated}
  • rls_user_tutorial_progress_insert — INSERT for {authenticated}
  • rls_user_tutorial_progress_select — SELECT for {authenticated}
  • rls_user_tutorial_progress_service — ALL for {service_role}
  • rls_user_tutorial_progress_update — UPDATE for {authenticated}

Indexes:

  • idx_user_tutorial_progress_completed
  • idx_user_tutorial_progress_status
  • idx_user_tutorial_progress_tutorial_id
  • idx_user_tutorial_progress_user_id
  • idx_user_tutorial_progress_user_tutorial
  • user_tutorial_progress_pkey
  • user_tutorial_progress_user_tutorial_unique

On this page