File size: 2,448 Bytes
b26189e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// OMNIA Eats — standalone database (separate from Stays and the agent).
generator client {
  provider = "prisma-client-js"
}

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

enum OrderStatus {
  pending
  preparing
  delivering
  delivered
  cancelled
}

// Shared Clerk identity: clerkId is the same across all OMNIA apps.
model User {
  id        String   @id @default(cuid())
  clerkId   String   @unique
  email     String?
  firstName String?
  lastName  String?
  imageUrl  String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  orders    Order[]
  reviews   Review[]

  @@map("users")
}

model Vendor {
  id          String     @id @default(cuid())
  name        String
  city        String
  cuisine     String?
  rating      Float?
  deliveryFee Int        @default(0)
  etaMinutes  Int        @default(30)
  image       String?
  description String?
  createdAt   DateTime   @default(now())
  items       MenuItem[]
  orders      Order[]
  reviewRows  Review[]

  @@index([city])
  @@map("vendors")
}

model Review {
  id         String   @id @default(cuid())
  vendorId   String
  userId     String
  authorName String   @default("Guest")
  rating     Int // 1..5
  comment    String?
  createdAt  DateTime @default(now())

  vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)
  user   User   @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@index([vendorId])
  @@map("reviews")
}

model MenuItem {
  id          String  @id @default(cuid())
  vendorId    String
  name        String
  price       Int
  description String?
  image       String?
  category    String?

  vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)

  @@index([vendorId])
  @@map("menu_items")
}

model Order {
  id          String      @id @default(cuid())
  userId      String
  vendorId    String
  items       Json // snapshot: [{ name, price, qty }]
  subtotal    Int
  deliveryFee Int         @default(0)
  total       Int
  currency    String      @default("MAD")
  status      OrderStatus @default(preparing)
  source      String      @default("web") // "web" | "agent"
  createdAt   DateTime    @default(now())

  user   User   @relation(fields: [userId], references: [id], onDelete: Cascade)
  vendor Vendor @relation(fields: [vendorId], references: [id], onDelete: Cascade)

  @@index([userId])
  @@map("orders")
}