Add CommissionTypeForm

This commit is contained in:
2025-07-05 23:31:32 +02:00
parent babc1d95ba
commit 648ecda8d4
21 changed files with 1485 additions and 76 deletions

View File

@ -0,0 +1,127 @@
/*
Warnings:
- You are about to drop the column `active` on the `CommissionType` table. All the data in the column will be lost.
- You are about to drop the column `basePrice` on the `CommissionType` table. All the data in the column will be lost.
- You are about to drop the column `deliveryEst` on the `CommissionType` table. All the data in the column will be lost.
- You are about to drop the column `tags` on the `CommissionType` table. All the data in the column will be lost.
- You are about to drop the column `title` on the `CommissionType` table. All the data in the column will be lost.
- You are about to drop the `Artwork` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `CommissionRequest` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `Preferences` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `PresentationGroup` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `TOS` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `User` table. If the table is not empty, all the data it contains will be lost.
- Added the required column `name` to the `CommissionType` table without a default value. This is not possible if the table is not empty.
- Added the required column `updatedAt` to the `CommissionType` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE "Artwork" DROP CONSTRAINT "Artwork_groupId_fkey";
-- DropForeignKey
ALTER TABLE "CommissionRequest" DROP CONSTRAINT "CommissionRequest_typeId_fkey";
-- AlterTable
ALTER TABLE "CommissionType" DROP COLUMN "active",
DROP COLUMN "basePrice",
DROP COLUMN "deliveryEst",
DROP COLUMN "tags",
DROP COLUMN "title",
ADD COLUMN "name" TEXT NOT NULL,
ADD COLUMN "sortIndex" INTEGER NOT NULL DEFAULT 0,
ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL;
-- DropTable
DROP TABLE "Artwork";
-- DropTable
DROP TABLE "CommissionRequest";
-- DropTable
DROP TABLE "Preferences";
-- DropTable
DROP TABLE "PresentationGroup";
-- DropTable
DROP TABLE "TOS";
-- DropTable
DROP TABLE "User";
-- DropEnum
DROP TYPE "RequestStatus";
-- DropEnum
DROP TYPE "Role";
-- CreateTable
CREATE TABLE "CommissionOption" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"sortIndex" INTEGER NOT NULL DEFAULT 0,
"name" TEXT NOT NULL,
"description" TEXT,
CONSTRAINT "CommissionOption_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CommissionExtra" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"sortIndex" INTEGER NOT NULL DEFAULT 0,
"name" TEXT NOT NULL,
"description" TEXT,
CONSTRAINT "CommissionExtra_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CommissionTypeOption" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"typeId" TEXT NOT NULL,
"optionId" TEXT NOT NULL,
"priceRange" TEXT,
"pricePercent" DOUBLE PRECISION,
"price" DOUBLE PRECISION,
CONSTRAINT "CommissionTypeOption_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "CommissionExtraOption" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"typeId" TEXT NOT NULL,
"extraId" TEXT NOT NULL,
"priceRange" TEXT,
"pricePercent" DOUBLE PRECISION,
"price" DOUBLE PRECISION,
CONSTRAINT "CommissionExtraOption_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "CommissionTypeOption_typeId_optionId_key" ON "CommissionTypeOption"("typeId", "optionId");
-- CreateIndex
CREATE UNIQUE INDEX "CommissionExtraOption_typeId_extraId_key" ON "CommissionExtraOption"("typeId", "extraId");
-- AddForeignKey
ALTER TABLE "CommissionTypeOption" ADD CONSTRAINT "CommissionTypeOption_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "CommissionType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CommissionTypeOption" ADD CONSTRAINT "CommissionTypeOption_optionId_fkey" FOREIGN KEY ("optionId") REFERENCES "CommissionOption"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CommissionExtraOption" ADD CONSTRAINT "CommissionExtraOption_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "CommissionType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CommissionExtraOption" ADD CONSTRAINT "CommissionExtraOption_extraId_fkey" FOREIGN KEY ("extraId") REFERENCES "CommissionExtra"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,37 @@
/*
Warnings:
- You are about to drop the `CommissionExtraOption` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropForeignKey
ALTER TABLE "CommissionExtraOption" DROP CONSTRAINT "CommissionExtraOption_extraId_fkey";
-- DropForeignKey
ALTER TABLE "CommissionExtraOption" DROP CONSTRAINT "CommissionExtraOption_typeId_fkey";
-- DropTable
DROP TABLE "CommissionExtraOption";
-- CreateTable
CREATE TABLE "CommissionTypeExtra" (
"id" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
"typeId" TEXT NOT NULL,
"extraId" TEXT NOT NULL,
"priceRange" TEXT,
"pricePercent" DOUBLE PRECISION,
"price" DOUBLE PRECISION,
CONSTRAINT "CommissionTypeExtra_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "CommissionTypeExtra_typeId_extraId_key" ON "CommissionTypeExtra"("typeId", "extraId");
-- AddForeignKey
ALTER TABLE "CommissionTypeExtra" ADD CONSTRAINT "CommissionTypeExtra_typeId_fkey" FOREIGN KEY ("typeId") REFERENCES "CommissionType"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "CommissionTypeExtra" ADD CONSTRAINT "CommissionTypeExtra_extraId_fkey" FOREIGN KEY ("extraId") REFERENCES "CommissionExtra"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -0,0 +1,5 @@
-- AlterTable
ALTER TABLE "CommissionTypeExtra" ADD COLUMN "sortIndex" INTEGER NOT NULL DEFAULT 0;
-- AlterTable
ALTER TABLE "CommissionTypeOption" ADD COLUMN "sortIndex" INTEGER NOT NULL DEFAULT 0;

View File

@ -14,83 +14,161 @@ datasource db {
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())
updatedAt DateTime @updatedAt
sortIndex Int @default(0)
name String
description String?
options CommissionTypeOption[]
extras CommissionTypeExtra[]
}
model CommissionOption {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sortIndex Int @default(0)
name String
description String?
types CommissionTypeOption[]
}
model CommissionExtra {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sortIndex Int @default(0)
name String
description String?
types CommissionTypeExtra[]
}
model CommissionTypeOption {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sortIndex Int @default(0)
typeId String
optionId String
priceRange String?
pricePercent Float?
price Float?
type CommissionType @relation(fields: [typeId], references: [id])
option CommissionOption @relation(fields: [optionId], references: [id])
@@unique([typeId, optionId])
}
model CommissionTypeExtra {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sortIndex Int @default(0)
typeId String
extraId String
priceRange String?
pricePercent Float?
price Float?
type CommissionType @relation(fields: [typeId], references: [id])
extra CommissionExtra @relation(fields: [extraId], references: [id])
@@unique([typeId, extraId])
}
// 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())
// }