153 lines
5.2 KiB
SQL
153 lines
5.2 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "Venue" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Device" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"venueId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"tokenHash" TEXT NOT NULL,
|
|
"tokenPrefix" TEXT NOT NULL,
|
|
"tokenExpiresAt" DATETIME NOT NULL,
|
|
"lastSeenAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"revokedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "Device_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ClientUser" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"venueId" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"role" TEXT NOT NULL DEFAULT 'viewer',
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "ClientUser_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RegistrationCode" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"venueId" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"expiresAt" DATETIME NOT NULL,
|
|
"usedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "RegistrationCode_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OpenTabSnapshot" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"deviceId" TEXT NOT NULL,
|
|
"tabId" TEXT NOT NULL,
|
|
"customerName" TEXT NOT NULL,
|
|
"version" INTEGER NOT NULL,
|
|
"totalInCents" INTEGER NOT NULL,
|
|
"itemCount" INTEGER NOT NULL,
|
|
"reportedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "OpenTabSnapshot_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TabOwnership" (
|
|
"tabId" TEXT NOT NULL,
|
|
"venueId" TEXT NOT NULL,
|
|
"deviceId" TEXT NOT NULL,
|
|
"lastReportedAt" DATETIME NOT NULL,
|
|
|
|
PRIMARY KEY ("venueId", "tabId"),
|
|
CONSTRAINT "TabOwnership_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "TabOwnership_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RemoteCommand" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"venueId" TEXT NOT NULL,
|
|
"deviceId" TEXT NOT NULL,
|
|
"targetTabId" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'close_tab',
|
|
"expectedVersion" INTEGER NOT NULL,
|
|
"paymentMethod" TEXT NOT NULL,
|
|
"requestedBy" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"result" TEXT,
|
|
"acknowledgedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"expiresAt" DATETIME NOT NULL,
|
|
CONSTRAINT "RemoteCommand_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "RemoteCommand_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AuditLog" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"venueId" TEXT NOT NULL,
|
|
"actorType" TEXT NOT NULL,
|
|
"actorId" TEXT NOT NULL,
|
|
"action" TEXT NOT NULL,
|
|
"details" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "AuditLog_venueId_fkey" FOREIGN KEY ("venueId") REFERENCES "Venue" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "RefreshToken" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"userId" TEXT NOT NULL,
|
|
"tokenHash" TEXT NOT NULL,
|
|
"expiresAt" DATETIME NOT NULL,
|
|
"revokedAt" DATETIME,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Device_tokenHash_key" ON "Device"("tokenHash");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Device_venueId_revokedAt_idx" ON "Device"("venueId", "revokedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ClientUser_email_key" ON "ClientUser"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ClientUser_venueId_idx" ON "ClientUser"("venueId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RegistrationCode_code_key" ON "RegistrationCode"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RegistrationCode_venueId_idx" ON "RegistrationCode"("venueId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OpenTabSnapshot_deviceId_idx" ON "OpenTabSnapshot"("deviceId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OpenTabSnapshot_tabId_reportedAt_idx" ON "OpenTabSnapshot"("tabId", "reportedAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "OpenTabSnapshot_deviceId_tabId_key" ON "OpenTabSnapshot"("deviceId", "tabId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RemoteCommand_deviceId_status_createdAt_idx" ON "RemoteCommand"("deviceId", "status", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RemoteCommand_venueId_status_createdAt_idx" ON "RemoteCommand"("venueId", "status", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "AuditLog_venueId_createdAt_idx" ON "AuditLog"("venueId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "RefreshToken_tokenHash_key" ON "RefreshToken"("tokenHash");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "RefreshToken_userId_idx" ON "RefreshToken"("userId");
|