157 lines
4.7 KiB
SQL
157 lines
4.7 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "Role" AS ENUM ('OWNER', 'EDITOR', 'VIEWER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Gender" AS ENUM ('MALE', 'FEMALE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "Action" AS ENUM ('CREATE', 'UPDATE', 'DELETE', 'IMPORT', 'EXPORT');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "EntityType" AS ENUM ('MEMBER', 'PHOTO', 'STORY', 'SETTINGS');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"name" TEXT,
|
|
"password" TEXT NOT NULL,
|
|
"avatar" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FamilyTree" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"rootMemberId" TEXT,
|
|
"ownerId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "FamilyTree_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TreeCollaborator" (
|
|
"id" TEXT NOT NULL,
|
|
"treeId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" "Role" NOT NULL DEFAULT 'VIEWER',
|
|
"invitedBy" TEXT NOT NULL,
|
|
"invitedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "TreeCollaborator_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "FamilyMember" (
|
|
"id" TEXT NOT NULL,
|
|
"treeId" TEXT NOT NULL,
|
|
"surname" TEXT NOT NULL,
|
|
"givenName" TEXT NOT NULL,
|
|
"fullName" TEXT NOT NULL,
|
|
"gender" "Gender" NOT NULL,
|
|
"generation" INTEGER NOT NULL,
|
|
"generationName" TEXT,
|
|
"courtesyName" TEXT,
|
|
"artName" TEXT,
|
|
"posthumousName" TEXT,
|
|
"rank" INTEGER,
|
|
"birthDate" TEXT,
|
|
"deathDate" TEXT,
|
|
"isLunarDate" BOOLEAN NOT NULL DEFAULT false,
|
|
"ancestralHome" TEXT,
|
|
"birthPlace" TEXT,
|
|
"burialPlace" TEXT,
|
|
"phone" TEXT,
|
|
"telephone" TEXT,
|
|
"email" TEXT,
|
|
"address" TEXT,
|
|
"fatherId" TEXT,
|
|
"motherId" TEXT,
|
|
"spouseIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"childrenIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"spouseFatherName" TEXT,
|
|
"spouseMotherName" TEXT,
|
|
"bio" TEXT,
|
|
"tags" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"avatarUrl" TEXT,
|
|
"avatarImageId" TEXT,
|
|
"photoIds" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "FamilyMember_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ActivityLog" (
|
|
"id" TEXT NOT NULL,
|
|
"treeId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"action" "Action" NOT NULL,
|
|
"entityType" "EntityType" NOT NULL,
|
|
"entityId" TEXT,
|
|
"entityName" TEXT,
|
|
"changes" JSONB,
|
|
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "ActivityLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FamilyTree_ownerId_idx" ON "FamilyTree"("ownerId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TreeCollaborator_treeId_idx" ON "TreeCollaborator"("treeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TreeCollaborator_userId_idx" ON "TreeCollaborator"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TreeCollaborator_treeId_userId_key" ON "TreeCollaborator"("treeId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FamilyMember_treeId_idx" ON "FamilyMember"("treeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FamilyMember_fatherId_idx" ON "FamilyMember"("fatherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "FamilyMember_motherId_idx" ON "FamilyMember"("motherId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ActivityLog_treeId_idx" ON "ActivityLog"("treeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ActivityLog_userId_idx" ON "ActivityLog"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ActivityLog_timestamp_idx" ON "ActivityLog"("timestamp");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FamilyTree" ADD CONSTRAINT "FamilyTree_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TreeCollaborator" ADD CONSTRAINT "TreeCollaborator_treeId_fkey" FOREIGN KEY ("treeId") REFERENCES "FamilyTree"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TreeCollaborator" ADD CONSTRAINT "TreeCollaborator_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "FamilyMember" ADD CONSTRAINT "FamilyMember_treeId_fkey" FOREIGN KEY ("treeId") REFERENCES "FamilyTree"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ActivityLog" ADD CONSTRAINT "ActivityLog_treeId_fkey" FOREIGN KEY ("treeId") REFERENCES "FamilyTree"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ActivityLog" ADD CONSTRAINT "ActivityLog_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|