201 lines
6.5 KiB
SQL
201 lines
6.5 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('USER', 'ADMIN');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "EventType" AS ENUM ('ATELIER', 'KATA', 'PRESENTATION', 'LEARNING_HOUR');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CharacterClass" AS ENUM ('WARRIOR', 'MAGE', 'ROGUE', 'RANGER', 'PALADIN', 'ENGINEER', 'MERCHANT', 'SCHOLAR', 'BERSERKER', 'NECROMANCER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ChallengeStatus" AS ENUM ('PENDING', 'ACCEPTED', 'COMPLETED', 'REJECTED', 'CANCELLED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"password" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"role" "Role" NOT NULL DEFAULT 'USER',
|
|
"score" INTEGER NOT NULL DEFAULT 0,
|
|
"level" INTEGER NOT NULL DEFAULT 1,
|
|
"hp" INTEGER NOT NULL DEFAULT 1000,
|
|
"maxHp" INTEGER NOT NULL DEFAULT 1000,
|
|
"xp" INTEGER NOT NULL DEFAULT 0,
|
|
"maxXp" INTEGER NOT NULL DEFAULT 5000,
|
|
"avatar" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
"bio" TEXT,
|
|
"characterClass" "CharacterClass",
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "UserPreferences" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"homeBackground" TEXT,
|
|
"eventsBackground" TEXT,
|
|
"leaderboardBackground" TEXT,
|
|
"theme" TEXT DEFAULT 'default',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "UserPreferences_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Event" (
|
|
"id" TEXT NOT NULL,
|
|
"date" TIMESTAMP(3) NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"type" "EventType" NOT NULL,
|
|
"room" TEXT,
|
|
"time" TEXT,
|
|
"maxPlaces" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventRegistration" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "EventRegistration_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "EventFeedback" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"eventId" TEXT NOT NULL,
|
|
"rating" INTEGER NOT NULL,
|
|
"comment" TEXT,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "EventFeedback_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SitePreferences" (
|
|
"id" TEXT NOT NULL DEFAULT 'global',
|
|
"homeBackground" TEXT,
|
|
"eventsBackground" TEXT,
|
|
"leaderboardBackground" TEXT,
|
|
"challengesBackground" TEXT,
|
|
"eventRegistrationPoints" INTEGER NOT NULL DEFAULT 100,
|
|
"eventFeedbackPoints" INTEGER NOT NULL DEFAULT 100,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SitePreferences_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Challenge" (
|
|
"id" TEXT NOT NULL,
|
|
"challengerId" TEXT NOT NULL,
|
|
"challengedId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"pointsReward" INTEGER NOT NULL DEFAULT 100,
|
|
"status" "ChallengeStatus" NOT NULL DEFAULT 'PENDING',
|
|
"adminId" TEXT,
|
|
"adminComment" TEXT,
|
|
"winnerId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"acceptedAt" TIMESTAMP(3),
|
|
"completedAt" TIMESTAMP(3),
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Challenge_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "User_score_idx" ON "User"("score");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "User_email_idx" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "UserPreferences_userId_key" ON "UserPreferences"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Event_date_idx" ON "Event"("date");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventRegistration_userId_idx" ON "EventRegistration"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventRegistration_eventId_idx" ON "EventRegistration"("eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "EventRegistration_userId_eventId_key" ON "EventRegistration"("userId", "eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventFeedback_userId_idx" ON "EventFeedback"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventFeedback_eventId_idx" ON "EventFeedback"("eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "EventFeedback_isRead_idx" ON "EventFeedback"("isRead");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "EventFeedback_userId_eventId_key" ON "EventFeedback"("userId", "eventId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Challenge_challengerId_idx" ON "Challenge"("challengerId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Challenge_challengedId_idx" ON "Challenge"("challengedId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Challenge_status_idx" ON "Challenge"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Challenge_adminId_idx" ON "Challenge"("adminId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "UserPreferences" ADD CONSTRAINT "UserPreferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventRegistration" ADD CONSTRAINT "EventRegistration_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventRegistration" ADD CONSTRAINT "EventRegistration_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventFeedback" ADD CONSTRAINT "EventFeedback_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "Event"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "EventFeedback" ADD CONSTRAINT "EventFeedback_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_challengerId_fkey" FOREIGN KEY ("challengerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_challengedId_fkey" FOREIGN KEY ("challengedId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_adminId_fkey" FOREIGN KEY ("adminId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Challenge" ADD CONSTRAINT "Challenge_winnerId_fkey" FOREIGN KEY ("winnerId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|