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