121 lines
5.1 KiB
SQL
121 lines
5.1 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Company" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"tenantId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"cnpj" TEXT,
|
|
"domain" TEXT,
|
|
"phone" TEXT,
|
|
"description" TEXT,
|
|
"address" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuthInvite" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"email" TEXT NOT NULL,
|
|
"name" TEXT,
|
|
"role" TEXT NOT NULL DEFAULT 'agent',
|
|
"tenantId" TEXT NOT NULL,
|
|
"token" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"expiresAt" DATETIME NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
"createdById" TEXT,
|
|
"acceptedAt" DATETIME,
|
|
"acceptedById" TEXT,
|
|
"revokedAt" DATETIME,
|
|
"revokedById" TEXT,
|
|
"revokedReason" TEXT
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuthInviteEvent" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"inviteId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"payload" JSONB,
|
|
"actorId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "AuthInviteEvent_inviteId_fkey" FOREIGN KEY ("inviteId") REFERENCES "AuthInvite" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- RedefineTables
|
|
PRAGMA defer_foreign_keys=ON;
|
|
PRAGMA foreign_keys=OFF;
|
|
CREATE TABLE "new_Ticket" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"tenantId" TEXT NOT NULL,
|
|
"reference" INTEGER NOT NULL DEFAULT 0,
|
|
"subject" TEXT NOT NULL,
|
|
"summary" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'NEW',
|
|
"priority" TEXT NOT NULL DEFAULT 'MEDIUM',
|
|
"channel" TEXT NOT NULL DEFAULT 'EMAIL',
|
|
"queueId" TEXT,
|
|
"requesterId" TEXT NOT NULL,
|
|
"assigneeId" TEXT,
|
|
"slaPolicyId" TEXT,
|
|
"companyId" TEXT,
|
|
"dueAt" DATETIME,
|
|
"firstResponseAt" DATETIME,
|
|
"resolvedAt" DATETIME,
|
|
"closedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "Ticket_requesterId_fkey" FOREIGN KEY ("requesterId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "Ticket_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Ticket_queueId_fkey" FOREIGN KEY ("queueId") REFERENCES "Queue" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Ticket_slaPolicyId_fkey" FOREIGN KEY ("slaPolicyId") REFERENCES "SlaPolicy" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "Ticket_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
INSERT INTO "new_Ticket" ("assigneeId", "channel", "closedAt", "createdAt", "dueAt", "firstResponseAt", "id", "priority", "queueId", "reference", "requesterId", "resolvedAt", "slaPolicyId", "status", "subject", "summary", "tenantId", "updatedAt") SELECT "assigneeId", "channel", "closedAt", "createdAt", "dueAt", "firstResponseAt", "id", "priority", "queueId", "reference", "requesterId", "resolvedAt", "slaPolicyId", "status", "subject", "summary", "tenantId", "updatedAt" FROM "Ticket";
|
|
DROP TABLE "Ticket";
|
|
ALTER TABLE "new_Ticket" RENAME TO "Ticket";
|
|
CREATE INDEX "Ticket_tenantId_status_idx" ON "Ticket"("tenantId", "status");
|
|
CREATE INDEX "Ticket_tenantId_queueId_idx" ON "Ticket"("tenantId", "queueId");
|
|
CREATE INDEX "Ticket_tenantId_assigneeId_idx" ON "Ticket"("tenantId", "assigneeId");
|
|
CREATE INDEX "Ticket_tenantId_companyId_idx" ON "Ticket"("tenantId", "companyId");
|
|
CREATE TABLE "new_User" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"tenantId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL,
|
|
"timezone" TEXT NOT NULL DEFAULT 'America/Sao_Paulo',
|
|
"avatarUrl" TEXT,
|
|
"companyId" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "User_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
INSERT INTO "new_User" ("avatarUrl", "createdAt", "email", "id", "name", "role", "tenantId", "timezone", "updatedAt") SELECT "avatarUrl", "createdAt", "email", "id", "name", "role", "tenantId", "timezone", "updatedAt" FROM "User";
|
|
DROP TABLE "User";
|
|
ALTER TABLE "new_User" RENAME TO "User";
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
CREATE INDEX "User_tenantId_role_idx" ON "User"("tenantId", "role");
|
|
CREATE INDEX "User_tenantId_companyId_idx" ON "User"("tenantId", "companyId");
|
|
PRAGMA foreign_keys=ON;
|
|
PRAGMA defer_foreign_keys=OFF;
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Company_tenantId_name_idx" ON "Company"("tenantId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Company_tenantId_slug_key" ON "Company"("tenantId", "slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AuthInvite_token_key" ON "AuthInvite"("token");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuthInvite_tenantId_status_idx" ON "AuthInvite"("tenantId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuthInvite_tenantId_email_idx" ON "AuthInvite"("tenantId", "email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuthInviteEvent_inviteId_createdAt_idx" ON "AuthInviteEvent"("inviteId", "createdAt");
|