Kanban shenanigans

This commit is contained in:
2025-07-05 10:08:09 +02:00
parent a12a8e4e1b
commit 75623f37bc
13 changed files with 674 additions and 11 deletions

View File

@ -0,0 +1,97 @@
-- CreateEnum
CREATE TYPE "Role" AS ENUM ('ADMIN', 'ARTIST');
-- CreateEnum
CREATE TYPE "RequestStatus" AS ENUM ('PENDING', 'ACCEPTED', 'IN_PROGRESS', 'DONE', 'REJECTED');
-- CreateTable
CREATE TABLE "User" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"name" TEXT,
"role" "Role" NOT NULL DEFAULT 'ADMIN',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CommissionType" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"basePrice" DOUBLE PRECISION NOT NULL,
"deliveryEst" TEXT,
"tags" TEXT[],
"active" BOOLEAN NOT NULL DEFAULT true,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "CommissionType_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CommissionRequest" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"email" TEXT NOT NULL,
"message" TEXT NOT NULL,
"typeId" TEXT NOT NULL,
"status" "RequestStatus" NOT NULL DEFAULT 'PENDING',
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "CommissionRequest_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Artwork" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"imageUrl" TEXT NOT NULL,
"description" TEXT,
"tags" TEXT[],
"formats" TEXT[],
"isPublic" BOOLEAN NOT NULL DEFAULT true,
"groupId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "Artwork_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "PresentationGroup" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "PresentationGroup_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Preferences" (
"id" TEXT NOT NULL,
"commissionOpen" BOOLEAN NOT NULL DEFAULT true,
"defaultDelivery" TEXT,
"autoReplyMessage" TEXT,
"notifyByEmail" BOOLEAN NOT NULL DEFAULT true,
CONSTRAINT "Preferences_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "TOS" (
"id" TEXT NOT NULL,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "TOS_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- AddForeignKey
ALTER TABLE "CommissionRequest" ADD CONSTRAINT "CommissionRequest_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "CommissionType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Artwork" ADD CONSTRAINT "Artwork_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "PresentationGroup"("id") ON DELETE SET NULL ON UPDATE CASCADE;

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 = "postgresql"

View File

@ -13,3 +13,84 @@ datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
name String?
role Role @default(ADMIN)
createdAt DateTime @default(now())
}
enum Role {
ADMIN
ARTIST
}
model CommissionType {
id String @id @default(cuid())
title String
description String?
basePrice Float
deliveryEst String? // e.g. "2 weeks"
tags String[] // e.g. shaded, sketch, full-body
active Boolean @default(true)
createdAt DateTime @default(now())
CommissionRequest CommissionRequest[]
}
model CommissionRequest {
id String @id @default(cuid())
name String
email String
message String
typeId String
status RequestStatus @default(PENDING)
createdAt DateTime @default(now())
type CommissionType @relation(fields: [typeId], references: [id])
}
enum RequestStatus {
PENDING
ACCEPTED
IN_PROGRESS
DONE
REJECTED
}
model Artwork {
id String @id @default(cuid())
title String
imageUrl String
description String?
tags String[]
formats String[]
isPublic Boolean @default(true)
groupId String?
createdAt DateTime @default(now())
group PresentationGroup? @relation(fields: [groupId], references: [id])
}
model PresentationGroup {
id String @id @default(cuid())
name String
description String?
createdAt DateTime @default(now())
Artwork Artwork[]
}
model Preferences {
id String @id @default(cuid())
commissionOpen Boolean @default(true)
defaultDelivery String? // e.g. "7 days"
autoReplyMessage String?
notifyByEmail Boolean @default(true)
}
model TOS {
id String @id @default(cuid())
content String // Markdown or rich text
createdAt DateTime @default(now())
}