// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init generator client { provider = "prisma-client" output = "../src/lib/generated/prisma" } datasource db { provider = "postgresql" } model User { id String @id name String email String emailVerified Boolean @default(false) image String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt roleId Int? role UserRole? @relation(fields: [roleId], references: [id]) sessions Session[] accounts Account[] profile Profile? licenseKeys LicenseKey[] userProclamations UserProclamations[] @@unique([email]) @@map("user") } // I chose to create a Profile table here because honestly, I didn't want to waste // a bunch of time trying to figure out how to customize the default Better-Auth model. model Profile { id String @id @default(uuid()) userId String @unique user User @relation(fields: [userId], references: [id], onDelete: Cascade) firstName String lastName String phoneNumber String ghlContactId String? @map("ghl_contact_id") addresses Address[] } model Address { id String @id @default(uuid()) profileId String profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) street String city String state String postalCode String country String type String @default("Mailing") isDefaultMailing Boolean @default(false) isDefaultBilling Boolean @default(false) isDefaultShipping Boolean @default(false) } model Session { id String @id expiresAt DateTime token String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ipAddress String? userAgent String? userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@unique([token]) @@index([userId]) @@map("session") } model Account { id String @id accountId String providerId String userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade) accessToken String? refreshToken String? idToken String? accessTokenExpiresAt DateTime? refreshTokenExpiresAt DateTime? scope String? password String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([userId]) @@map("account") } model UserRole { id Int @id @default(autoincrement()) name String users User[] } model Verification { id String @id identifier String value String expiresAt DateTime createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@index([identifier]) @@map("verification") } model Proclamation { id String @id @default(uuid()) name String @unique content String solfeggioFrequencyId Int solfeggioFrequency SolfeggioFrequency @relation(fields: [solfeggioFrequencyId], references: [id]) categoryId Int category ProclamationCategory @relation(fields: [categoryId], references: [id]) userProclamations UserProclamations[] subscriptionLevelId Int @default(1) subscriptionLevel SubscriptionLevel @relation(fields: [subscriptionLevelId], references: [id]) @@index(subscriptionLevelId) } model UserProclamations { userId String user User @relation(fields: [userId], references: [id]) proclamationId String proclamation Proclamation @relation(fields: [proclamationId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@id([userId, proclamationId]) } model SolfeggioFrequency { id Int @id @default(autoincrement()) name String @unique value Int @unique proclamations Proclamation[] } model ProclamationCategory { id Int @id @default(autoincrement()) name String parentId Int? parent ProclamationCategory? @relation("CategoryHierarchy", fields: [parentId], references: [id]) children ProclamationCategory[] @relation("CategoryHierarchy") proclamations Proclamation[] @@unique([parentId, name]) } model LicenseKey { id String @id @default(uuid()) key String @unique active Boolean level String userId String user User @relation(fields: [userId], references: [id]) } model SubscriptionLevel { id Int @id @default(autoincrement()) name String description String? proclamations Proclamation[] }