chore: add config, prisma schema and client (Prisma 7 adapter)

This commit is contained in:
2026-08-10 14:23:31 +02:00
parent df3b6dc8c9
commit 28159d0a4a
6 changed files with 127 additions and 0 deletions
+8
View File
@@ -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
+12
View File
@@ -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;
+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"
+49
View File
@@ -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
}
+16
View File
@@ -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