login time

This commit is contained in:
Sone
2025-11-05 20:11:59 +01:00
parent deb622b796
commit af4d079181
12 changed files with 1904 additions and 273 deletions
@@ -0,0 +1,32 @@
-- CreateEnum
CREATE TYPE "LoginActivityStatus" AS ENUM ('SUCCESS', 'FAILURE');
-- CreateEnum
CREATE TYPE "LoginFailureReason" AS ENUM ('MISSING_CREDENTIALS', 'INVALID_CREDENTIALS', 'WRONG_PASSWORD', 'ACCOUNT_LOCKED', 'NOT_ACTIVATED', 'NOT_ALLOWED', 'UNKNOWN');
-- AlterTable
ALTER TABLE "User" ADD COLUMN "lastLoginAt" TIMESTAMP(3);
-- CreateTable
CREATE TABLE "LoginActivity" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"activity" TEXT NOT NULL,
"status" "LoginActivityStatus" NOT NULL DEFAULT 'SUCCESS',
"failureReason" "LoginFailureReason",
CONSTRAINT "LoginActivity_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "LoginActivity_userId_createdAt_idx" ON "LoginActivity"("userId", "createdAt");
-- CreateIndex
CREATE INDEX "LoginActivity_createdAt_idx" ON "LoginActivity"("createdAt");
-- CreateIndex
CREATE INDEX "LoginActivity_activity_idx" ON "LoginActivity"("activity");
-- AddForeignKey
ALTER TABLE "LoginActivity" ADD CONSTRAINT "LoginActivity_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+31
View File
@@ -2,6 +2,20 @@ generator client {
provider = "prisma-client-js"
}
model LoginActivity {
id String @id @default(cuid())
userId String
createdAt DateTime @default(now())
activity String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
status LoginActivityStatus @default(SUCCESS)
failureReason LoginFailureReason?
@@index([userId, createdAt])
@@index([createdAt])
@@index([activity])
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
@@ -30,6 +44,8 @@ model User {
teamMembers User[] @relation("ManagerMembers")
assignedTodos Todo[] @relation("AssignedTodos")
securityType SecurityType @default(BASIC)
lastLoginAt DateTime?
loginActivities LoginActivity[]
}
model Todo {
@@ -100,3 +116,18 @@ enum SecurityType {
ASSISTANCE
MAXIMUM
}
enum LoginActivityStatus {
SUCCESS
FAILURE
}
enum LoginFailureReason {
MISSING_CREDENTIALS
INVALID_CREDENTIALS
WRONG_PASSWORD
ACCOUNT_LOCKED
NOT_ACTIVATED
NOT_ALLOWED
UNKNOWN
}