Enrollment + almost all auth
This commit is contained in:
103
prisma/migrations/20251216173800_init_auth/migration.sql
Normal file
103
prisma/migrations/20251216173800_init_auth/migration.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Org" (
|
||||
"id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"slug" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Org_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"passwordHash" TEXT NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "OrgUser" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"role" TEXT NOT NULL DEFAULT 'MEMBER',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "OrgUser_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Session" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"lastSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"expiresAt" TIMESTAMP(3) NOT NULL,
|
||||
"revokedAt" TIMESTAMP(3),
|
||||
"ip" TEXT,
|
||||
"userAgent" TEXT,
|
||||
|
||||
CONSTRAINT "Session_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Machine" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"code" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Machine_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Org_slug_key" ON "Org"("slug");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "OrgUser_userId_idx" ON "OrgUser"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "OrgUser_orgId_idx" ON "OrgUser"("orgId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "OrgUser_orgId_userId_key" ON "OrgUser"("orgId", "userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Session_userId_idx" ON "Session"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Session_orgId_idx" ON "Session"("orgId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Session_expiresAt_idx" ON "Session"("expiresAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Machine_orgId_idx" ON "Machine"("orgId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Machine_orgId_code_key" ON "Machine"("orgId", "code");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "OrgUser" ADD CONSTRAINT "OrgUser_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "OrgUser" ADD CONSTRAINT "OrgUser_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Session" ADD CONSTRAINT "Session_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Session" ADD CONSTRAINT "Session_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Machine" ADD CONSTRAINT "Machine_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- A unique constraint covering the columns `[orgId,name]` on the table `Machine` will be added. If there are existing duplicate values, this will fail.
|
||||
- Added the required column `updatedAt` to the `Machine` table without a default value. This is not possible if the table is not empty.
|
||||
|
||||
*/
|
||||
-- DropIndex
|
||||
DROP INDEX "Machine_orgId_code_key";
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Machine" ADD COLUMN "location" TEXT,
|
||||
ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "MachineHeartbeat" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"machineId" TEXT NOT NULL,
|
||||
"ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"status" TEXT NOT NULL,
|
||||
"message" TEXT,
|
||||
"ip" TEXT,
|
||||
"fwVersion" TEXT,
|
||||
|
||||
CONSTRAINT "MachineHeartbeat_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineHeartbeat_orgId_machineId_ts_idx" ON "MachineHeartbeat"("orgId", "machineId", "ts");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Machine_orgId_name_key" ON "Machine"("orgId", "name");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineHeartbeat" ADD CONSTRAINT "MachineHeartbeat_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineHeartbeat" ADD CONSTRAINT "MachineHeartbeat_machineId_fkey" FOREIGN KEY ("machineId") REFERENCES "Machine"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- A unique constraint covering the columns `[apiKey]` on the table `Machine` will be added. If there are existing duplicate values, this will fail.
|
||||
|
||||
*/
|
||||
-- AlterTable
|
||||
ALTER TABLE "Machine" ADD COLUMN "apiKey" TEXT;
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Machine_apiKey_key" ON "Machine"("apiKey");
|
||||
@@ -0,0 +1,66 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "MachineKpiSnapshot" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"machineId" TEXT NOT NULL,
|
||||
"ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"workOrderId" TEXT,
|
||||
"sku" TEXT,
|
||||
"target" INTEGER,
|
||||
"good" INTEGER,
|
||||
"scrap" INTEGER,
|
||||
"cycleCount" INTEGER,
|
||||
"goodParts" INTEGER,
|
||||
"scrapParts" INTEGER,
|
||||
"cavities" INTEGER,
|
||||
"cycleTime" DOUBLE PRECISION,
|
||||
"actualCycle" DOUBLE PRECISION,
|
||||
"availability" DOUBLE PRECISION,
|
||||
"performance" DOUBLE PRECISION,
|
||||
"quality" DOUBLE PRECISION,
|
||||
"oee" DOUBLE PRECISION,
|
||||
"trackingEnabled" BOOLEAN,
|
||||
"productionStarted" BOOLEAN,
|
||||
|
||||
CONSTRAINT "MachineKpiSnapshot_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "MachineEvent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"machineId" TEXT NOT NULL,
|
||||
"ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"topic" TEXT NOT NULL,
|
||||
"eventType" TEXT NOT NULL,
|
||||
"severity" TEXT NOT NULL,
|
||||
"requiresAck" BOOLEAN NOT NULL DEFAULT false,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"data" JSONB,
|
||||
"workOrderId" TEXT,
|
||||
"sku" TEXT,
|
||||
|
||||
CONSTRAINT "MachineEvent_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineKpiSnapshot_orgId_machineId_ts_idx" ON "MachineKpiSnapshot"("orgId", "machineId", "ts");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineEvent_orgId_machineId_ts_idx" ON "MachineEvent"("orgId", "machineId", "ts");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineEvent_orgId_machineId_eventType_ts_idx" ON "MachineEvent"("orgId", "machineId", "eventType", "ts");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineKpiSnapshot" ADD CONSTRAINT "MachineKpiSnapshot_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineKpiSnapshot" ADD CONSTRAINT "MachineKpiSnapshot_machineId_fkey" FOREIGN KEY ("machineId") REFERENCES "Machine"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineEvent" ADD CONSTRAINT "MachineEvent_orgId_fkey" FOREIGN KEY ("orgId") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineEvent" ADD CONSTRAINT "MachineEvent_machineId_fkey" FOREIGN KEY ("machineId") REFERENCES "Machine"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,27 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "MachineCycle" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT NOT NULL,
|
||||
"machineId" TEXT NOT NULL,
|
||||
"ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"cycleCount" INTEGER,
|
||||
"actualCycleTime" DOUBLE PRECISION NOT NULL,
|
||||
"theoreticalCycleTime" DOUBLE PRECISION,
|
||||
"workOrderId" TEXT,
|
||||
"sku" TEXT,
|
||||
"cavities" INTEGER,
|
||||
"goodDelta" INTEGER,
|
||||
"scrapDelta" INTEGER,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MachineCycle_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineCycle_orgId_machineId_ts_idx" ON "MachineCycle"("orgId", "machineId", "ts");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MachineCycle_orgId_machineId_cycleCount_idx" ON "MachineCycle"("orgId", "machineId", "cycleCount");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "MachineCycle" ADD CONSTRAINT "MachineCycle_machineId_fkey" FOREIGN KEY ("machineId") REFERENCES "Machine"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
55
prisma/migrations/20251222235834_ingest_log/migration.sql
Normal file
55
prisma/migrations/20251222235834_ingest_log/migration.sql
Normal file
@@ -0,0 +1,55 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Machine" ADD COLUMN "schema_version" TEXT,
|
||||
ADD COLUMN "seq" BIGINT,
|
||||
ADD COLUMN "ts" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
ADD COLUMN "ts_server" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "MachineCycle" ADD COLUMN "schema_version" TEXT,
|
||||
ADD COLUMN "seq" BIGINT,
|
||||
ADD COLUMN "ts_server" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "MachineEvent" ADD COLUMN "schema_version" TEXT,
|
||||
ADD COLUMN "seq" BIGINT,
|
||||
ADD COLUMN "ts_server" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "MachineHeartbeat" ADD COLUMN "schema_version" TEXT,
|
||||
ADD COLUMN "seq" BIGINT,
|
||||
ADD COLUMN "ts_server" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "MachineKpiSnapshot" ADD COLUMN "schema_version" TEXT,
|
||||
ADD COLUMN "seq" BIGINT,
|
||||
ADD COLUMN "ts_server" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "IngestLog" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orgId" TEXT,
|
||||
"machineId" TEXT,
|
||||
"endpoint" TEXT NOT NULL,
|
||||
"schemaVersion" TEXT,
|
||||
"seq" BIGINT,
|
||||
"tsDevice" TIMESTAMP(3),
|
||||
"tsServer" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"ok" BOOLEAN NOT NULL,
|
||||
"status" INTEGER NOT NULL,
|
||||
"errorCode" TEXT,
|
||||
"errorMsg" TEXT,
|
||||
"body" JSONB,
|
||||
"ip" TEXT,
|
||||
"userAgent" TEXT,
|
||||
|
||||
CONSTRAINT "IngestLog_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "IngestLog_endpoint_tsServer_idx" ON "IngestLog"("endpoint", "tsServer");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "IngestLog_machineId_tsServer_idx" ON "IngestLog"("machineId", "tsServer");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "IngestLog_machineId_seq_idx" ON "IngestLog"("machineId", "seq");
|
||||
@@ -0,0 +1,42 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "User" ADD COLUMN "email_verification_expires_at" TIMESTAMP(3),
|
||||
ADD COLUMN "email_verification_token" TEXT,
|
||||
ADD COLUMN "email_verified_at" TIMESTAMP(3);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "org_invites" (
|
||||
"id" TEXT NOT NULL,
|
||||
"org_id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"role" TEXT NOT NULL DEFAULT 'MEMBER',
|
||||
"token" TEXT NOT NULL,
|
||||
"invited_by" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"expires_at" TIMESTAMP(3) NOT NULL,
|
||||
"accepted_at" TIMESTAMP(3),
|
||||
"revoked_at" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "org_invites_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "org_invites_token_key" ON "org_invites"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "org_invites_org_id_idx" ON "org_invites"("org_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "org_invites_org_id_email_idx" ON "org_invites"("org_id", "email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "org_invites_expires_at_idx" ON "org_invites"("expires_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_verification_token_key" ON "User"("email_verification_token");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "org_invites" ADD CONSTRAINT "org_invites_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "Org"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "org_invites" ADD CONSTRAINT "org_invites_invited_by_fkey" FOREIGN KEY ("invited_by") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
-- This is an empty migration.
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Machine" ADD COLUMN "pairing_code" TEXT,
|
||||
ADD COLUMN "pairing_code_expires_at" TIMESTAMP(3),
|
||||
ADD COLUMN "pairing_code_used_at" TIMESTAMP(3);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Machine_pairing_code_key" ON "Machine"("pairing_code");
|
||||
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
@@ -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"
|
||||
@@ -23,6 +23,7 @@ model Org {
|
||||
shifts OrgShift[]
|
||||
machineSettings MachineSettings[]
|
||||
settingsAudits SettingsAudit[]
|
||||
invites OrgInvite[]
|
||||
}
|
||||
|
||||
model User {
|
||||
@@ -32,9 +33,13 @@ model User {
|
||||
passwordHash String
|
||||
isActive Boolean @default(true)
|
||||
createdAt DateTime @default(now())
|
||||
emailVerifiedAt DateTime? @map("email_verified_at")
|
||||
emailVerificationToken String? @unique @map("email_verification_token")
|
||||
emailVerificationExpiresAt DateTime? @map("email_verification_expires_at")
|
||||
|
||||
orgs OrgUser[]
|
||||
sessions Session[]
|
||||
orgs OrgUser[]
|
||||
sessions Session[]
|
||||
sentInvites OrgInvite[] @relation("OrgInviteInviter")
|
||||
}
|
||||
|
||||
model OrgUser {
|
||||
@@ -52,6 +57,27 @@ model OrgUser {
|
||||
@@index([orgId])
|
||||
}
|
||||
|
||||
model OrgInvite {
|
||||
id String @id @default(uuid())
|
||||
orgId String @map("org_id")
|
||||
email String
|
||||
role String @default("MEMBER") // OWNER | ADMIN | MEMBER
|
||||
token String @unique
|
||||
invitedBy String? @map("invited_by")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
expiresAt DateTime @map("expires_at")
|
||||
acceptedAt DateTime? @map("accepted_at")
|
||||
revokedAt DateTime? @map("revoked_at")
|
||||
|
||||
org Org @relation(fields: [orgId], references: [id], onDelete: Cascade)
|
||||
inviter User? @relation("OrgInviteInviter", fields: [invitedBy], references: [id], onDelete: SetNull)
|
||||
|
||||
@@index([orgId])
|
||||
@@index([orgId, email])
|
||||
@@index([expiresAt])
|
||||
@@map("org_invites")
|
||||
}
|
||||
|
||||
model Session {
|
||||
id String @id @default(uuid()) // cookie value
|
||||
orgId String
|
||||
@@ -84,6 +110,9 @@ model Machine {
|
||||
tsServer DateTime @default(now()) @map("ts_server")
|
||||
schemaVersion String? @map("schema_version")
|
||||
seq BigInt? @map("seq")
|
||||
pairingCode String? @unique @map("pairing_code")
|
||||
pairingCodeExpiresAt DateTime? @map("pairing_code_expires_at")
|
||||
pairingCodeUsedAt DateTime? @map("pairing_code_used_at")
|
||||
|
||||
org Org @relation(fields: [orgId], references: [id], onDelete: Cascade)
|
||||
heartbeats MachineHeartbeat[]
|
||||
|
||||
@@ -17,11 +17,14 @@ async function main() {
|
||||
|
||||
const user = await prisma.user.upsert({
|
||||
where: { email: "admin@maliountech.com" },
|
||||
update: {},
|
||||
update: {
|
||||
emailVerifiedAt: new Date(),
|
||||
},
|
||||
create: {
|
||||
email: "admin@maliountech.com",
|
||||
name: "Admin",
|
||||
passwordHash,
|
||||
emailVerifiedAt: new Date(),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user