feat: 完成分类、worksheet 接口开发,资源迁移到七牛
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
// 由现有 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")
|
||||
}
|
||||
Reference in New Issue
Block a user