schema.prisma PostgreSQL
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id            String    @id @default(cuid())
  email         String    @unique
  name          String?
  role          Role      @default(ORGANIZER)
  stripeAccount String?   @map("stripe_account_id")
  createdAt     DateTime  @default(now()) @map("created_at")
  updatedAt     DateTime  @updatedAt @map("updated_at")
  events        Event[]

  @@map("users")
}

model Event {
  id          String   @id @default(cuid())
  title       String
  venue       String
  city        String
  date        DateTime
  capacity    Int
  published   Boolean  @default(false)
  organizerId String   @map("organizer_id")
  organizer   User     @relation(fields: [organizerId], references: [id])
  tiers       Tier[]
  orders      Order[]

  @@map("events")
}

model Tier {
  id        String  @id @default(cuid())
  name      String
  price     Int
  quantity  Int
  sold      Int     @default(0)
  eventId   String  @map("event_id")
  event     Event   @relation(fields: [eventId], references: [id], onDelete: Cascade)
  orders    Order[]

  @@map("tiers")
}

model Order {
  id            String   @id @default(cuid())
  buyerName     String   @map("buyer_name")
  buyerEmail    String   @map("buyer_email")
  city          String
  status        OrderStatus @default(PENDING)
  price         Int
  platformFee   Int      @map("platform_fee")
  organizerNet    Int      @map("organizer_net")
  stripePaymentId String? @map("stripe_payment_intent_id")
  tierId        String   @map("tier_id")
  eventId       String   @map("event_id")
  tier          Tier     @relation(fields: [tierId], references: [id])
  event         Event    @relation(fields: [eventId], references: [id])
  ticket        Ticket?
  createdAt     DateTime @default(now()) @map("created_at")

  @@map("orders")
}

model Ticket {
  id          String   @id @default(cuid())
  orderId     String   @unique @map("order_id")
  order       Order    @relation(fields: [orderId], references: [id])
  qrCode      String   @map("qr_code")
  validatedAt DateTime? @map("validated_at")

  @@map("tickets")
}

enum Role {
  ADMIN
  ORGANIZER
  BUYER
}

enum OrderStatus {
  PENDING
  PAID
  REFUNDED
  CANCELLED
}