-- CreateTable CREATE TABLE "User" ( "id" TEXT NOT NULL PRIMARY KEY, "email" TEXT NOT NULL, "username" TEXT NOT NULL, "name" TEXT, "passwordHash" TEXT NOT NULL, "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" DATETIME NOT NULL ); -- CreateTable CREATE TABLE "Role" ( "id" TEXT NOT NULL PRIMARY KEY, "name" TEXT NOT NULL ); -- CreateTable CREATE TABLE "UserRole" ( "userId" TEXT NOT NULL, "roleId" TEXT NOT NULL, "assignedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY ("userId", "roleId"), CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "UserRole_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "Role" ("id") ON DELETE RESTRICT ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "DeviceGroup" ( "id" TEXT NOT NULL PRIMARY KEY, "name" TEXT NOT NULL ); -- CreateTable CREATE TABLE "Location" ( "id" TEXT NOT NULL PRIMARY KEY, "name" TEXT NOT NULL ); -- CreateTable CREATE TABLE "Device" ( "id" TEXT NOT NULL PRIMARY KEY, "inventoryNumber" TEXT NOT NULL, "serialNumber" TEXT, "productNumber" TEXT, "comment" TEXT, "groupId" TEXT, "locationId" TEXT, "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" DATETIME NOT NULL, "createdById" TEXT, "updatedById" TEXT, CONSTRAINT "Device_groupId_fkey" FOREIGN KEY ("groupId") REFERENCES "DeviceGroup" ("id") ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT "Device_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "Location" ("id") ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT "Device_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT "Device_updatedById_fkey" FOREIGN KEY ("updatedById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "DeviceHistory" ( "id" TEXT NOT NULL PRIMARY KEY, "deviceId" TEXT NOT NULL, "changeType" TEXT NOT NULL, "snapshot" JSONB NOT NULL, "changedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, "changedById" TEXT, CONSTRAINT "DeviceHistory_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, CONSTRAINT "DeviceHistory_changedById_fkey" FOREIGN KEY ("changedById") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE ); -- CreateIndex CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); -- CreateIndex CREATE UNIQUE INDEX "User_username_key" ON "User"("username"); -- CreateIndex CREATE UNIQUE INDEX "Role_name_key" ON "Role"("name"); -- CreateIndex CREATE UNIQUE INDEX "DeviceGroup_name_key" ON "DeviceGroup"("name"); -- CreateIndex CREATE UNIQUE INDEX "Device_inventoryNumber_key" ON "Device"("inventoryNumber"); -- CreateIndex CREATE INDEX "Device_inventoryNumber_idx" ON "Device"("inventoryNumber"); -- CreateIndex CREATE INDEX "Device_groupId_idx" ON "Device"("groupId"); -- CreateIndex CREATE INDEX "Device_locationId_idx" ON "Device"("locationId"); -- CreateIndex CREATE INDEX "DeviceHistory_deviceId_changedAt_idx" ON "DeviceHistory"("deviceId", "changedAt");