feat: 新增数据库

This commit is contained in:
2026-04-25 21:52:18 +08:00
parent 223845b0ed
commit abd1b03529
23 changed files with 1890 additions and 97 deletions
@@ -0,0 +1,64 @@
-- CreateTable
CREATE TABLE `users` (
`id` INT NOT NULL,
`username` VARCHAR(191) NOT NULL DEFAULT '',
`display_name` VARCHAR(191) NOT NULL DEFAULT '',
`group` VARCHAR(191) NOT NULL DEFAULT '',
`role` INT NOT NULL DEFAULT 0,
`status` INT NOT NULL DEFAULT 0,
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `image_generations` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`prompt` TEXT NOT NULL,
`status` ENUM('QUEUED', 'RUNNING', 'SUCCEEDED', 'FAILED') NOT NULL DEFAULT 'RUNNING',
`model` VARCHAR(64) NOT NULL DEFAULT 'gpt-image-2',
`size` VARCHAR(32) NOT NULL DEFAULT '1024x1024',
`started_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`ended_at` DATETIME(3) NULL,
`duration_ms` INT NULL,
`image_url` VARCHAR(2048) NULL,
`image_base64` LONGTEXT NULL,
`image_mime_type` VARCHAR(191) NULL,
`revised_prompt` TEXT NULL,
`upstream_response` JSON NULL,
`error_message` TEXT NULL,
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`deleted_at` DATETIME(3) NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `generation_stats` (
`id` VARCHAR(32) NOT NULL,
`total_requests` INT NOT NULL DEFAULT 0,
`success_requests` INT NOT NULL DEFAULT 0,
`failed_requests` INT NOT NULL DEFAULT 0,
`queued_requests` INT NOT NULL DEFAULT 0,
`running_requests` INT NOT NULL DEFAULT 0,
`total_images` INT NOT NULL DEFAULT 0,
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateIndex
CREATE INDEX `image_generations_user_id_created_at_idx` ON `image_generations`(`user_id`, `created_at`);
-- CreateIndex
CREATE INDEX `image_generations_status_idx` ON `image_generations`(`status`);
-- CreateIndex
CREATE INDEX `image_generations_deleted_at_idx` ON `image_generations`(`deleted_at`);
-- AddForeignKey
ALTER TABLE `image_generations`
ADD CONSTRAINT `image_generations_user_id_fkey`
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`)
ON DELETE CASCADE ON UPDATE CASCADE;
+3
View File
@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "mysql"
+75
View File
@@ -0,0 +1,75 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// Get a free hosted Postgres database in seconds: `npx create-db`
generator client {
provider = "prisma-client"
output = "../app/generated/prisma"
}
datasource db {
provider = "mysql"
}
enum ImageGenerationStatus {
QUEUED
RUNNING
SUCCEEDED
FAILED
}
model User {
id Int @id
username String @default("") @db.VarChar(191)
displayName String @default("") @map("display_name") @db.VarChar(191)
group String @default("") @db.VarChar(191)
role Int @default(0)
status Int @default(0)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
imageGenerations ImageGeneration[]
@@map("users")
}
model ImageGeneration {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
userId Int @map("user_id")
prompt String @db.Text
status ImageGenerationStatus @default(RUNNING)
model String @default("gpt-image-2") @db.VarChar(64)
size String @default("1024x1024") @db.VarChar(32)
startedAt DateTime @default(now()) @map("started_at")
endedAt DateTime? @map("ended_at")
durationMs Int? @map("duration_ms")
imageUrl String? @map("image_url") @db.VarChar(2048)
imageBase64 String? @map("image_base64") @db.LongText
imageMimeType String? @map("image_mime_type") @db.VarChar(191)
revisedPrompt String? @map("revised_prompt") @db.Text
upstreamResponse Json? @map("upstream_response")
errorMessage String? @map("error_message") @db.Text
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId, createdAt])
@@index([status])
@@index([deletedAt])
@@map("image_generations")
}
model GenerationStats {
id String @id @db.VarChar(32)
totalRequests Int @default(0) @map("total_requests")
successRequests Int @default(0) @map("success_requests")
failedRequests Int @default(0) @map("failed_requests")
queuedRequests Int @default(0) @map("queued_requests")
runningRequests Int @default(0) @map("running_requests")
totalImages Int @default(0) @map("total_images")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("generation_stats")
}