90 lines
3.2 KiB
SQL
90 lines
3.2 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "TicketStatus" AS ENUM ('open', 'in_progress', 'waiting', 'resolved', 'closed');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "TicketPriority" AS ENUM ('low', 'normal', 'high', 'urgent');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Ticket" (
|
|
"id" TEXT NOT NULL,
|
|
"organizationId" TEXT NOT NULL,
|
|
"number" TEXT NOT NULL,
|
|
"subject" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"status" "TicketStatus" NOT NULL DEFAULT 'open',
|
|
"priority" "TicketPriority" NOT NULL DEFAULT 'normal',
|
|
"personId" TEXT,
|
|
"companyId" TEXT,
|
|
"dealId" TEXT,
|
|
"assigneeId" TEXT,
|
|
"reporterId" TEXT,
|
|
"resolvedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Ticket_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TicketMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"ticketId" TEXT NOT NULL,
|
|
"authorId" TEXT,
|
|
"body" TEXT NOT NULL,
|
|
"isInternal" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "TicketMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_organizationId_status_updatedAt_idx" ON "Ticket"("organizationId", "status", "updatedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_assigneeId_idx" ON "Ticket"("assigneeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_reporterId_idx" ON "Ticket"("reporterId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_personId_idx" ON "Ticket"("personId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_companyId_idx" ON "Ticket"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Ticket_dealId_idx" ON "Ticket"("dealId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Ticket_organizationId_number_key" ON "Ticket"("organizationId", "number");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TicketMessage_ticketId_createdAt_idx" ON "TicketMessage"("ticketId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TicketMessage_authorId_idx" ON "TicketMessage"("authorId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_personId_fkey" FOREIGN KEY ("personId") REFERENCES "Person"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_dealId_fkey" FOREIGN KEY ("dealId") REFERENCES "Deal"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_reporterId_fkey" FOREIGN KEY ("reporterId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TicketMessage" ADD CONSTRAINT "TicketMessage_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "Ticket"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "TicketMessage" ADD CONSTRAINT "TicketMessage_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|