Files
soul-yongping/next-project/prisma/schema.prisma
2026-02-09 14:43:35 +08:00

311 lines
15 KiB
Plaintext

generator client {
provider = "prisma-client-js"
output = "../lib/generated/prisma"
}
datasource db {
provider = "mysql"
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model chapters {
id String @id @db.VarChar(20)
part_id String @db.VarChar(20)
part_title String @db.VarChar(100)
chapter_id String @db.VarChar(20)
chapter_title String @db.VarChar(200)
section_title String @db.VarChar(200)
content String @db.LongText
word_count Int? @default(0)
is_free Boolean? @default(false)
price Decimal? @default(1.00) @db.Decimal(10, 2)
sort_order Int? @default(0)
status chapters_status? @default(published)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @db.Timestamp(0)
@@index([chapter_id], map: "idx_chapter_id")
@@index([part_id], map: "idx_part_id")
@@index([sort_order], map: "idx_sort_order")
@@index([status], map: "idx_status")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model ckb_sync_logs {
id String @id @db.VarChar(50)
user_id String @db.VarChar(100)
phone String @db.VarChar(20)
action String @db.VarChar(50)
status String @db.VarChar(20)
request_data Json?
response_data Json?
error_msg String? @db.Text
created_at DateTime? @default(now()) @db.DateTime(0)
@@index([created_at], map: "idx_created_at")
@@index([phone], map: "idx_phone")
@@index([user_id], map: "idx_user_id")
}
model match_records {
id String @id @db.VarChar(50)
user_id String @db.VarChar(50)
match_type match_records_match_type
phone String? @db.VarChar(20)
wechat_id String? @db.VarChar(100)
matched_user_id String? @db.VarChar(50)
match_score Int?
status match_records_status? @default(pending)
created_at DateTime @default(now()) @db.Timestamp(0)
users users @relation(fields: [user_id], references: [id], onUpdate: Restrict, map: "match_records_ibfk_1")
@@index([match_type], map: "idx_match_type")
@@index([status], map: "idx_status")
@@index([user_id], map: "idx_user_id")
}
model orders {
id String @id @db.VarChar(50)
order_sn String @unique(map: "order_sn") @db.VarChar(50)
user_id String @db.VarChar(50)
open_id String @db.VarChar(100)
product_type orders_product_type
product_id String? @db.VarChar(50)
amount Decimal @db.Decimal(10, 2)
description String? @db.VarChar(200)
status orders_status? @default(created)
transaction_id String? @db.VarChar(100)
pay_time DateTime? @db.Timestamp(0)
referral_code String? @db.VarChar(255)
referrer_id String? @db.VarChar(255)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @db.Timestamp(0)
users users @relation(fields: [user_id], references: [id], onUpdate: Restrict, map: "orders_ibfk_1")
referral_bindings referral_bindings[]
@@index([order_sn], map: "idx_order_sn")
@@index([status], map: "idx_status")
@@index([user_id], map: "idx_user_id")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model reading_progress {
id Int @id @default(autoincrement())
user_id String @db.VarChar(50)
section_id String @db.VarChar(20)
progress Int? @default(0)
duration Int? @default(0)
status reading_progress_status? @default(reading)
completed_at DateTime? @db.DateTime(0)
first_open_at DateTime @db.DateTime(0)
last_open_at DateTime @db.DateTime(0)
created_at DateTime? @default(now()) @db.DateTime(0)
updated_at DateTime? @default(now()) @db.DateTime(0)
@@unique([user_id, section_id], map: "idx_user_section")
@@index([completed_at], map: "idx_completed")
@@index([last_open_at], map: "idx_last_open")
@@index([user_id, status], map: "idx_user_status")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model referral_bindings {
id String @id @db.VarChar(50)
referrer_id String @db.VarChar(50)
referee_id String @db.VarChar(50)
referral_code String @db.VarChar(20)
status referral_bindings_status? @default(active)
binding_date DateTime @default(now()) @db.Timestamp(0)
expiry_date DateTime @default(dbgenerated("'0000-00-00 00:00:00'")) @db.Timestamp(0)
conversion_date DateTime? @db.Timestamp(0)
commission_amount Decimal? @default(0.00) @db.Decimal(10, 2)
order_id String? @db.VarChar(50)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @db.Timestamp(0)
last_purchase_date DateTime? @db.DateTime(0)
purchase_count Int? @default(0)
total_commission Decimal? @default(0.00) @db.Decimal(10, 2)
users_referral_bindings_referrer_idTousers users @relation("referral_bindings_referrer_idTousers", fields: [referrer_id], references: [id], onUpdate: Restrict, map: "referral_bindings_ibfk_1")
users_referral_bindings_referee_idTousers users @relation("referral_bindings_referee_idTousers", fields: [referee_id], references: [id], onUpdate: Restrict, map: "referral_bindings_ibfk_2")
orders orders? @relation(fields: [order_id], references: [id], onDelete: Restrict, onUpdate: Restrict, map: "referral_bindings_ibfk_3")
@@unique([referrer_id, referee_id], map: "unique_referrer_referee")
@@index([expiry_date], map: "idx_expiry_date")
@@index([expiry_date, purchase_count, status], map: "idx_expiry_purchase")
@@index([referee_id], map: "idx_referee_id")
@@index([referee_id, status], map: "idx_referee_status")
@@index([referrer_id], map: "idx_referrer_id")
@@index([status], map: "idx_status")
@@index([order_id], map: "order_id")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model referral_visits {
id Int @id @default(autoincrement())
referrer_id String @db.VarChar(50)
visitor_id String? @db.VarChar(50)
visitor_openid String? @db.VarChar(100)
source String? @default("miniprogram") @db.VarChar(50)
page String? @db.VarChar(200)
created_at DateTime @default(now()) @db.Timestamp(0)
@@index([created_at], map: "idx_created_at")
@@index([referrer_id], map: "idx_referrer_id")
@@index([visitor_id], map: "idx_visitor_id")
}
model system_config {
id Int @id @default(autoincrement())
config_key String @unique(map: "config_key") @db.VarChar(100)
config_value Json
description String? @db.VarChar(200)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @db.Timestamp(0)
@@index([config_key], map: "idx_config_key")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model user_tag_definitions {
id Int @id @default(autoincrement())
name String @unique(map: "name") @db.VarChar(50)
category String @db.VarChar(50)
color String? @default("#38bdac") @db.VarChar(20)
description String? @db.VarChar(200)
is_active Boolean? @default(true)
created_at DateTime? @default(now()) @db.DateTime(0)
@@index([category], map: "idx_category")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model user_tracks {
id String @id @db.VarChar(50)
user_id String @db.VarChar(100)
action String @db.VarChar(50)
chapter_id String? @db.VarChar(100)
target String? @db.VarChar(200)
extra_data Json?
created_at DateTime? @default(now()) @db.DateTime(0)
@@index([action], map: "idx_action")
@@index([created_at], map: "idx_created_at")
@@index([user_id], map: "idx_user_id")
}
/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments
model users {
id String @id @db.VarChar(50)
open_id String? @unique(map: "open_id") @db.VarChar(100)
nickname String? @db.VarChar(100)
avatar String? @db.VarChar(500)
phone String? @db.VarChar(20)
wechat_id String? @db.VarChar(100)
referral_code String? @unique(map: "referral_code") @db.VarChar(20)
purchased_sections Json?
has_full_book Boolean? @default(false)
earnings Decimal? @default(0.00) @db.Decimal(10, 2)
pending_earnings Decimal? @default(0.00) @db.Decimal(10, 2)
referral_count Int? @default(0)
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @db.Timestamp(0)
password String? @db.VarChar(100)
session_key String? @db.VarChar(100)
referred_by String? @db.VarChar(50)
is_admin Boolean? @default(false)
match_count_today Int? @default(0)
last_match_date DateTime? @db.Date
withdrawn_earnings Decimal? @default(0.00) @db.Decimal(10, 2)
ckb_user_id String? @db.VarChar(100)
ckb_synced_at DateTime? @db.DateTime(0)
ckb_tags Json?
tags Json?
source_tags Json?
merged_tags Json?
source String? @db.VarChar(50)
created_by String? @db.VarChar(100)
matched_by String? @db.VarChar(100)
match_records match_records[]
orders orders[]
referral_bindings_referral_bindings_referrer_idTousers referral_bindings[] @relation("referral_bindings_referrer_idTousers")
referral_bindings_referral_bindings_referee_idTousers referral_bindings[] @relation("referral_bindings_referee_idTousers")
@@index([open_id], map: "idx_open_id")
@@index([phone], map: "idx_phone")
@@index([referral_code], map: "idx_referral_code")
@@index([referred_by], map: "idx_referred_by")
}
model withdrawals {
id String @id @db.VarChar(50)
user_id String @db.VarChar(50)
amount Decimal @db.Decimal(10, 2)
status withdrawals_status? @default(pending)
wechat_openid String? @db.VarChar(100)
wechat_id String? @db.VarChar(100) // 用户微信号,用于后台列表展示与核对
transaction_id String? @db.VarChar(100)
transfer_bill_no String? @db.VarChar(100) // 微信转账单号(用户确认模式)
package_info String? @db.VarChar(1024) // 调起 wx.requestMerchantTransfer 用
error_message String? @db.VarChar(500)
created_at DateTime @default(now()) @db.Timestamp(0)
processed_at DateTime? @db.Timestamp(0)
@@index([status], map: "idx_status")
@@index([user_id], map: "idx_user_id")
}
enum match_records_match_type {
partner
investor
mentor
team
}
enum withdrawals_status {
pending
pending_confirm // 已发起转账,待用户在小程序内确认收款
processing
success
failed
}
enum orders_product_type {
section
fullbook
match
}
enum referral_bindings_status {
active
converted
expired
cancelled
}
enum reading_progress_status {
reading
completed
abandoned
}
enum match_records_status {
pending
matched
contacted
}
enum orders_status {
created
pending
paid
cancelled
refunded
expired
}
enum chapters_status {
draft
published
archived
}