-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.mysql.prisma
More file actions
251 lines (223 loc) · 6.01 KB
/
schema.mysql.prisma
File metadata and controls
251 lines (223 loc) · 6.01 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
// Production Prisma Schema - MySQL Version
// Copy this content to replace prisma/schema.prisma for production deployment
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Account {
id String @id @default(cuid())
userId String
type String
provider String
providerAccountId String
refresh_token String? @db.Text
access_token String? @db.Text
expires_at Int?
token_type String?
scope String?
id_token String? @db.Text
session_state String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([provider, providerAccountId])
}
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}
model User {
id String @id @default(cuid())
name String?
email String @unique
emailVerified DateTime?
image String?
role Role @default(ADMIN)
accounts Account[]
sessions Session[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model VerificationToken {
identifier String
token String @unique
expires DateTime
@@unique([identifier, token])
}
model Guest {
id String @id @default(cuid())
name String
email String @unique
token String @unique
country String?
phone String?
rsvps RSVP[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Venue {
id String @id @default(cuid())
name String
address String
city String
country String
latitude Float?
longitude Float?
googleMapUrl String? @db.Text
description String? @db.Text
events Event[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Event {
id String @id @default(cuid())
title String
description String @db.Text
date DateTime
time String
venue Venue @relation(fields: [venueId], references: [id])
venueId String
rsvps RSVP[]
streams Stream[]
order Int @default(0)
active Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model RSVP {
id String @id @default(cuid())
guest Guest @relation(fields: [guestId], references: [id])
guestId String
event Event @relation(fields: [eventId], references: [id])
eventId String
response RSVPResponse
attendees Int @default(1)
dietaryPreferences String? @db.Text
comments String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@unique([guestId, eventId])
}
model Hotel {
id String @id @default(cuid())
name String
address String
city String
country String
phone String?
email String?
website String?
description String? @db.Text
amenities String? @db.Text
bookingCode String?
discount String?
deadline DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model MediaItem {
id String @id @default(cuid())
title String?
description String? @db.Text
type MediaType
url String
publicId String? // Cloudinary public ID
category String
album String?
caption String? @db.Text
public Boolean @default(true)
approved Boolean @default(false)
featured Boolean @default(false)
order Int @default(0)
uploadedBy String? // User ID or guest email
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Stream {
id String @id @default(cuid())
title String
description String? @db.Text
streamUrl String
isLive Boolean @default(false)
eventId String?
event Event? @relation(fields: [eventId], references: [id])
startTime DateTime?
endTime DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ContactRequest {
id String @id @default(cuid())
name String
email String
phone String?
subject ContactSubject
message String @db.Text
status RequestStatus @default(PENDING)
adminNote String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model RSVPFormSubmission {
id String @id @default(cuid())
guestName String?
email String
willAttendDhaka String // 'yes' | 'no' | 'maybe'
familySide String // 'bride' | 'groom' | 'both'
guestCount String // '1' | '2' | '3' | '4' | 'other'
guestCountOther String?
additionalInfo String? @db.Text
// Contact Information
preferredNumber String?
preferredWhatsapp Boolean @default(false)
preferredBotim Boolean @default(false)
secondaryNumber String?
secondaryWhatsapp Boolean @default(false)
secondaryBotim Boolean @default(false)
// Emergency Contact
emergencyName String?
emergencyPhone String?
emergencyEmail String?
status RequestStatus @default(PENDING)
adminNote String? @db.Text
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
// Enums
enum Role {
ADMIN
MODERATOR
}
enum RSVPResponse {
ATTENDING
NOT_ATTENDING
MAYBE
}
enum MediaType {
IMAGE
VIDEO
}
enum StreamPlatform {
YOUTUBE
FACEBOOK
VIMEO
CUSTOM
}
enum ContactSubject {
RSVP
TRAVEL
EVENTS
DIETARY
ACCESSIBILITY
GENERAL
EMERGENCY
}
enum RequestStatus {
PENDING
RESPONDED
CLOSED
}