Database Reference
Generated from packages/db/src/schema by scripts/generate-docs.mjs — do not hand-edit.
To change the schema: edit it, npm run db:generate, review the SQL, npm run db:migrate — see the Development guide.
PostgreSQL 16 · 23 tables · 14 enums · 2 migrations (packages/db/drizzle).
Relationships
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
Tables
audience_list_members
Column Type Null Default Notes iduuid no gen_random_uuid()primary key list_iduuid no → audience_lists.id (on delete cascade) user_iduuid no → users.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: audience_list_members_unique_idx (unique, list_id, user_id) · audience_list_members_user_idx (user_id)
audience_lists
Column Type Null Default Notes iduuid no gen_random_uuid()primary key owner_iduuid no → users.id (on delete cascade) namevarchar(80) no created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: audience_lists_owner_name_idx (unique, owner_id, name)
auth_tokens
Column Type Null Default Notes iduuid no gen_random_uuid()primary key user_iduuid no → users.id (on delete cascade) purposeauth_token_purpose no token_hashvarchar(64) no expires_attimestamp with time zone no used_attimestamp with time zone yes created_attimestamp with time zone no now()
Indexes: auth_tokens_hash_idx (unique, token_hash) · auth_tokens_user_purpose_idx (user_id, purpose)
compliance_reports
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid yes → videos.id (on delete set null) video_titlevarchar(255) no reasonreport_reason no detailstext no reporter_emailvarchar(255) no reporter_iduuid yes → users.id (on delete set null) statusreport_status no "OPEN"created_attimestamp with time zone no now()resolved_attimestamp with time zone yes
Indexes: compliance_reports_status_idx (status, created_at)
contacts
Column Type Null Default Notes iduuid no gen_random_uuid()primary key requester_iduuid no → users.id (on delete cascade) addressee_iduuid no → users.id (on delete cascade) statuscontact_status no "PENDING"created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: contacts_pair_idx (unique, requester_id, addressee_id)
follows
Column Type Null Default Notes iduuid no gen_random_uuid()primary key follower_iduuid no → users.id (on delete cascade) creator_iduuid no → users.id (on delete cascade) statusfollow_status no "PENDING"created_attimestamp with time zone no now()decided_attimestamp with time zone yes
Indexes: follows_pair_idx (unique, follower_id, creator_id) · follows_creator_status_idx (creator_id, status)
payment_intents
Column Type Null Default Notes iduuid no gen_random_uuid()primary key gatewaypayment_gateway no gateway_session_idvarchar(255) yes sender_iduuid yes → users.id (on delete set null) creator_iduuid no → users.id (on delete cascade) video_iduuid yes → videos.id (on delete set null) amount_centsinteger no currencyvarchar(3) no "USD"statuspayment_intent_status no "PENDING"gateway_transaction_refvarchar(255) yes ledger_iduuid yes created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: payment_intents_sender_idx (sender_id) · payment_intents_status_idx (status)
payout_requests
Column Type Null Default Notes iduuid no gen_random_uuid()primary key creator_iduuid no → users.id (on delete cascade) amount_centsinteger no statuspayout_status no "REQUESTED"payout_methodvarchar(50) no payout_destinationtext no tx_hash_or_referencetext yes failure_reasontext yes reviewed_attimestamp with time zone yes settled_attimestamp with time zone yes created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: payout_requests_creator_status_idx (creator_id, status)
playlist_audience_lists
Column Type Null Default Notes iduuid no gen_random_uuid()primary key playlist_iduuid no → playlists.id (on delete cascade) list_iduuid no → audience_lists.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: playlist_audience_lists_unique_idx (unique, playlist_id, list_id) · playlist_audience_lists_list_idx (list_id)
playlist_items
Column Type Null Default Notes iduuid no gen_random_uuid()primary key playlist_iduuid no → playlists.id (on delete cascade) video_iduuid no → videos.id (on delete cascade) positioninteger no 0created_attimestamp with time zone no now()
Indexes: playlist_items_position_idx (playlist_id, position) · playlist_video_unique_idx (unique, playlist_id, video_id)
playlist_members
Column Type Null Default Notes iduuid no gen_random_uuid()primary key playlist_iduuid no → playlists.id (on delete cascade) user_iduuid no → users.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: playlist_members_unique_idx (unique, playlist_id, user_id) · playlist_members_user_idx (user_id)
playlists
Column Type Null Default Notes iduuid no gen_random_uuid()primary key creator_iduuid no → users.id (on delete cascade) titlevarchar(255) no descriptiontext yes visibilitycollection_visibility no "PRIVATE"created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: playlists_creator_idx (creator_id)
profiles
Column Type Null Default Notes iduuid no gen_random_uuid()primary key user_iduuid no unique · → users.id (on delete cascade) display_namevarchar(100) yes biotext yes avatar_urltext yes banner_urltext yes website_urltext yes twitter_handlevarchar(100) yes min_tip_amount_centsinteger no 500payout_address_cryptotext yes payout_account_ccbillvarchar(100) yes total_viewsinteger no 0total_tips_earned_centsinteger no 0updated_attimestamp with time zone no now()
tips_ledger
Column Type Null Default Notes iduuid no gen_random_uuid()primary key entry_typeledger_entry_type no sender_iduuid yes → users.id (on delete set null) creator_iduuid no → users.id (on delete cascade) video_iduuid yes → videos.id (on delete set null) gross_amount_centsinteger no platform_fee_centsinteger no 0net_amount_centsinteger no gatewaypayment_gateway no gateway_transaction_refvarchar(255) no notetext yes created_attimestamp with time zone no now()
Indexes: tips_ledger_creator_idx (creator_id) · tips_ledger_sender_idx (sender_id) · tips_ledger_video_idx (video_id) · tips_ledger_created_at_idx (created_at) · tips_ledger_credit_once_idx (unique, gateway, gateway_transaction_ref, partial)
users
Column Type Null Default Notes iduuid no gen_random_uuid()primary key emailvarchar(255) no unique usernamevarchar(50) no unique password_hashtext no roleuser_role no "MEMBER"is_verifiedboolean no falseis_age_verifiedboolean no falseemail_verified_attimestamp with time zone yes suspended_attimestamp with time zone yes suspension_reasontext yes created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
video_access_grants
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) user_iduuid no → users.id (on delete cascade) granted_viavarchar(50) no "TIP_PAYMENT"amount_paid_centsinteger no transaction_reftext no created_attimestamp with time zone no now()
Indexes: video_access_user_idx (unique, video_id, user_id)
video_audience_lists
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) list_iduuid no → audience_lists.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: video_audience_lists_unique_idx (unique, video_id, list_id) · video_audience_lists_list_idx (list_id)
video_comments
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) author_iduuid no → users.id (on delete cascade) parent_iduuid yes → video_comments.id (on delete cascade) bodytext no created_attimestamp with time zone no now()edited_attimestamp with time zone yes removed_attimestamp with time zone yes removed_byuuid yes → users.id (on delete set null)
Indexes: video_comments_video_created_idx (video_id, created_at) · video_comments_parent_idx (parent_id)
video_likes
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) user_iduuid no → users.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: video_likes_once_idx (unique, video_id, user_id) · video_likes_user_idx (user_id)
video_shares
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) user_iduuid yes → users.id (on delete set null) channelshare_channel no "LINK"created_attimestamp with time zone no now()
Indexes: video_shares_video_idx (video_id)
video_viewers
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) user_iduuid no → users.id (on delete cascade) created_attimestamp with time zone no now()
Indexes: video_viewers_unique_idx (unique, video_id, user_id) · video_viewers_user_idx (user_id)
video_views
Column Type Null Default Notes iduuid no gen_random_uuid()primary key video_iduuid no → videos.id (on delete cascade) viewer_iduuid yes → users.id (on delete set null) viewer_keyvarchar(80) no viewed_ondate no now()created_attimestamp with time zone no now()
Indexes: video_views_once_per_day_idx (unique, video_id, viewer_key, viewed_on) · video_views_video_day_idx (video_id, viewed_on)
videos
Column Type Null Default Notes iduuid no gen_random_uuid()primary key creator_iduuid no → users.id (on delete cascade) bunny_video_idvarchar(120) no unique titlevarchar(255) no descriptiontext yes visibilityvideo_visibility no "PUBLIC"statusvideo_status no "PENDING_UPLOAD"min_tip_amount_centsinteger no 0duration_secondsinteger no 0thumbnail_urltext yes preview_animation_urltext yes views_countinteger no 0tips_countinteger no 0likes_countinteger no 0comments_countinteger no 0shares_countinteger no 0comments_enabledboolean no trueresolutionstext[] yes tagstext[] yes removed_attimestamp with time zone yes removal_reasontext yes created_attimestamp with time zone no now()updated_attimestamp with time zone no now()
Indexes: videos_creator_idx (creator_id) · videos_visibility_idx (visibility) · videos_status_idx (status) · videos_created_at_idx (created_at)
Enums
Enum Values auth_token_purposeVERIFY_EMAIL, RESET_PASSWORDcollection_visibilityPUBLIC, APPROVED_FOLLOWERS_ONLY, CONTACTS_ONLY, INVITED_ONLY, PRIVATEcontact_statusPENDING, ACCEPTED, REJECTED, BLOCKEDfollow_statusPENDING, APPROVEDledger_entry_typeTIP_RECEIVED, PLATFORM_FEE, CREATOR_CREDIT, PAYOUT_REQUESTED, PAYOUT_COMPLETED, REFUNDpayment_gatewayCCBILL, SEGPAY, CRYPTO, STRIPEpayment_intent_statusPENDING, SUCCEEDED, FAILEDpayout_statusREQUESTED, UNDER_REVIEW, PROCESSING, SETTLED, FAILEDreport_reasonNON_CONSENSUAL, UNDERAGE, DMCA_COPYRIGHT, TERMS_VIOLATION, FRAUD_SCAMreport_statusOPEN, IN_REVIEW, RESOLVEDshare_channelLINK, X, WHATSAPP, TELEGRAM, EMAIL, OTHERuser_roleADMIN, CREATOR, MEMBERvideo_statusPENDING_UPLOAD, PROCESSING, READY, FAILEDvideo_visibilityPUBLIC, CONTACTS_ONLY, APPROVED_FOLLOWERS_ONLY, TIPPED_UNLOCKED, INVITED_ONLY
Migrations
0000_initial_schema.sql
0001_email_verification_and_password_reset.sql