|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generator client { |
|
|
provider = "prisma-client-js" |
|
|
output = "./client" |
|
|
} |
|
|
|
|
|
datasource db { |
|
|
provider = "postgresql" |
|
|
url = env("DATABASE_URL") |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model Announcement { |
|
|
id Int @id @default(autoincrement()) |
|
|
title String |
|
|
content String |
|
|
sortOrder Float? |
|
|
isHidden Boolean @default(false) |
|
|
|
|
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamp(6) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
} |
|
|
|
|
|
model Setting { |
|
|
key String @id |
|
|
value Json? |
|
|
} |
|
|
|
|
|
model Cache { |
|
|
key String @id |
|
|
value Json? |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum Role { |
|
|
Admin |
|
|
User |
|
|
} |
|
|
|
|
|
model User { |
|
|
id Int @id @default(autoincrement()) |
|
|
role Role @default(User) |
|
|
name String? @unique |
|
|
email String? @unique |
|
|
phone String? @unique |
|
|
password String? @db.Text |
|
|
|
|
|
|
|
|
oauths OAuth[] |
|
|
orders Order[] |
|
|
chatSessions ChatSession[] |
|
|
chatMessages ChatMessage[] |
|
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamp(6) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
isBlocked Boolean @default(false) |
|
|
} |
|
|
|
|
|
enum OAuthProvider { |
|
|
Apple |
|
|
Github |
|
|
Google |
|
|
Wechat |
|
|
Microsofe |
|
|
} |
|
|
|
|
|
model OAuth { |
|
|
id Int @id @default(autoincrement()) |
|
|
provider OAuthProvider |
|
|
providerId String |
|
|
accessToken String |
|
|
refreshToken String |
|
|
expiredAt DateTime |
|
|
|
|
|
data Json? |
|
|
|
|
|
|
|
|
user User @relation(fields: [userId], references: [id]) |
|
|
userId Int |
|
|
|
|
|
|
|
|
createdAt DateTime @default(now()) @db.Timestamp(6) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
|
|
|
@@unique([provider, providerId]) |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model Model { |
|
|
id Int @id @default(autoincrement()) |
|
|
name String @unique |
|
|
label String? |
|
|
|
|
|
price Int |
|
|
isDisabled Boolean @default(false) |
|
|
sortOrder Float? |
|
|
|
|
|
|
|
|
products ModelInProduct[] |
|
|
messages ChatMessage[] |
|
|
|
|
|
@@unique([id, name]) |
|
|
} |
|
|
|
|
|
model Product { |
|
|
id Int @id @default(autoincrement()) |
|
|
name String @unique |
|
|
features String[] |
|
|
|
|
|
isHidden Boolean @default(false) |
|
|
|
|
|
price Int |
|
|
stock Int @default(-1) |
|
|
sortOrder Float? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
duration Int |
|
|
|
|
|
models ModelInProduct[] |
|
|
|
|
|
|
|
|
order Order[] |
|
|
category Category? @relation(fields: [categoryId], references: [id]) |
|
|
categoryId Int? |
|
|
} |
|
|
|
|
|
|
|
|
model ModelInProduct { |
|
|
|
|
|
times Int |
|
|
duration Int |
|
|
|
|
|
|
|
|
model Model @relation(fields: [modelId], references: [id]) |
|
|
modelId Int |
|
|
|
|
|
|
|
|
product Product @relation(fields: [productId], references: [id]) |
|
|
productId Int |
|
|
|
|
|
@@id([modelId, productId]) |
|
|
} |
|
|
|
|
|
|
|
|
model Category { |
|
|
id Int @id @default(autoincrement()) |
|
|
name String @unique |
|
|
|
|
|
isHidden Boolean @default(false) |
|
|
sortOrder Float? |
|
|
|
|
|
products Product[] |
|
|
} |
|
|
|
|
|
enum OrderStatus { |
|
|
Pending |
|
|
Paid |
|
|
Failed |
|
|
Refunded |
|
|
} |
|
|
|
|
|
enum OrderType { |
|
|
Subscription |
|
|
OneTime |
|
|
} |
|
|
|
|
|
|
|
|
model Order { |
|
|
id String @id @unique |
|
|
type OrderType |
|
|
status OrderStatus @default(Pending) |
|
|
|
|
|
count Int @default(1) |
|
|
amount Int |
|
|
|
|
|
startAt DateTime? |
|
|
endAt DateTime? |
|
|
|
|
|
isCurrent Boolean @default(false) |
|
|
|
|
|
|
|
|
|
|
|
user User @relation(fields: [userId], references: [id]) |
|
|
userId Int |
|
|
|
|
|
product Product @relation(fields: [productId], references: [id]) |
|
|
productId Int |
|
|
|
|
|
|
|
|
createdAt DateTime @default(now()) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
|
|
|
rawData Json? |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum OpenAIKeyStatus { |
|
|
Active |
|
|
Disabled |
|
|
Expired |
|
|
} |
|
|
|
|
|
model OpenAIKey { |
|
|
id Int @id @default(autoincrement()) |
|
|
key String @unique |
|
|
url String? |
|
|
status OpenAIKeyStatus @default(Active) |
|
|
|
|
|
weight Int? |
|
|
total Float? |
|
|
usage Float? |
|
|
tokenUsage Float? |
|
|
priceRatio Float? |
|
|
rateLimit Int? |
|
|
note String? @db.Text |
|
|
|
|
|
|
|
|
createdAt DateTime @default(now()) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
expiredAt DateTime? |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model ChatSession { |
|
|
id String @id @default(uuid()) |
|
|
|
|
|
|
|
|
|
|
|
topic String? |
|
|
lastSummarizeIndex Int? |
|
|
|
|
|
memoryPrompt String? |
|
|
messages ChatMessage[] |
|
|
|
|
|
|
|
|
user User @relation(fields: [userId], references: [id]) |
|
|
userId Int |
|
|
|
|
|
|
|
|
isDeleted Boolean @default(false) |
|
|
isBlocked Boolean @default(false) |
|
|
createdAt DateTime @default(now()) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
} |
|
|
|
|
|
enum ChatMessageRole { |
|
|
System |
|
|
User |
|
|
Assistant |
|
|
} |
|
|
|
|
|
model ChatMessage { |
|
|
id String @id @default(uuid()) |
|
|
|
|
|
role ChatMessageRole |
|
|
content String |
|
|
|
|
|
token Int? |
|
|
|
|
|
|
|
|
chatSession ChatSession? @relation(fields: [chatSessionId], references: [id]) |
|
|
chatSessionId String? |
|
|
|
|
|
model Model? @relation(fields: [modelId], references: [id]) |
|
|
modelId Int? |
|
|
|
|
|
user User @relation(fields: [userId], references: [id]) |
|
|
userId Int |
|
|
|
|
|
|
|
|
isDeleted Boolean @default(false) |
|
|
isBlocked Boolean @default(false) |
|
|
createdAt DateTime @default(now()) |
|
|
updatedAt DateTime @default(now()) @updatedAt |
|
|
} |
|
|
|
|
|
|
|
|
model ChatSetting { |
|
|
userId Int @id |
|
|
historyMessageCount Int? |
|
|
|
|
|
submitKey String? |
|
|
tightBorder Boolean @default(false) |
|
|
|
|
|
defalutModelId Int? |
|
|
temperature Float? |
|
|
maxTokens Int? |
|
|
presencePenalty Float? |
|
|
} |
|
|
|