From 8f2fa3b5643a61c05d45083ffdf57e0c6d1b08aa Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Sun, 29 Dec 2024 14:06:30 +0800 Subject: [PATCH] feat(auth): add initial Prisma schema for user authentication --- .gitignore | 5 ++- prisma/schema.prisma | 78 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 prisma/schema.prisma diff --git a/.gitignore b/.gitignore index a840f95..ecd0089 100644 --- a/.gitignore +++ b/.gitignore @@ -40,7 +40,10 @@ yarn-error.log* next-env.d.ts # cache -cache +/cache # bun bun.lockb + +# prisma +/prisma/migrations diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..af891f4 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,78 @@ +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(cuid()) + name String? + email String @unique + emailVerified DateTime? + image String? + accounts Account[] + sessions Session[] + // Optional for WebAuthn support + Authenticator Authenticator[] + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Account { + userId String + type String + provider String + providerAccountId String + refresh_token String? + access_token String? + expires_at Int? + token_type String? + scope String? + id_token String? + session_state String? + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@id([provider, providerAccountId]) +} + +model Session { + sessionToken String @unique + userId String + expires DateTime + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model VerificationToken { + identifier String + token String + expires DateTime + + @@id([identifier, token]) +} + +// Optional for WebAuthn support +model Authenticator { + credentialID String @unique + userId String + providerAccountId String + credentialPublicKey String + counter Int + credentialDeviceType String + credentialBackedUp Boolean + transports String? + + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@id([userId, credentialID]) +}