Backend: - Characters-Modul (CRUD, HP-Tracking, Conditions) - Pathbuilder 2e JSON Import Service - Claude API Integration für automatische Übersetzungen - Translations-Modul mit Datenbank-Caching - Prisma Schema erweitert (Character, Abilities, Skills, Feats, Items, Resources) Frontend: - Kampagnen-Detailseite mit Mitglieder- und Charakterverwaltung - Charakter erstellen Modal - Pathbuilder Import Modal (Datei-Upload + JSON-Paste) - Logo-Integration (Dimension 47 + Zeasy) - Cinzel Font für Branding Weitere Änderungen: - Auth 401 Redirect Fix für Login-Seite - PROGRESS.md mit Projektfortschritt Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
544 lines
17 KiB
SQL
544 lines
17 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'GM', 'PLAYER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CharacterType" AS ENUM ('PC', 'NPC');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "AbilityType" AS ENUM ('STR', 'DEX', 'CON', 'INT', 'WIS', 'CHA');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Proficiency" AS ENUM ('UNTRAINED', 'TRAINED', 'EXPERT', 'MASTER', 'LEGENDARY');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "FeatSource" AS ENUM ('CLASS', 'ANCESTRY', 'GENERAL', 'SKILL', 'BONUS', 'ARCHETYPE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SpellTradition" AS ENUM ('ARCANE', 'DIVINE', 'OCCULT', 'PRIMAL');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CombatantType" AS ENUM ('PC', 'NPC', 'MONSTER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ActionType" AS ENUM ('ACTION', 'REACTION', 'FREE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "HighlightColor" AS ENUM ('YELLOW', 'GREEN', 'BLUE', 'PINK');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "TranslationType" AS ENUM ('FEAT', 'EQUIPMENT', 'SPELL', 'TRAIT', 'ANCESTRY', 'HERITAGE', 'CLASS', 'BACKGROUND', 'CONDITION', 'ACTION');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "TranslationQuality" AS ENUM ('HIGH', 'MEDIUM', 'LOW');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"role" "UserRole" NOT NULL DEFAULT 'PLAYER',
|
|
"avatarUrl" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Campaign" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"gmId" TEXT NOT NULL,
|
|
"imageUrl" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Campaign_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CampaignMember" (
|
|
"campaignId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"joinedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "CampaignMember_pkey" PRIMARY KEY ("campaignId","userId")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Character" (
|
|
"id" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"ownerId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"type" "CharacterType" NOT NULL DEFAULT 'PC',
|
|
"level" INTEGER NOT NULL DEFAULT 1,
|
|
"avatarUrl" TEXT,
|
|
"hpCurrent" INTEGER NOT NULL,
|
|
"hpMax" INTEGER NOT NULL,
|
|
"hpTemp" INTEGER NOT NULL DEFAULT 0,
|
|
"ancestryId" TEXT,
|
|
"heritageId" TEXT,
|
|
"classId" TEXT,
|
|
"backgroundId" TEXT,
|
|
"experiencePoints" INTEGER NOT NULL DEFAULT 0,
|
|
"pathbuilderData" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Character_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterAbility" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"ability" "AbilityType" NOT NULL,
|
|
"score" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "CharacterAbility_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterFeat" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"featId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"nameGerman" TEXT,
|
|
"level" INTEGER NOT NULL,
|
|
"source" "FeatSource" NOT NULL,
|
|
|
|
CONSTRAINT "CharacterFeat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterSkill" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"skillName" TEXT NOT NULL,
|
|
"proficiency" "Proficiency" NOT NULL DEFAULT 'UNTRAINED',
|
|
|
|
CONSTRAINT "CharacterSkill_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterSpell" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"spellId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"nameGerman" TEXT,
|
|
"tradition" "SpellTradition" NOT NULL,
|
|
"spellLevel" INTEGER NOT NULL,
|
|
"prepared" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "CharacterSpell_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterItem" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"equipmentId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"nameGerman" TEXT,
|
|
"quantity" INTEGER NOT NULL DEFAULT 1,
|
|
"bulk" DECIMAL(65,30) NOT NULL DEFAULT 0,
|
|
"equipped" BOOLEAN NOT NULL DEFAULT false,
|
|
"invested" BOOLEAN NOT NULL DEFAULT false,
|
|
"containerId" TEXT,
|
|
"notes" TEXT,
|
|
|
|
CONSTRAINT "CharacterItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterCondition" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"nameGerman" TEXT,
|
|
"value" INTEGER,
|
|
"duration" TEXT,
|
|
"source" TEXT,
|
|
|
|
CONSTRAINT "CharacterCondition_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CharacterResource" (
|
|
"id" TEXT NOT NULL,
|
|
"characterId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"current" INTEGER NOT NULL,
|
|
"max" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "CharacterResource_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BattleMap" (
|
|
"id" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"imageUrl" TEXT NOT NULL,
|
|
"gridSizeX" INTEGER NOT NULL DEFAULT 20,
|
|
"gridSizeY" INTEGER NOT NULL DEFAULT 20,
|
|
"gridOffsetX" INTEGER NOT NULL DEFAULT 0,
|
|
"gridOffsetY" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BattleMap_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Combatant" (
|
|
"id" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"type" "CombatantType" NOT NULL,
|
|
"level" INTEGER NOT NULL,
|
|
"hpMax" INTEGER NOT NULL,
|
|
"ac" INTEGER NOT NULL,
|
|
"fortitude" INTEGER NOT NULL,
|
|
"reflex" INTEGER NOT NULL,
|
|
"will" INTEGER NOT NULL,
|
|
"perception" INTEGER NOT NULL,
|
|
"speed" INTEGER NOT NULL DEFAULT 25,
|
|
"avatarUrl" TEXT,
|
|
"description" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Combatant_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CombatantAbility" (
|
|
"id" TEXT NOT NULL,
|
|
"combatantId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"actionCost" INTEGER NOT NULL,
|
|
"actionType" "ActionType" NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"damage" TEXT,
|
|
"traits" TEXT[],
|
|
|
|
CONSTRAINT "CombatantAbility_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BattleSession" (
|
|
"id" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"mapId" TEXT,
|
|
"name" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT false,
|
|
"roundNumber" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "BattleSession_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BattleToken" (
|
|
"id" TEXT NOT NULL,
|
|
"battleSessionId" TEXT NOT NULL,
|
|
"combatantId" TEXT,
|
|
"characterId" TEXT,
|
|
"name" TEXT NOT NULL,
|
|
"positionX" DOUBLE PRECISION NOT NULL,
|
|
"positionY" DOUBLE PRECISION NOT NULL,
|
|
"hpCurrent" INTEGER NOT NULL,
|
|
"hpMax" INTEGER NOT NULL,
|
|
"initiative" INTEGER,
|
|
"conditions" TEXT[],
|
|
"size" INTEGER NOT NULL DEFAULT 1,
|
|
|
|
CONSTRAINT "BattleToken_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Document" (
|
|
"id" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"category" TEXT,
|
|
"tags" TEXT[],
|
|
"filePath" TEXT NOT NULL,
|
|
"fileType" TEXT NOT NULL,
|
|
"uploadedBy" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Document_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "DocumentAccess" (
|
|
"id" TEXT NOT NULL,
|
|
"documentId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"characterId" TEXT,
|
|
|
|
CONSTRAINT "DocumentAccess_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Highlight" (
|
|
"id" TEXT NOT NULL,
|
|
"documentId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"selectionText" TEXT NOT NULL,
|
|
"startOffset" INTEGER NOT NULL,
|
|
"endOffset" INTEGER NOT NULL,
|
|
"color" "HighlightColor" NOT NULL,
|
|
"note" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Highlight_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Note" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"campaignId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"isShared" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Note_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "NoteShare" (
|
|
"noteId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "NoteShare_pkey" PRIMARY KEY ("noteId","userId")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Feat" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"traits" TEXT[],
|
|
"summary" TEXT,
|
|
"actions" TEXT,
|
|
"url" TEXT,
|
|
"level" INTEGER,
|
|
"sourceBook" TEXT,
|
|
|
|
CONSTRAINT "Feat_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Equipment" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"traits" TEXT[],
|
|
"itemCategory" TEXT NOT NULL,
|
|
"itemSubcategory" TEXT,
|
|
"bulk" TEXT,
|
|
"url" TEXT,
|
|
"summary" TEXT,
|
|
"activation" TEXT,
|
|
"hands" TEXT,
|
|
"damage" TEXT,
|
|
"range" TEXT,
|
|
"weaponCategory" TEXT,
|
|
"price" INTEGER,
|
|
"level" INTEGER,
|
|
|
|
CONSTRAINT "Equipment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Spell" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"level" INTEGER NOT NULL,
|
|
"actions" TEXT,
|
|
"traditions" TEXT[],
|
|
"traits" TEXT[],
|
|
"range" TEXT,
|
|
"targets" TEXT,
|
|
"duration" TEXT,
|
|
"description" TEXT,
|
|
"url" TEXT,
|
|
|
|
CONSTRAINT "Spell_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Trait" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"url" TEXT,
|
|
|
|
CONSTRAINT "Trait_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Translation" (
|
|
"id" TEXT NOT NULL,
|
|
"type" "TranslationType" NOT NULL,
|
|
"englishName" TEXT NOT NULL,
|
|
"germanName" TEXT NOT NULL,
|
|
"germanSummary" TEXT,
|
|
"germanDescription" TEXT,
|
|
"quality" "TranslationQuality" NOT NULL DEFAULT 'MEDIUM',
|
|
"translatedBy" TEXT NOT NULL DEFAULT 'claude-api',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Translation_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CharacterAbility_characterId_ability_key" ON "CharacterAbility"("characterId", "ability");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CharacterSkill_characterId_skillName_key" ON "CharacterSkill"("characterId", "skillName");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CharacterResource_characterId_name_key" ON "CharacterResource"("characterId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "DocumentAccess_documentId_userId_characterId_key" ON "DocumentAccess"("documentId", "userId", "characterId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Feat_name_key" ON "Feat"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Equipment_name_key" ON "Equipment"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Spell_name_key" ON "Spell"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Trait_name_key" ON "Trait"("name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Translation_type_idx" ON "Translation"("type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Translation_englishName_idx" ON "Translation"("englishName");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Translation_type_englishName_key" ON "Translation"("type", "englishName");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Campaign" ADD CONSTRAINT "Campaign_gmId_fkey" FOREIGN KEY ("gmId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CampaignMember" ADD CONSTRAINT "CampaignMember_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CampaignMember" ADD CONSTRAINT "CampaignMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Character" ADD CONSTRAINT "Character_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Character" ADD CONSTRAINT "Character_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterAbility" ADD CONSTRAINT "CharacterAbility_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterFeat" ADD CONSTRAINT "CharacterFeat_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterFeat" ADD CONSTRAINT "CharacterFeat_featId_fkey" FOREIGN KEY ("featId") REFERENCES "Feat"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterSkill" ADD CONSTRAINT "CharacterSkill_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterSpell" ADD CONSTRAINT "CharacterSpell_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterSpell" ADD CONSTRAINT "CharacterSpell_spellId_fkey" FOREIGN KEY ("spellId") REFERENCES "Spell"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterItem" ADD CONSTRAINT "CharacterItem_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterItem" ADD CONSTRAINT "CharacterItem_equipmentId_fkey" FOREIGN KEY ("equipmentId") REFERENCES "Equipment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterCondition" ADD CONSTRAINT "CharacterCondition_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CharacterResource" ADD CONSTRAINT "CharacterResource_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleMap" ADD CONSTRAINT "BattleMap_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Combatant" ADD CONSTRAINT "Combatant_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CombatantAbility" ADD CONSTRAINT "CombatantAbility_combatantId_fkey" FOREIGN KEY ("combatantId") REFERENCES "Combatant"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleSession" ADD CONSTRAINT "BattleSession_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleSession" ADD CONSTRAINT "BattleSession_mapId_fkey" FOREIGN KEY ("mapId") REFERENCES "BattleMap"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleToken" ADD CONSTRAINT "BattleToken_battleSessionId_fkey" FOREIGN KEY ("battleSessionId") REFERENCES "BattleSession"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleToken" ADD CONSTRAINT "BattleToken_combatantId_fkey" FOREIGN KEY ("combatantId") REFERENCES "Combatant"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BattleToken" ADD CONSTRAINT "BattleToken_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Document" ADD CONSTRAINT "Document_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Document" ADD CONSTRAINT "Document_uploadedBy_fkey" FOREIGN KEY ("uploadedBy") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "DocumentAccess" ADD CONSTRAINT "DocumentAccess_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "Document"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "DocumentAccess" ADD CONSTRAINT "DocumentAccess_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "DocumentAccess" ADD CONSTRAINT "DocumentAccess_characterId_fkey" FOREIGN KEY ("characterId") REFERENCES "Character"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Highlight" ADD CONSTRAINT "Highlight_documentId_fkey" FOREIGN KEY ("documentId") REFERENCES "Document"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Highlight" ADD CONSTRAINT "Highlight_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Note" ADD CONSTRAINT "Note_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Note" ADD CONSTRAINT "Note_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "Campaign"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "NoteShare" ADD CONSTRAINT "NoteShare_noteId_fkey" FOREIGN KEY ("noteId") REFERENCES "Note"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "NoteShare" ADD CONSTRAINT "NoteShare_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|