Enum "audit_action" { "delete" "restore" "edit" "flag" } Enum "collection_access_level" { "viewer" "contributor" "moderator" "owner" } Enum "privacy_level" { "private" "unlisted" "public" } Enum "status_submission" { "pending" "approved" "rejected" } Enum "user_preference_state" { "exclude" "include" } Enum "user_role" { "user" "contributor" "curator" "administrator" } Enum "user_sex" { "female" "male" } Enum "like_type" { "like" "dislike" } Enum "device_type" { "mobile" "tablet" "desktop" "unknown" } Enum "oauth_provider" { "google" "github" } Table "public"."user_rating_preferences" { "user_id" uuid [unique, not null, ref: > "public"."user_preferences"."user_id"] "rating_id" uuid [not null, ref: > "public"."media_age_ratings"."id"] "state" user_preference_state [not null] } Table "public"."episodes" { "id" uuid [pk, not null, ref: > "public"."medias"."episodes"] "media_id" uuid [not null, ref: > "public"."medias"."id"] "episode" smallint "mal_url" varchar(255) "mal_forum_url" varchar(255) "title" varchar(155) [not null] "title_origin" varchar(155) "title_romanji" varchar(155) "aired" date "filler" boolean [not null, default: false] "recap" boolean [not null, default: false] "total_score" int [not null] "scored_by" int [not null] "videos" uuid "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."characters" { "id" uuid [pk, not null] "name" varchar(255) [not null] "image" varchar(255) "small_image" varchar(255) "mal_id" int "mal_url" varchar(255) "liked" int [not null, default: 0] "connections" int [default: 0] "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."medias" { "id" uuid [pk, not null, ref: > "public"."media_submissions"."media_id"] "mal_id" int [not null] "title" varchar(255) [not null] "title_secondary" varchar(255) "title_original" varchar(255) "title_synonyms" varchar(255)[] "trailers" uuid "synopsis" text [not null] "small_image_url" varchar(255) "medium_image_url" varchar(255) [not null] "large_image_url" varchar(255) "type" uuid [not null, ref: > "public"."media_types"."id"] "source" uuid [not null, ref: > "public"."media_sources"."id"] "status" uuid [not null, ref: > "public"."media_statuses"."id"] "airing" boolean [not null, default: false] "start_airing" date "end_airing" date "age_rating" uuid [ref: > "public"."media_age_ratings"."id"] "score" numeric(2,2) [not null, default: 0] "score_total" int [not null, default: 0] "scored_by" int [not null, default: 0] "favourites" int [not null, default: 0] "background" text "season" varchar(15) [not null, note: 'enum(winter, spring, summer, fall)'] "year" smallint [not null] "country" uuid [not null, ref: > "public"."countries"."id"] "broadcast_date" varchar(64) "producers" uuid [not null] "licensors" uuid [not null] "studios" uuid [not null] "genres" uuid "episodes" uuid "explicit_genres" uuid "themes" uuid "demographics" uuid "relations" uuid "external_links" uuid "characters" uuid "approved" boolean [default: false] "approved_by" uuid "created_by" uuid [not null] "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."media_relations" { "id" uuid [pk, not null, ref: > "public"."medias"."relations"] "relation" varchar(16) "target_media" uuid [ref: > "public"."medias"."id"] } Table "public"."media_sources" { "id" uuid [pk, not null] "name" varchar(18) [not null] } Table "public"."videos" { "id" uuid [pk, not null, ref: > "public"."episodes"."videos", ref: - "public"."video_submissions"."video_id"] "service_id" uuid [not null, ref: > "public"."video_services"."id"] "video_code" varchar(255) [not null] "short_code" varchar(255) "thumbnail_code" varchar(255) "download_code" varchar(255) "pending_upload" boolean [default: true] "created_by" uuid [not null] "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."user_country_preferences" { "user_id" uuid [not null, ref: > "public"."user_preferences"."user_id"] "country_id" uuid [unique, not null, ref: > "public"."countries"."id"] "state" user_preference_state [not null] } Table "public"."media_producers" { "media_id" uuid [not null, ref: > "public"."medias"."producers"] "producer_id" uuid [not null, ref: > "public"."producers"."id"] Indexes { (media_id, producer_id) [pk] } } Table "public"."media_age_ratings" { "id" uuid [pk, not null] "name" varchar(64) [not null] "min_age" smallint [not null] } Table "public"."comment_audit_logs" { "id" uuid [pk, not null] "comment_id" uuid [not null, ref: > "public"."comments"."id"] "performed_by" uuid [not null, ref: > "public"."users"."id"] "action" audit_action [not null] "created_at" timestamp [not null] } Table "public"."media_characters" { "id" uuid [pk, not null, ref: > "public"."medias"."characters"] "role" text [not null, note: 'main, supporting'] "characters" uuid [not null, ref: > "public"."characters"."id"] "voice_actor" uuid [not null] } Table "public"."provisioned_users" { "provisioned_by" uuid [unique, not null, ref: > "public"."users"."id"] "provisioned_to" uuid [not null, ref: > "public"."users"."id"] "provisioned_at" timestamp [not null] "reason" varchar(255) } Table "public"."collection_members" { "id" uuid [pk, not null] "collection_id" uuid [not null, ref: > "public"."collections"."id"] "user_id" uuid [not null, ref: > "public"."users"."id"] "access_level" collection_access_level [not null] "invited_by" uuid [ref: > "public"."users"."id"] "joined_at" timestamp [not null] } Table "public"."countries" { "id" uuid [pk, not null, ref: - "public"."users"."country"] "name" varchar(155) [not null] "slug" varchar(165) [unique, not null] "code" varchar(3) [unique, not null] "flag" varchar(255) "banner" varchar(255) } Table "public"."media_explicit_genres" { "media_id" uuid [not null, ref: > "public"."medias"."explicit_genres"] "genre_id" uuid [not null, ref: > "public"."genres"."id"] Indexes { (media_id, genre_id) [pk] } Note: 'composite primary key = media_id + genre_id' } Table "public"."media_external_links" { "id" uuid [pk, not null, ref: > "public"."medias"."external_links"] "media_id" uuid [ref: > "public"."medias"."id"] "name" varchar(64) "url" varchar(255) } Table "public"."media_statuses" { "id" uuid [pk, not null] "name" varchar(64) [unique, not null] } Table "public"."producers" { "id" uuid [pk, not null] "mal_id" int [not null] "type" varchar(24) [not null] "name" varchar(155) [not null] "url" varchar(255) "created_by" uuid [not null] "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."user_watch_histories" { "user_id" uuid [not null, ref: > "public"."users"."id"] "episode_id" uuid [not null, ref: > "public"."episodes"."id"] "updated_at" timestamp [not null] Indexes { (episode_id, user_id) [unique, name: "index_1"] } } Table "public"."user_preferences" { "user_id" uuid [pk, not null] "character_as_partner" uuid [ref: > "public"."characters"."id"] "comment_picture" varchar(255) "enable_watch_history" boolean [not null, default: true] "enable_search_history" boolean [not null, default: false] "is_private_account" boolean [not null, default: false] "can_message_me" boolean [not null, default: true] "publish_birthday" boolean [not null, default: false] "publish_email" boolean [not null, default: false] "publish_phone_number" boolean [not null, default: false] "publish_country" boolean [not null, default: false] "publish_partner" boolean [not null, default: true] "subscribe_to_newsletter" boolean [not null, default: true] "enable_security_alerts" boolean [not null, default: true] } Table "public"."user_genre_preferences" { "user_id" uuid [unique, not null, ref: > "public"."user_preferences"."user_id"] "genre_id" uuid [not null, ref: > "public"."genres"."id"] "state" user_preference_state [not null] Indexes { (user_id, genre_id) [unique, name: "index_1_1"] } } Table "public"."media_collections" { "collection_id" uuid [unique, not null, ref: > "public"."collections"."id"] "media_id" uuid [not null, ref: > "public"."medias"."id"] "added_by" uuid [not null, ref: > "public"."users"."id"] "added_at" bigint [not null] Indexes { (collection_id, media_id) [unique, name: "index_1_2"] } } Table "public"."comments" { "id" uuid [pk, not null] "user_id" uuid [not null, ref: > "public"."users"."id"] "episode_id" uuid [not null, ref: > "public"."episodes"."id"] "content" varchar(255) [not null] "created_at" timestamp [not null] "updated_at" timestamp [not null] "deleted_at" timestamp } Table "public"."user_oauth_accounts" { "id" uuid [pk, not null] "user_id" uuid [not null, ref: > "public"."users"."id"] "provider_name" oauth_provider [not null] "provider_sub" varchar(255) "provider_email" varchar(255) "access_token" varchar(255) "refresh_token" varchar(255) "last_login" timestamptz [not null] "expires_at" timestamptz "created_at" timestamptz [not null] "updated_at" timestamptz [not null] Indexes { (user_id, provider_name) [unique, name: "index_2"] } } Table "public"."staff" { "id" uuid [pk, not null] "name" varchar(255) [not null] "image" varchar(255) "mal_id" int "mal_url" varchar(255) "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] } Table "public"."home_media_banner" { "id" uuid [pk, not null] "media_id" uuid [not null, ref: > "public"."medias"."id"] "created_by" uuid [not null, ref: > "public"."users"."id"] "priority" smallint [unique] "start_show" timestamp [not null] "end_show" timestamp "created_at" timestamp [not null] } Table "public"."users" { "id" uuid [pk, not null, ref: - "public"."user_preferences"."user_id", ref: - "public"."user_addresses"."user_id"] "email" varchar(500) [unique, not null] "password" varchar(255) "username" varchar(28) [unique, not null] "fullname" varchar(32) [not null] "avatar" varchar(255) "bio" text "datebirth" date "role" user_role [not null] "sex" user_sex [not null] "phone_number" varchar(15) "country" uuid "auth_provider" varchar(64) "provider_token" varchar(255) "created_at" timestamp [not null, default: `now()`] "verified_at" timestamp "updated_at" timestamp [not null] "deleted_at" timestamp Indexes { username [unique, name: "index_2_3"] email [unique, name: "index_3"] } } Table "public"."media_studios" { "media_id" uuid [not null, ref: > "public"."medias"."studios"] "producer_id" uuid [not null, ref: > "public"."producers"."id"] Indexes { (media_id, producer_id) [pk] } } Table "public"."media_licencors" { "media_id" uuid [not null, ref: > "public"."medias"."licensors"] "producer_id" uuid [not null, ref: > "public"."producers"."id"] Indexes { (media_id, producer_id) [pk] } } Table "public"."comment_reports" { "id" uuid [unique, not null] "reporter_id" uuid [not null, ref: > "public"."users"."id"] "comment_id" uuid [not null, ref: > "public"."comments"."id"] "title" varchar(115) [not null] "status" status_submission [not null] "description" text "reported_at" timestamp [not null] "closed_at" timestamp } Table "public"."genres" { "id" uuid [pk, not null] "mal_id" smallint "type" varchar(16) [not null] "name" varchar(32) [not null] "url" varchar(155) } Table "public"."collections" { "id" uuid [pk, not null] "name" varchar(64) [not null] "cover_url" varchar(255) [not null] "privacy_level" privacy_level [not null] "created_at" timestamp [not null] "updated_at" timestamp [not null] } Table "public"."voice_actors" { "id" uuid [pk, not null, ref: > "public"."media_characters"."voice_actor"] "language" varchar(115) "actor_staff" uuid [ref: > "public"."staff"."id"] } Table "public"."video_submissions" { "id" uuid [pk, not null] "video_id" uuid [not null] "created_by" uuid [not null, ref: > "public"."users"."id"] "reviewed_by" uuid [ref: > "public"."users"."id"] "status" status_submission [not null, default: 'pending'] "reviewed_at" timestamp "reason" text "created_at" timestamp [not null, default: `now()`] } Table "public"."media_genres" { "media_id" uuid [unique, not null, ref: > "public"."medias"."genres"] "genre_id" uuid [pk, not null, ref: > "public"."genres"."id"] Indexes { (media_id, genre_id) [unique, name: "index_1_4"] } Note: 'composite primary key = media_id + genre_id' } Table "public"."video_services" { "id" uuid [pk, not null, ref: - "public"."video_service_submissions"."video_service_id"] "name" varchar(155) [not null] "resolution" smallint [not null] "domain" varchar(255) [not null] "image_url" varchar(255) "hex_color" varchar(10) "endpoint_video" varchar(255) [not null] "endpoint_short" varchar(255) "endpoint_image" varchar(255) "endpoint_download" varchar(255) "created_by" uuid [not null] "deleted_at" timestamp "updated_at" timestamp [not null] "created_at" timestamp [not null] Indexes { (name, resolution) [unique, name: "idx_video_services_name_resolution"] } } Table "public"."media_submissions" { "id" uuid [pk, not null] "media_id" uuid [not null] "created_by" uuid [not null] "status" status_submission [not null] "reviewed_by" uuid "reviewed_at" timestamp "reason" text "created_at" timestamp [not null, default: `now()`] } Table "public"."video_service_submissions" { "id" uuid [pk, not null] "video_service_id" uuid [not null] "created_by" uuid [not null] "status" status_submission [not null, default: 'pending'] "reviewed_by" uuid "reviewed_at" timestamp "reason" text "created_at" timestamp [not null, default: `now()`] } Table "public"."media_trailers" { "id" uuid [pk, not null, ref: - "public"."medias"."trailers"] "url" varchar(255) "embed_url" varchar(255) "small_image_url" varchar(255) "medium_image_url" varchar(255) "large_image_url" varchar(255) "maximum_image_url" varchar(255) } Table "public"."media_types" { "id" uuid [pk, not null] "name" varchar(18) [not null] } Table "public"."user_follows" { "follower_id" uuid [unique, not null, ref: > "public"."users"."id"] "following_id" uuid [not null, ref: > "public"."users"."id"] "followed_at" timestamp [not null] Indexes { (following_id, follower_id) [unique, name: "index_1_5"] } checks { `follower_id <> following_id` } } Table "public"."media_themes" { "media_id" uuid [not null, ref: > "public"."medias"."themes"] "genre_id" uuid [not null, ref: > "public"."genres"."id"] Indexes { (media_id, genre_id) [pk] } } Table "public"."comment_likes" { "user_id" uuid [unique, not null, ref: > "public"."medias"."id"] "comment_id" uuid [not null, ref: > "public"."comments"."id"] "type" like_type [not null] "created_at" timestamp [not null] Indexes { (comment_id, user_id) [unique, name: "index_1_6"] } } Table "public"."user_sessions" { "id" uuid [pk, not null] "user_id" uuid [not null, ref: > "public"."users"."id"] "device_type" device_type [not null] "os_type" varchar(50) "os_version" varchar(50) "browser_name" varchar(50) "browser_version" varchar(50) "ip_login" inet [not null] "login_at" timestamptz [not null] "logout_at" timestamptz } Table "public"."user_addresses" { "user_id" uuid [pk, not null] "street_address" varchar(255) [not null] "district" varchar(100) [not null] "city" varchar(100) [not null] "province" varchar(100) [not null] "postal_code" varchar(20) [not null] "coordinate" varchar(50) "updated_at" timestamp [not null] }