diff --git a/prisma/migrations/20260325214700_initial_schema/migration.sql b/prisma/migrations/20260325214700_initial_schema/migration.sql new file mode 100644 index 0000000..fcd5f07 --- /dev/null +++ b/prisma/migrations/20260325214700_initial_schema/migration.sql @@ -0,0 +1,200 @@ +-- CreateEnum +CREATE TYPE "Role" AS ENUM ('CLIENT', 'AGENT', 'ADMIN'); + +-- CreateEnum +CREATE TYPE "ChatStatus" AS ENUM ('OFFLINE', 'ONLINE', 'BUSY', 'AWAY'); + +-- CreateEnum +CREATE TYPE "TicketStatus" AS ENUM ('TRIAGE', 'OPENED', 'ESCALATED', 'CLOSED', 'RESOLVED'); + +-- CreateEnum +CREATE TYPE "TicketPriority" AS ENUM ('LOW', 'MEDIUM', 'HIGH', 'HIGHEST'); + +-- CreateEnum +CREATE TYPE "TicketAction" AS ENUM ('ESCALATION', 'RETURN'); + +-- CreateTable +CREATE TABLE "User" ( + "usr_id" SERIAL NOT NULL, + "usr_company" INTEGER NOT NULL, + "usr_phone" TEXT, + "usr_email" TEXT NOT NULL, + "usr_hashedPassword" TEXT NOT NULL, + "usr_name" TEXT NOT NULL, + "usr_role" "Role" NOT NULL DEFAULT 'CLIENT', + "usr_chatStatus" "ChatStatus" NOT NULL DEFAULT 'OFFLINE', + "usr_lastSeen" TIMESTAMP(3), + "usr_isActive" BOOLEAN NOT NULL DEFAULT true, + "usr_resetToken" TEXT, + "usr_resetTknExpires" TIMESTAMP(3), + "usr_createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "usr_updatedAt" TIMESTAMP(3) NOT NULL, + "usr_deletedAt" TIMESTAMP(3), + "usr_lastLogin" TIMESTAMP(3), + + CONSTRAINT "User_pkey" PRIMARY KEY ("usr_id") +); + +-- CreateTable +CREATE TABLE "Company" ( + "com_id" SERIAL NOT NULL, + "com_cnpj" TEXT NOT NULL, + "com_name" TEXT NOT NULL, + "com_contactName" TEXT, + "com_contactEmail" TEXT, + "com_accessCode" TEXT NOT NULL, + "com_isActive" BOOLEAN NOT NULL DEFAULT true, + "com_updatedAt" TIMESTAMP(3) NOT NULL, + "com_deletedAt" TIMESTAMP(3), + + CONSTRAINT "Company_pkey" PRIMARY KEY ("com_id") +); + +-- CreateTable +CREATE TABLE "Agent" ( + "agt_id" INTEGER NOT NULL, + "agt_supportLevel" TEXT NOT NULL, + "agt_canAnswer" BOOLEAN NOT NULL, + + CONSTRAINT "Agent_pkey" PRIMARY KEY ("agt_id") +); + +-- CreateTable +CREATE TABLE "SupportGroup" ( + "spg_id" SERIAL NOT NULL, + "spg_name" TEXT NOT NULL, + "spg_description" TEXT NOT NULL, + "spg_isActive" BOOLEAN NOT NULL DEFAULT true, + "spg_createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "spg_updatedAt" TIMESTAMP(3) NOT NULL, + "spg_deletedAt" TIMESTAMP(3), + + CONSTRAINT "SupportGroup_pkey" PRIMARY KEY ("spg_id") +); + +-- CreateTable +CREATE TABLE "AgentGroup" ( + "agg_agent" INTEGER NOT NULL, + "agg_supportGroup" INTEGER NOT NULL, + "agg_assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "AgentGroup_pkey" PRIMARY KEY ("agg_agent","agg_supportGroup") +); + +-- CreateTable +CREATE TABLE "Ticket" ( + "tkt_id" SERIAL NOT NULL, + "tkt_companyId" INTEGER NOT NULL, + "tkt_clientId" INTEGER NOT NULL, + "tkt_agentId" INTEGER, + "tkt_supportGroupId" INTEGER, + "tkt_subjectId" INTEGER, + "tkt_status" "TicketStatus" NOT NULL DEFAULT 'TRIAGE', + "tkt_priority" "TicketPriority" DEFAULT 'MEDIUM', + "tkt_ratingScore" INTEGER, + "tkt_ratingComment" TEXT, + "tkt_createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "tkt_updatedAt" TIMESTAMP(3) NOT NULL, + "tkt_closedAt" TIMESTAMP(3), + + CONSTRAINT "Ticket_pkey" PRIMARY KEY ("tkt_id") +); + +-- CreateTable +CREATE TABLE "TicketHistory" ( + "tkh_id" SERIAL NOT NULL, + "tkh_fromStatus" "TicketStatus", + "tkh_toStatus" "TicketStatus", + "tkh_fromGroupId" INTEGER, + "tkh_toGroupId" INTEGER, + "tkh_fromAgentId" INTEGER, + "tkh_toAgentId" INTEGER, + "tkh_actionType" "TicketAction" NOT NULL, + "tkh_createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "TicketHistory_pkey" PRIMARY KEY ("tkh_id") +); + +-- CreateTable +CREATE TABLE "TicketSubject" ( + "tks_id" SERIAL NOT NULL, + "tks_name" TEXT NOT NULL, + "tks_description" TEXT NOT NULL, + "tks_isActive" BOOLEAN NOT NULL, + "tks_createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "tks_updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "TicketSubject_pkey" PRIMARY KEY ("tks_id") +); + +-- CreateTable +CREATE TABLE "TriageRule" ( + "nod_id" SERIAL NOT NULL, + "nod_parentId" INTEGER, + "nod_question" TEXT, + "nod_answerTrigger" TEXT, + "nod_isLeaf" BOOLEAN NOT NULL DEFAULT false, + "nod_targetGroupId" INTEGER, + + CONSTRAINT "TriageRule_pkey" PRIMARY KEY ("nod_id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_usr_phone_key" ON "User"("usr_phone"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_usr_email_key" ON "User"("usr_email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Company_com_cnpj_key" ON "Company"("com_cnpj"); + +-- CreateIndex +CREATE UNIQUE INDEX "Company_com_contactEmail_key" ON "Company"("com_contactEmail"); + +-- CreateIndex +CREATE UNIQUE INDEX "Company_com_accessCode_key" ON "Company"("com_accessCode"); + +-- AddForeignKey +ALTER TABLE "User" ADD CONSTRAINT "User_usr_company_fkey" FOREIGN KEY ("usr_company") REFERENCES "Company"("com_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Agent" ADD CONSTRAINT "Agent_agt_id_fkey" FOREIGN KEY ("agt_id") REFERENCES "User"("usr_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AgentGroup" ADD CONSTRAINT "AgentGroup_agg_agent_fkey" FOREIGN KEY ("agg_agent") REFERENCES "Agent"("agt_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AgentGroup" ADD CONSTRAINT "AgentGroup_agg_supportGroup_fkey" FOREIGN KEY ("agg_supportGroup") REFERENCES "SupportGroup"("spg_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_clientId_fkey" FOREIGN KEY ("tkt_clientId") REFERENCES "User"("usr_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_agentId_fkey" FOREIGN KEY ("tkt_agentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_companyId_fkey" FOREIGN KEY ("tkt_companyId") REFERENCES "Company"("com_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_supportGroupId_fkey" FOREIGN KEY ("tkt_supportGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_subjectId_fkey" FOREIGN KEY ("tkt_subjectId") REFERENCES "TicketSubject"("tks_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_fromGroupId_fkey" FOREIGN KEY ("tkh_fromGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_toGroupId_fkey" FOREIGN KEY ("tkh_toGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_fromAgentId_fkey" FOREIGN KEY ("tkh_fromAgentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_toAgentId_fkey" FOREIGN KEY ("tkh_toAgentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TriageRule" ADD CONSTRAINT "TriageRule_nod_parentId_fkey" FOREIGN KEY ("nod_parentId") REFERENCES "TriageRule"("nod_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TriageRule" ADD CONSTRAINT "TriageRule_nod_targetGroupId_fkey" FOREIGN KEY ("nod_targetGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/20260326050307_uuid_refactor/migration.sql b/prisma/migrations/20260326050307_uuid_refactor/migration.sql new file mode 100644 index 0000000..3c7efeb --- /dev/null +++ b/prisma/migrations/20260326050307_uuid_refactor/migration.sql @@ -0,0 +1,190 @@ +/* + Warnings: + + - The primary key for the `Agent` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `AgentGroup` table will be changed. If it partially fails, the table could be left without primary key constraint. + - You are about to drop the column `agg_agent` on the `AgentGroup` table. All the data in the column will be lost. + - You are about to drop the column `agg_supportGroup` on the `AgentGroup` table. All the data in the column will be lost. + - The primary key for the `Company` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `SupportGroup` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `Ticket` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `TicketHistory` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `TicketSubject` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `TriageRule` table will be changed. If it partially fails, the table could be left without primary key constraint. + - The primary key for the `User` table will be changed. If it partially fails, the table could be left without primary key constraint. + - You are about to drop the column `usr_company` on the `User` table. All the data in the column will be lost. + - Added the required column `agg_agentId` to the `AgentGroup` table without a default value. This is not possible if the table is not empty. + - Added the required column `agg_supportGroupId` to the `AgentGroup` table without a default value. This is not possible if the table is not empty. + - Added the required column `tkh_ticketId` to the `TicketHistory` table without a default value. This is not possible if the table is not empty. + - Added the required column `usr_companyId` to the `User` table without a default value. This is not possible if the table is not empty. + +*/ +-- DropForeignKey +ALTER TABLE "Agent" DROP CONSTRAINT "Agent_agt_id_fkey"; + +-- DropForeignKey +ALTER TABLE "AgentGroup" DROP CONSTRAINT "AgentGroup_agg_agent_fkey"; + +-- DropForeignKey +ALTER TABLE "AgentGroup" DROP CONSTRAINT "AgentGroup_agg_supportGroup_fkey"; + +-- DropForeignKey +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_tkt_agentId_fkey"; + +-- DropForeignKey +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_tkt_clientId_fkey"; + +-- DropForeignKey +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_tkt_companyId_fkey"; + +-- DropForeignKey +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_tkt_subjectId_fkey"; + +-- DropForeignKey +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_tkt_supportGroupId_fkey"; + +-- DropForeignKey +ALTER TABLE "TicketHistory" DROP CONSTRAINT "TicketHistory_tkh_fromAgentId_fkey"; + +-- DropForeignKey +ALTER TABLE "TicketHistory" DROP CONSTRAINT "TicketHistory_tkh_fromGroupId_fkey"; + +-- DropForeignKey +ALTER TABLE "TicketHistory" DROP CONSTRAINT "TicketHistory_tkh_toAgentId_fkey"; + +-- DropForeignKey +ALTER TABLE "TicketHistory" DROP CONSTRAINT "TicketHistory_tkh_toGroupId_fkey"; + +-- DropForeignKey +ALTER TABLE "TriageRule" DROP CONSTRAINT "TriageRule_nod_parentId_fkey"; + +-- DropForeignKey +ALTER TABLE "TriageRule" DROP CONSTRAINT "TriageRule_nod_targetGroupId_fkey"; + +-- DropForeignKey +ALTER TABLE "User" DROP CONSTRAINT "User_usr_company_fkey"; + +-- AlterTable +ALTER TABLE "Agent" DROP CONSTRAINT "Agent_pkey", +ALTER COLUMN "agt_id" SET DATA TYPE TEXT, +ADD CONSTRAINT "Agent_pkey" PRIMARY KEY ("agt_id"); + +-- AlterTable +ALTER TABLE "AgentGroup" DROP CONSTRAINT "AgentGroup_pkey", +DROP COLUMN "agg_agent", +DROP COLUMN "agg_supportGroup", +ADD COLUMN "agg_agentId" TEXT NOT NULL, +ADD COLUMN "agg_supportGroupId" TEXT NOT NULL, +ADD CONSTRAINT "AgentGroup_pkey" PRIMARY KEY ("agg_agentId", "agg_supportGroupId"); + +-- AlterTable +ALTER TABLE "Company" DROP CONSTRAINT "Company_pkey", +ALTER COLUMN "com_id" DROP DEFAULT, +ALTER COLUMN "com_id" SET DATA TYPE TEXT, +ADD CONSTRAINT "Company_pkey" PRIMARY KEY ("com_id"); +DROP SEQUENCE "Company_com_id_seq"; + +-- AlterTable +ALTER TABLE "SupportGroup" DROP CONSTRAINT "SupportGroup_pkey", +ALTER COLUMN "spg_id" DROP DEFAULT, +ALTER COLUMN "spg_id" SET DATA TYPE TEXT, +ADD CONSTRAINT "SupportGroup_pkey" PRIMARY KEY ("spg_id"); +DROP SEQUENCE "SupportGroup_spg_id_seq"; + +-- AlterTable +ALTER TABLE "Ticket" DROP CONSTRAINT "Ticket_pkey", +ALTER COLUMN "tkt_id" DROP DEFAULT, +ALTER COLUMN "tkt_id" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_companyId" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_clientId" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_agentId" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_supportGroupId" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_subjectId" SET DATA TYPE TEXT, +ALTER COLUMN "tkt_priority" DROP DEFAULT, +ADD CONSTRAINT "Ticket_pkey" PRIMARY KEY ("tkt_id"); +DROP SEQUENCE "Ticket_tkt_id_seq"; + +-- AlterTable +ALTER TABLE "TicketHistory" DROP CONSTRAINT "TicketHistory_pkey", +ADD COLUMN "tkh_ticketId" TEXT NOT NULL, +ALTER COLUMN "tkh_id" DROP DEFAULT, +ALTER COLUMN "tkh_id" SET DATA TYPE TEXT, +ALTER COLUMN "tkh_fromGroupId" SET DATA TYPE TEXT, +ALTER COLUMN "tkh_toGroupId" SET DATA TYPE TEXT, +ALTER COLUMN "tkh_fromAgentId" SET DATA TYPE TEXT, +ALTER COLUMN "tkh_toAgentId" SET DATA TYPE TEXT, +ADD CONSTRAINT "TicketHistory_pkey" PRIMARY KEY ("tkh_id"); +DROP SEQUENCE "TicketHistory_tkh_id_seq"; + +-- AlterTable +ALTER TABLE "TicketSubject" DROP CONSTRAINT "TicketSubject_pkey", +ALTER COLUMN "tks_id" DROP DEFAULT, +ALTER COLUMN "tks_id" SET DATA TYPE TEXT, +ADD CONSTRAINT "TicketSubject_pkey" PRIMARY KEY ("tks_id"); +DROP SEQUENCE "TicketSubject_tks_id_seq"; + +-- AlterTable +ALTER TABLE "TriageRule" DROP CONSTRAINT "TriageRule_pkey", +ALTER COLUMN "nod_id" DROP DEFAULT, +ALTER COLUMN "nod_id" SET DATA TYPE TEXT, +ALTER COLUMN "nod_parentId" SET DATA TYPE TEXT, +ALTER COLUMN "nod_targetGroupId" SET DATA TYPE TEXT, +ADD CONSTRAINT "TriageRule_pkey" PRIMARY KEY ("nod_id"); +DROP SEQUENCE "TriageRule_nod_id_seq"; + +-- AlterTable +ALTER TABLE "User" DROP CONSTRAINT "User_pkey", +DROP COLUMN "usr_company", +ADD COLUMN "usr_companyId" TEXT NOT NULL, +ALTER COLUMN "usr_id" DROP DEFAULT, +ALTER COLUMN "usr_id" SET DATA TYPE TEXT, +ADD CONSTRAINT "User_pkey" PRIMARY KEY ("usr_id"); +DROP SEQUENCE "User_usr_id_seq"; + +-- AddForeignKey +ALTER TABLE "User" ADD CONSTRAINT "User_usr_companyId_fkey" FOREIGN KEY ("usr_companyId") REFERENCES "Company"("com_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Agent" ADD CONSTRAINT "Agent_agt_id_fkey" FOREIGN KEY ("agt_id") REFERENCES "User"("usr_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AgentGroup" ADD CONSTRAINT "AgentGroup_agg_agentId_fkey" FOREIGN KEY ("agg_agentId") REFERENCES "Agent"("agt_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "AgentGroup" ADD CONSTRAINT "AgentGroup_agg_supportGroupId_fkey" FOREIGN KEY ("agg_supportGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_clientId_fkey" FOREIGN KEY ("tkt_clientId") REFERENCES "User"("usr_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_agentId_fkey" FOREIGN KEY ("tkt_agentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_companyId_fkey" FOREIGN KEY ("tkt_companyId") REFERENCES "Company"("com_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_supportGroupId_fkey" FOREIGN KEY ("tkt_supportGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_tkt_subjectId_fkey" FOREIGN KEY ("tkt_subjectId") REFERENCES "TicketSubject"("tks_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_ticketId_fkey" FOREIGN KEY ("tkh_ticketId") REFERENCES "Ticket"("tkt_id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_fromGroupId_fkey" FOREIGN KEY ("tkh_fromGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_toGroupId_fkey" FOREIGN KEY ("tkh_toGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_fromAgentId_fkey" FOREIGN KEY ("tkh_fromAgentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TicketHistory" ADD CONSTRAINT "TicketHistory_tkh_toAgentId_fkey" FOREIGN KEY ("tkh_toAgentId") REFERENCES "Agent"("agt_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TriageRule" ADD CONSTRAINT "TriageRule_nod_parentId_fkey" FOREIGN KEY ("nod_parentId") REFERENCES "TriageRule"("nod_id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "TriageRule" ADD CONSTRAINT "TriageRule_nod_targetGroupId_fkey" FOREIGN KEY ("nod_targetGroupId") REFERENCES "SupportGroup"("spg_id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..044d57c --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -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" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0a428ab..5e26712 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,8 +1,191 @@ generator client { - provider = "prisma-client" - output = "../generated/prisma" + provider = "prisma-client" + output = "../generated/prisma" } datasource db { - provider = "postgresql" + provider = "postgresql" +} + +enum Role { + CLIENT + AGENT + ADMIN +} + +enum ChatStatus { + OFFLINE + ONLINE + BUSY + AWAY +} + +enum TicketStatus { + TRIAGE + OPENED + ESCALATED + CLOSED + RESOLVED +} + +enum TicketPriority { + LOW + MEDIUM + HIGH + HIGHEST +} + +enum TicketAction { + ESCALATION + RETURN +} + + + + + +model User { + usr_id String @id @default(uuid()) + usr_companyId String + usr_phone String? @unique + usr_email String @unique + usr_hashedPassword String + usr_name String + usr_role Role @default(CLIENT) + usr_chatStatus ChatStatus @default(OFFLINE) + usr_lastSeen DateTime? + usr_isActive Boolean @default(true) + usr_resetToken String? + usr_resetTknExpires DateTime? + usr_createdAt DateTime @default(now()) + usr_updatedAt DateTime @updatedAt + usr_deletedAt DateTime? + usr_lastLogin DateTime? + + company Company @relation(fields: [usr_companyId], references: [com_id]) + tickets Ticket[] @relation("ClientTicket") + agent Agent? +} + +model Company { + com_id String @id @default(uuid()) + com_cnpj String @unique + com_name String + com_contactName String? + com_contactEmail String? @unique + com_accessCode String @unique + com_isActive Boolean @default(true) + com_updatedAt DateTime @updatedAt + com_deletedAt DateTime? + + users User[] + tickets Ticket[] +} + +model Agent { + agt_id String @id + agt_supportLevel String + agt_canAnswer Boolean + + user User @relation(fields: [agt_id], references: [usr_id]) + agentGroups AgentGroup[] + tickets Ticket[] @relation("AgentTicket") + historyFrom TicketHistory[] @relation("FromAgent") + historyTo TicketHistory[] @relation("ToAgent") +} + +model SupportGroup { + spg_id String @id @default(uuid()) + spg_name String + spg_description String + spg_isActive Boolean @default(true) + spg_createdAt DateTime @default(now()) + spg_updatedAt DateTime @updatedAt + spg_deletedAt DateTime? + + agentGroups AgentGroup[] + tickets Ticket[] + historyFrom TicketHistory[] @relation("FromGroup") + historyTo TicketHistory[] @relation("ToGroup") + triageRules TriageRule[] +} + +model AgentGroup { + agg_agentId String + agg_supportGroupId String + @@id([agg_agentId, agg_supportGroupId]) + agg_assignedAt DateTime @default(now()) + + agent Agent @relation(fields: [agg_agentId], references: [agt_id]) + supportGroup SupportGroup @relation(fields: [agg_supportGroupId], references: [spg_id]) +} + + + + + +model Ticket { + tkt_id String @id @default(uuid()) + tkt_companyId String + tkt_clientId String + tkt_agentId String? + tkt_supportGroupId String? + tkt_subjectId String? + tkt_status TicketStatus @default(TRIAGE) + tkt_priority TicketPriority? + tkt_ratingScore Int? + tkt_ratingComment String? + tkt_createdAt DateTime @default(now()) + tkt_updatedAt DateTime @updatedAt + tkt_closedAt DateTime? + + client User @relation("ClientTicket", fields: [tkt_clientId], references: [usr_id]) + agent Agent? @relation("AgentTicket", fields: [tkt_agentId], references: [agt_id]) + company Company @relation(fields: [tkt_companyId], references: [com_id]) + supportGroup SupportGroup? @relation(fields: [tkt_supportGroupId], references: [spg_id]) + subject TicketSubject? @relation(fields: [tkt_subjectId], references: [tks_id]) + ticketHistories TicketHistory[] +} + +model TicketHistory { + tkh_id String @id @default(uuid()) + tkh_ticketId String + tkh_fromStatus TicketStatus? + tkh_toStatus TicketStatus? + tkh_fromGroupId String? + tkh_toGroupId String? + tkh_fromAgentId String? + tkh_toAgentId String? + tkh_actionType TicketAction + tkh_createdAt DateTime @default(now()) + + ticketHistory Ticket @relation(fields: [tkh_ticketId], references: [tkt_id]) + fromSupportGroup SupportGroup? @relation("FromGroup", fields: [tkh_fromGroupId], references: [spg_id]) + toSupportGroup SupportGroup? @relation("ToGroup", fields: [tkh_toGroupId], references: [spg_id]) + fromAgent Agent? @relation("FromAgent", fields: [tkh_fromAgentId], references: [agt_id]) + toAgent Agent? @relation("ToAgent", fields: [tkh_toAgentId], references: [agt_id]) +} + +model TicketSubject { + tks_id String @id @default(uuid()) + tks_name String + tks_description String + tks_isActive Boolean + tks_createdAt DateTime @default(now()) + tks_updatedAt DateTime @updatedAt + + tickets Ticket[] +} + +model TriageRule { + nod_id String @id @default(uuid()) + nod_parentId String? + nod_question String? + nod_answerTrigger String? + nod_isLeaf Boolean @default(false) + nod_targetGroupId String? + + parent TriageRule? @relation("TriageNode", fields: [nod_parentId], references: [nod_id]) + children TriageRule[] @relation("TriageNode") + supportGroup SupportGroup? @relation(fields: [nod_targetGroupId], references: [spg_id]) } \ No newline at end of file