// 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>
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
generator client {
provider = "prisma-client-js"
}
model User {
id String @id
email String @unique
name String?
prompts Prompt[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
credits Int @default(5)
subscritpion UserSubscription? @relation
userSubscriptionId String?
profile Profile?
isActiveSubscriber Boolean @default(false) // New field to indicate active subscription status
subscriptionType SubscriptionType? // New field for subscription type
}
enum SubscriptionType {
FREE
BASIC
STANDARD
PREMIUM
LEGACY // Represents users who subscribed under the old unlimited plan
}
model Profile {
id String @id @default(uuid())
userId String @unique
name String?
imageUrl String? @db.Text
email String? @db.Text
bio String? @db.Text
twitch String? @db.Text
youtube String? @db.Text
instagram String? @db.Text
twitter String? @db.Text
status String? @default("active")
isPublic Boolean @default(false)
stripeConnectAccountId String? // Add this line
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User? @relation(fields: [userId], references: [id])
}
model Prompt {
id String @id @default(cuid())
content String @db.Text
framework Framework
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String
isArchived Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
}
model UserSubscription {
id String @id @default(cuid())
userId String @unique
stripeCustomerId String? @unique @map(name: "stripe_customer_id")
stripeSubscriptionId String? @unique @map(name: "stripe_subscription_id")
stripePriceId String? @map(name: "stripe_price_id")
stripeCurrentPeriodEnd DateTime? @map(name: "stripe_current_period_end")
createdAt DateTime @default(now())
updatedAt DateTime? @updatedAt
name String?
email String?
credits Int @default(0) // New credits field
user User? @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction)
}
model UserApiLimit {
id String @id @default(cuid())
userId String @unique
count Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum Framework {
RTF
TAG
BAB
CARE
RISE
}