311 lines
15 KiB
Plaintext
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
|
|
}
|