backend project

This commit is contained in:
Sone
2025-11-02 10:05:02 +01:00
parent e4199f65d8
commit deb622b796
62 changed files with 12475 additions and 0 deletions
@@ -0,0 +1,110 @@
-- CreateEnum
CREATE TYPE "Athena"."TodoStatus" AS ENUM ('NEW', 'IN_PROGRESS', 'COMPLETED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "Athena"."Role" AS ENUM ('MANAGER', 'ADMIN', 'USER');
-- CreateEnum
CREATE TYPE "Athena"."RiskStatus" AS ENUM ('LOW_RISK', 'MEDIUM_RISK', 'HIGH_RISK', 'NO_RISK');
-- CreateEnum
CREATE TYPE "Athena"."PriorityStatus" AS ENUM ('LOW_PRIORITY', 'MEDIUM_PRIORITY', 'HIGH_PRIORITY');
-- CreateTable
CREATE TABLE "Athena"."User" (
"id" TEXT NOT NULL,
"firstName" TEXT NOT NULL,
"lastName" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
"riskStatus" "Athena"."RiskStatus" NOT NULL,
"imageUrl" TEXT,
"title" TEXT NOT NULL,
"isLocked" BOOLEAN NOT NULL DEFAULT false,
"isActivated" BOOLEAN NOT NULL DEFAULT false,
"role" "Athena"."Role" NOT NULL,
"managerId" TEXT,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Athena"."Todo" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"task" TEXT NOT NULL,
"status" "Athena"."TodoStatus" NOT NULL,
"priority" "Athena"."PriorityStatus" NOT NULL,
"dueDate" TIMESTAMP(3) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdById" TEXT NOT NULL,
CONSTRAINT "Todo_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Athena"."Comment" (
"id" TEXT NOT NULL,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"todoId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
CONSTRAINT "Comment_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Athena"."PasswordResetToken" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"tokenHash" TEXT NOT NULL,
"expiresAt" TIMESTAMP(3) NOT NULL,
"usedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "PasswordResetToken_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Athena"."_AssignedTodos" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_AssignedTodos_AB_pkey" PRIMARY KEY ("A","B")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "Athena"."User"("email");
-- CreateIndex
CREATE UNIQUE INDEX "PasswordResetToken_tokenHash_key" ON "Athena"."PasswordResetToken"("tokenHash");
-- CreateIndex
CREATE INDEX "PasswordResetToken_userId_idx" ON "Athena"."PasswordResetToken"("userId");
-- CreateIndex
CREATE INDEX "PasswordResetToken_expiresAt_idx" ON "Athena"."PasswordResetToken"("expiresAt");
-- CreateIndex
CREATE INDEX "_AssignedTodos_B_index" ON "Athena"."_AssignedTodos"("B");
-- AddForeignKey
ALTER TABLE "Athena"."User" ADD CONSTRAINT "User_managerId_fkey" FOREIGN KEY ("managerId") REFERENCES "Athena"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."Todo" ADD CONSTRAINT "Todo_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "Athena"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."Comment" ADD CONSTRAINT "Comment_todoId_fkey" FOREIGN KEY ("todoId") REFERENCES "Athena"."Todo"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."Comment" ADD CONSTRAINT "Comment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "Athena"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."PasswordResetToken" ADD CONSTRAINT "PasswordResetToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "Athena"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."_AssignedTodos" ADD CONSTRAINT "_AssignedTodos_A_fkey" FOREIGN KEY ("A") REFERENCES "Athena"."Todo"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Athena"."_AssignedTodos" ADD CONSTRAINT "_AssignedTodos_B_fkey" FOREIGN KEY ("B") REFERENCES "Athena"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,4 @@
-- AlterTable
ALTER TABLE "Athena"."User" ADD COLUMN "department" TEXT,
ADD COLUMN "middleName" TEXT,
ADD COLUMN "phoneNumber" TEXT;
@@ -0,0 +1,14 @@
/*
Warnings:
- The values [MEDIUM_RISK] on the enum `RiskStatus` will be removed. If these variants are still used in the database, this will fail.
*/
-- AlterEnum
BEGIN;
CREATE TYPE "Athena"."RiskStatus_new" AS ENUM ('LOW_RISK', 'MODERATE_RISK', 'HIGH_RISK', 'NO_RISK');
ALTER TABLE "Athena"."User" ALTER COLUMN "riskStatus" TYPE "Athena"."RiskStatus_new" USING ("riskStatus"::text::"Athena"."RiskStatus_new");
ALTER TYPE "Athena"."RiskStatus" RENAME TO "RiskStatus_old";
ALTER TYPE "Athena"."RiskStatus_new" RENAME TO "RiskStatus";
DROP TYPE "Athena"."RiskStatus_old";
COMMIT;
@@ -0,0 +1,14 @@
/*
Warnings:
- The values [MEDIUM_PRIORITY] on the enum `PriorityStatus` will be removed. If these variants are still used in the database, this will fail.
*/
-- AlterEnum
BEGIN;
CREATE TYPE "Athena"."PriorityStatus_new" AS ENUM ('LOW_PRIORITY', 'MODERATE_PRIORITY', 'HIGH_PRIORITY');
ALTER TABLE "Athena"."Todo" ALTER COLUMN "priority" TYPE "Athena"."PriorityStatus_new" USING ("priority"::text::"Athena"."PriorityStatus_new");
ALTER TYPE "Athena"."PriorityStatus" RENAME TO "PriorityStatus_old";
ALTER TYPE "Athena"."PriorityStatus_new" RENAME TO "PriorityStatus";
DROP TYPE "Athena"."PriorityStatus_old";
COMMIT;
@@ -0,0 +1,5 @@
-- CreateEnum
CREATE TYPE "Athena"."SecurityType" AS ENUM ('BASIC', 'ASSISTANCE', 'MAXIMUM');
-- AlterTable
ALTER TABLE "Athena"."User" ADD COLUMN "securityType" "Athena"."SecurityType" NOT NULL DEFAULT 'BASIC';
+3
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"
+102
View File
@@ -0,0 +1,102 @@
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(uuid())
firstName String
middleName String?
lastName String
email String @unique
phoneNumber String?
department String?
password String
riskStatus RiskStatus
imageUrl String?
title String
isLocked Boolean @default(false)
isActivated Boolean @default(false)
role Role
managerId String?
comments Comment[]
PasswordResetToken PasswordResetToken[]
createdTodos Todo[] @relation("CreatedTodos")
manager User? @relation("ManagerMembers", fields: [managerId], references: [id])
teamMembers User[] @relation("ManagerMembers")
assignedTodos Todo[] @relation("AssignedTodos")
securityType SecurityType @default(BASIC)
}
model Todo {
id String @id @default(cuid())
title String
task String
status TodoStatus
priority PriorityStatus
dueDate DateTime
createdAt DateTime @default(now())
createdById String
comments Comment[]
createdBy User @relation("CreatedTodos", fields: [createdById], references: [id])
assignees User[] @relation("AssignedTodos")
}
model Comment {
id String @id @default(cuid())
content String
createdAt DateTime @default(now())
todoId String
userId String
todo Todo @relation(fields: [todoId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model PasswordResetToken {
id String @id @default(cuid())
userId String
tokenHash String @unique
expiresAt DateTime
usedAt DateTime?
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([userId])
@@index([expiresAt])
}
enum TodoStatus {
NEW
IN_PROGRESS
COMPLETED
ARCHIVED
}
enum Role {
MANAGER
ADMIN
USER
}
enum RiskStatus {
LOW_RISK
MODERATE_RISK
HIGH_RISK
NO_RISK
}
enum PriorityStatus {
LOW_PRIORITY
MODERATE_PRIORITY
HIGH_PRIORITY
}
enum SecurityType {
BASIC
ASSISTANCE
MAXIMUM
}