feat: add local auth data model

This commit is contained in:
thibaud-leclere 2026-05-06 08:17:05 +02:00
parent 4b7c61d180
commit 7b4cfb4103
3 changed files with 38 additions and 0 deletions

View file

@ -0,0 +1,21 @@
-- Add local username/password authentication support.
ALTER TABLE "User" ADD COLUMN "username" TEXT;
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
CREATE TABLE "LocalCredential" (
"id" TEXT NOT NULL,
"userUid" TEXT NOT NULL,
"passwordHash" TEXT NOT NULL,
"createdOn" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedOn" TIMESTAMPTZ(3) NOT NULL,
CONSTRAINT "LocalCredential_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "LocalCredential_userUid_key" ON "LocalCredential"("userUid");
ALTER TABLE "LocalCredential"
ADD CONSTRAINT "LocalCredential_userUid_fkey"
FOREIGN KEY ("userUid") REFERENCES "User"("uid")
ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -94,6 +94,7 @@ model TeamEnvironment {
model User { model User {
uid String @id @default(cuid()) uid String @id @default(cuid())
username String? @unique
displayName String? displayName String?
email String? @unique email String? @unique
photoURL String? photoURL String?
@ -104,6 +105,7 @@ model User {
createdOn DateTime @default(now()) @db.Timestamptz(3) createdOn DateTime @default(now()) @db.Timestamptz(3)
lastLoggedOn DateTime? @db.Timestamptz(3) lastLoggedOn DateTime? @db.Timestamptz(3)
lastActiveOn DateTime? @db.Timestamptz(3) lastActiveOn DateTime? @db.Timestamptz(3)
localCredential LocalCredential?
providerAccounts Account[] providerAccounts Account[]
invitedUsers InvitedUsers[] invitedUsers InvitedUsers[]
mockServers MockServer[] mockServers MockServer[]
@ -117,6 +119,15 @@ model User {
VerificationToken VerificationToken[] VerificationToken VerificationToken[]
} }
model LocalCredential {
id String @id @default(cuid())
userUid String @unique
passwordHash String
createdOn DateTime @default(now()) @db.Timestamptz(3)
updatedOn DateTime @updatedAt @db.Timestamptz(3)
user User @relation(fields: [userUid], references: [uid], onDelete: Cascade)
}
model Account { model Account {
id String @id @default(cuid()) id String @id @default(cuid())
userId String userId String

View file

@ -7,6 +7,12 @@ export class User {
}) })
uid: string; uid: string;
@Field({
nullable: true,
description: 'Username of the user',
})
username?: string;
@Field({ @Field({
nullable: true, nullable: true,
description: 'Name of the user (if fetched)', description: 'Name of the user (if fetched)',