294 lines
19 KiB
Plaintext
294 lines
19 KiB
Plaintext
// 由现有 v3.5 PostgreSQL 结构反向映射。
|
|
// CHECK、C 排序规则与部分唯一索引以 migrations 中保留的原始 SQL 为准。
|
|
generator client {
|
|
provider = "prisma-client"
|
|
output = "../src/generated/prisma"
|
|
previewFeatures = ["partialIndexes"]
|
|
importFileExtension = "js"
|
|
moduleFormat = "cjs"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 AdminAuditLog {
|
|
id String @id @db.VarChar(128)
|
|
actorUserId String? @map("actor_user_id") @db.VarChar(128)
|
|
actorType String @map("actor_type") @db.VarChar(16)
|
|
action String @db.VarChar(64)
|
|
resourceType String @map("resource_type") @db.VarChar(64)
|
|
resourceId String? @map("resource_id") @db.VarChar(128)
|
|
requestId String @map("request_id") @db.VarChar(128)
|
|
beforeData Json? @map("before_data")
|
|
afterData Json? @map("after_data")
|
|
reason String?
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
|
|
@@index([actorUserId, createdAt(sort: Desc)], map: "admin_audit_logs_actor_created_at_idx")
|
|
@@index([requestId])
|
|
@@index([resourceType, resourceId, createdAt(sort: Desc)], map: "admin_audit_logs_resource_created_at_idx")
|
|
@@map("admin_audit_logs")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 Asset {
|
|
id String @id @db.VarChar(128)
|
|
sourceRef String? @map("source_ref")
|
|
sourceRefHash String? @unique @map("source_ref_hash") @db.Char(64)
|
|
provider String @default("qiniu") @db.VarChar(16)
|
|
bucket String? @db.VarChar(128)
|
|
objectKey String? @map("object_key")
|
|
objectRefHash String? @unique @map("object_ref_hash") @db.Char(64)
|
|
externalUrl String? @map("external_url")
|
|
purpose String @db.VarChar(32)
|
|
ownerUserId String? @map("owner_user_id") @db.VarChar(128)
|
|
visibility String @db.VarChar(16)
|
|
mimeType String? @map("mime_type") @db.VarChar(128)
|
|
sizeBytes BigInt? @map("size_bytes")
|
|
checksum String? @db.Char(64)
|
|
status String @default("pending") @db.VarChar(16)
|
|
lastError String? @map("last_error")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
usersAssetsOwnerUserIdTousers User? @relation("assets_owner_user_idTousers", fields: [ownerUserId], references: [id], onUpdate: Restrict)
|
|
categories Category[]
|
|
usersUsersAvatarAssetIdToassets User[] @relation("users_avatar_asset_idToassets")
|
|
worksheetResourceAssets WorksheetResourceAsset[]
|
|
worksheetResources WorksheetResource[]
|
|
worksheets Worksheet[]
|
|
|
|
@@index([ownerUserId, purpose, status], map: "assets_owner_purpose_status_idx")
|
|
@@index([status, updatedAt])
|
|
@@map("assets")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 Category {
|
|
status String @default("draft") @db.VarChar(16)
|
|
id String @id @db.VarChar(128)
|
|
name String @db.VarChar(100)
|
|
icon String @db.VarChar(1024)
|
|
iconAssetId String? @map("icon_asset_id") @db.VarChar(128)
|
|
color String @db.VarChar(32)
|
|
sortOrder Int @default(0) @map("sort_order")
|
|
parentId String? @map("parent_id") @db.VarChar(128)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
assets Asset? @relation(fields: [iconAssetId], references: [id], onDelete: Restrict, onUpdate: Restrict)
|
|
categories Category? @relation("categoriesTocategories", fields: [parentId], references: [id], onDelete: Restrict, onUpdate: Restrict)
|
|
otherCategories Category[] @relation("categoriesTocategories")
|
|
worksheets Worksheet[]
|
|
|
|
@@index([parentId, sortOrder, id], map: "categories_parent_sort_idx")
|
|
@@index([status, parentId, sortOrder, id], map: "categories_status_parent_sort_idx")
|
|
@@map("categories")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 DownloadLog {
|
|
id String @id @db.VarChar(128)
|
|
userId String @map("user_id") @db.VarChar(128)
|
|
worksheetId String @map("worksheet_id") @db.VarChar(128)
|
|
exportId String? @map("export_id") @db.VarChar(128)
|
|
source String @default("mini") @db.VarChar(16)
|
|
params Json?
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
worksheetResourceId String? @map("worksheet_resource_id") @db.VarChar(128)
|
|
users User @relation(fields: [userId], references: [id], onUpdate: Restrict)
|
|
|
|
@@unique([userId, exportId], map: "download_logs_user_export_key")
|
|
@@index([userId, createdAt(sort: Desc), id(sort: Desc)], map: "download_logs_user_created_at_idx")
|
|
@@index([worksheetId, createdAt(sort: Desc), id(sort: Desc)], map: "download_logs_worksheet_created_at_idx")
|
|
@@map("download_logs")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 Favorite {
|
|
id String @id @db.VarChar(128)
|
|
userId String @map("user_id") @db.VarChar(128)
|
|
worksheetId String @map("worksheet_id") @db.VarChar(128)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
worksheetResourceId String? @map("worksheet_resource_id") @db.VarChar(128)
|
|
users User @relation(fields: [userId], references: [id], onUpdate: Restrict)
|
|
|
|
@@unique([userId, worksheetResourceId], map: "favorites_user_resource_key", where: raw("(worksheet_resource_id IS NOT NULL)"))
|
|
@@unique([userId, worksheetId], map: "favorites_user_worksheet_key", where: raw("(worksheet_resource_id IS NULL)"))
|
|
@@index([userId, createdAt(sort: Desc), id(sort: Desc)], map: "favorites_user_created_at_idx")
|
|
@@map("favorites")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 JobRun {
|
|
id String @id @db.VarChar(128)
|
|
jobName String @map("job_name") @db.VarChar(64)
|
|
runKey String @map("run_key") @db.VarChar(128)
|
|
triggerType String @map("trigger_type") @db.VarChar(16)
|
|
status String @default("pending") @db.VarChar(16)
|
|
scheduledAt DateTime? @map("scheduled_at") @db.Timestamptz(3)
|
|
startedAt DateTime? @map("started_at") @db.Timestamptz(3)
|
|
finishedAt DateTime? @map("finished_at") @db.Timestamptz(3)
|
|
attempt Int @default(0)
|
|
lockToken String? @map("lock_token") @db.VarChar(128)
|
|
lockedUntil DateTime? @map("locked_until") @db.Timestamptz(3)
|
|
result Json?
|
|
errorMessage String? @map("error_message")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
|
|
@@unique([jobName, runKey], map: "job_runs_job_run_key")
|
|
@@index([jobName, createdAt(sort: Desc)], map: "job_runs_job_created_at_idx")
|
|
@@index([status, lockedUntil])
|
|
@@map("job_runs")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 PageConfig {
|
|
id String @id @db.VarChar(128)
|
|
home Json?
|
|
category Json?
|
|
age Json?
|
|
version BigInt @default(0)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
publishedVersion BigInt? @map("published_version")
|
|
publishedAt DateTime? @map("published_at") @db.Timestamptz(3)
|
|
|
|
@@map("page_configs")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 Setting {
|
|
id String @id @db.VarChar(128)
|
|
value Json
|
|
version BigInt @default(0)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
|
|
@@map("settings")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 {
|
|
id String @id @db.VarChar(128)
|
|
openid String @unique @db.VarChar(128)
|
|
unionid String? @db.VarChar(128)
|
|
nickName String? @map("nick_name") @db.VarChar(100)
|
|
avatarAssetId String? @map("avatar_asset_id") @db.VarChar(128)
|
|
totalDownloads BigInt @default(0) @map("total_downloads")
|
|
role String @default("user") @db.VarChar(16)
|
|
status String @default("active") @db.VarChar(16)
|
|
authVersion Int @default(1) @map("auth_version")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
lastActiveAt DateTime @default(now()) @map("last_active_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
assetsAssetsOwnerUserIdTousers Asset[] @relation("assets_owner_user_idTousers")
|
|
downloadLogs DownloadLog[]
|
|
favorites Favorite[]
|
|
assetsUsersAvatarAssetIdToassets Asset? @relation("users_avatar_asset_idToassets", fields: [avatarAssetId], references: [id], onDelete: Restrict, onUpdate: Restrict)
|
|
|
|
@@index([unionid])
|
|
@@map("users")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 WorksheetGrade {
|
|
worksheetId String @map("worksheet_id") @db.VarChar(128)
|
|
grade Int @db.SmallInt
|
|
worksheets Worksheet @relation(fields: [worksheetId], references: [id], onUpdate: Restrict)
|
|
|
|
@@id([worksheetId, grade])
|
|
@@index([grade, worksheetId], map: "worksheet_grades_grade_worksheet_idx")
|
|
@@map("worksheet_grades")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 WorksheetResourceAsset {
|
|
id String @id @db.VarChar(128)
|
|
worksheetResourceId String @map("worksheet_resource_id") @db.VarChar(128)
|
|
assetId String @map("asset_id") @db.VarChar(128)
|
|
role String @db.VarChar(16)
|
|
sortOrder Int @default(0) @map("sort_order")
|
|
assets Asset @relation(fields: [assetId], references: [id], onUpdate: Restrict)
|
|
worksheetResources WorksheetResource @relation(fields: [worksheetResourceId], references: [id], onUpdate: Restrict, map: "worksheet_resource_assets_resource_id_fkey")
|
|
|
|
@@unique([worksheetResourceId, role, assetId], map: "worksheet_resource_assets_resource_role_asset_key")
|
|
@@index([assetId], map: "worksheet_resource_assets_asset_idx")
|
|
@@index([worksheetResourceId, role, sortOrder, id], map: "worksheet_resource_assets_resource_role_sort_idx")
|
|
@@map("worksheet_resource_assets")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 WorksheetResource {
|
|
id String @id @db.VarChar(128)
|
|
worksheetId String @map("worksheet_id") @db.VarChar(128)
|
|
title String @db.VarChar(100)
|
|
previewAssetId String @map("preview_asset_id") @db.VarChar(128)
|
|
configOverride Json? @map("config_override")
|
|
status String @default("draft") @db.VarChar(16)
|
|
sortOrder Int @default(0) @map("sort_order")
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
firstPublishedAt DateTime? @map("first_published_at") @db.Timestamptz(3)
|
|
downloads BigInt @default(0)
|
|
worksheetResourceAssets WorksheetResourceAsset[]
|
|
assets Asset @relation(fields: [previewAssetId], references: [id], onUpdate: Restrict)
|
|
worksheets Worksheet @relation(fields: [worksheetId], references: [id], onUpdate: Restrict)
|
|
|
|
@@index([previewAssetId], map: "worksheet_resources_preview_asset_idx")
|
|
@@index([worksheetId, status, sortOrder, id], map: "worksheet_resources_worksheet_status_sort_idx")
|
|
@@map("worksheet_resources")
|
|
}
|
|
|
|
/// This table contains check constraints and requires additional setup for migrations. Visit https://pris.ly/d/check-constraints for more info.
|
|
/// 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 Worksheet {
|
|
id String @id @db.VarChar(128)
|
|
title String @db.VarChar(100)
|
|
subtitle String @db.VarChar(500)
|
|
categoryId String @map("category_id") @db.VarChar(128)
|
|
subcategory String? @db.VarChar(100)
|
|
path String @db.VarChar(1024)
|
|
ageMin Int @map("age_min") @db.SmallInt
|
|
ageMax Int @map("age_max") @db.SmallInt
|
|
grade Int @default(0) @db.SmallInt
|
|
difficulty Int @db.SmallInt
|
|
previewAssetId String @map("preview_asset_id") @db.VarChar(128)
|
|
tags Json @default("[]")
|
|
isNew Boolean @default(false) @map("is_new")
|
|
isHot Boolean @default(false) @map("is_hot")
|
|
sortOrder Int @default(0) @map("sort_order")
|
|
downloads BigInt @default(0)
|
|
likes BigInt @default(0)
|
|
downloadsSeed BigInt @default(0) @map("downloads_seed")
|
|
likesSeed BigInt @default(0) @map("likes_seed")
|
|
status String @default("draft") @db.VarChar(16)
|
|
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
|
contentUpdatedAt DateTime? @map("content_updated_at") @db.Timestamptz(3)
|
|
updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz(3)
|
|
generationMode String @default("procedural") @map("generation_mode") @db.VarChar(16)
|
|
rendererKey String? @map("renderer_key") @db.VarChar(64)
|
|
renderConfig Json @default("{}") @map("render_config")
|
|
firstPublishedAt DateTime? @map("first_published_at") @db.Timestamptz(3)
|
|
worksheetGrades WorksheetGrade[]
|
|
worksheetResources WorksheetResource[]
|
|
categories Category @relation(fields: [categoryId], references: [id], onUpdate: Restrict)
|
|
assets Asset @relation(fields: [previewAssetId], references: [id], onUpdate: Restrict)
|
|
|
|
@@index([categoryId, status, sortOrder, updatedAt(sort: Desc), id], map: "worksheets_category_status_sort_idx")
|
|
@@index([status, ageMin, ageMax], map: "worksheets_status_age_idx")
|
|
@@index([status, sortOrder, updatedAt(sort: Desc), id], map: "worksheets_status_sort_idx")
|
|
@@map("worksheets")
|
|
}
|