backend project
This commit is contained in:
@@ -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';
|
||||
@@ -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"
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user