chore: add config, prisma schema and client (Prisma 7 adapter)
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
export const config = {
|
||||
DOWNLOAD_LINK_TTL_HOURS: 24,
|
||||
WORKER_CONCURRENCY: 3,
|
||||
WORKER_POLL_INTERVAL_MS: 10_000,
|
||||
STORAGE_PATH: process.env.STORAGE_PATH ?? '',
|
||||
RATE_LIMIT_MAX: 5,
|
||||
RATE_LIMIT_WINDOW_MS: 3_600_000,
|
||||
} as const
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'dotenv/config'
|
||||
import { defineConfig, env } from 'prisma/config'
|
||||
|
||||
export default defineConfig({
|
||||
schema: 'prisma/schema.prisma',
|
||||
migrations: {
|
||||
path: 'prisma/migrations',
|
||||
},
|
||||
datasource: {
|
||||
url: env('DATABASE_URL'),
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,39 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE `Download` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`uuid` VARCHAR(191) NOT NULL,
|
||||
`url` TEXT NOT NULL,
|
||||
`status` ENUM('PENDING', 'PROCESSING', 'DONE', 'FAILED', 'FILE_DELETED') NOT NULL DEFAULT 'PENDING',
|
||||
`format` VARCHAR(191) NOT NULL,
|
||||
`quality` VARCHAR(191) NOT NULL,
|
||||
`subtitles` BOOLEAN NOT NULL DEFAULT false,
|
||||
`extraArgs` TEXT NULL,
|
||||
`filePath` TEXT NULL,
|
||||
`fileName` VARCHAR(191) NULL,
|
||||
`fileSize` BIGINT NULL,
|
||||
`errorMsg` TEXT NULL,
|
||||
`ipAddress` VARCHAR(191) NOT NULL,
|
||||
`submittedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
`startedAt` DATETIME(3) NULL,
|
||||
`completedAt` DATETIME(3) NULL,
|
||||
`deletedAt` DATETIME(3) NULL,
|
||||
|
||||
UNIQUE INDEX `Download_uuid_key`(`uuid`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `DownloadToken` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`downloadId` VARCHAR(191) NOT NULL,
|
||||
`token` VARCHAR(191) NOT NULL,
|
||||
`expiresAt` DATETIME(3) NOT NULL,
|
||||
`usedAt` DATETIME(3) NULL,
|
||||
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
|
||||
UNIQUE INDEX `DownloadToken_token_key`(`token`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE `DownloadToken` ADD CONSTRAINT `DownloadToken_downloadId_fkey` FOREIGN KEY (`downloadId`) REFERENCES `Download`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
@@ -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"
|
||||
@@ -0,0 +1,49 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "mysql"
|
||||
}
|
||||
|
||||
model Download {
|
||||
id String @id @default(cuid())
|
||||
uuid String @unique @default(uuid())
|
||||
url String @db.Text
|
||||
status Status @default(PENDING)
|
||||
format String
|
||||
quality String
|
||||
subtitles Boolean @default(false)
|
||||
extraArgs String? @db.Text
|
||||
|
||||
filePath String? @db.Text
|
||||
fileName String?
|
||||
fileSize BigInt?
|
||||
errorMsg String? @db.Text
|
||||
|
||||
ipAddress String
|
||||
submittedAt DateTime @default(now())
|
||||
startedAt DateTime?
|
||||
completedAt DateTime?
|
||||
deletedAt DateTime?
|
||||
|
||||
tokens DownloadToken[]
|
||||
}
|
||||
|
||||
model DownloadToken {
|
||||
id String @id @default(cuid())
|
||||
download Download @relation(fields: [downloadId], references: [id])
|
||||
downloadId String
|
||||
token String @unique @default(uuid())
|
||||
expiresAt DateTime
|
||||
usedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
enum Status {
|
||||
PENDING
|
||||
PROCESSING
|
||||
DONE
|
||||
FAILED
|
||||
FILE_DELETED
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import 'dotenv/config'
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import { PrismaMariaDb } from '@prisma/adapter-mariadb'
|
||||
|
||||
function createPrismaClient() {
|
||||
const url = process.env.DATABASE_URL
|
||||
if (!url) throw new Error('DATABASE_URL is not set')
|
||||
const adapter = new PrismaMariaDb(url)
|
||||
return new PrismaClient({ adapter })
|
||||
}
|
||||
|
||||
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient }
|
||||
|
||||
export const prisma = globalForPrisma.prisma ?? createPrismaClient()
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
|
||||
Reference in New Issue
Block a user