@bash-app/bash-common 30.75.2 → 30.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/definitions.d.ts +116 -0
  2. package/dist/definitions.d.ts.map +1 -1
  3. package/dist/definitions.js +143 -1
  4. package/dist/definitions.js.map +1 -1
  5. package/dist/extendedSchemas.d.ts +12 -0
  6. package/dist/extendedSchemas.d.ts.map +1 -1
  7. package/dist/extendedSchemas.js.map +1 -1
  8. package/dist/index.d.ts +0 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/membershipDefinitions.d.ts +1 -0
  13. package/dist/membershipDefinitions.d.ts.map +1 -1
  14. package/dist/membershipDefinitions.js.map +1 -1
  15. package/dist/utils/paymentUtils.d.ts +41 -1
  16. package/dist/utils/paymentUtils.d.ts.map +1 -1
  17. package/dist/utils/paymentUtils.js +146 -1
  18. package/dist/utils/paymentUtils.js.map +1 -1
  19. package/dist/utils/recurrenceUtils.d.ts.map +1 -1
  20. package/dist/utils/recurrenceUtils.js +136 -2
  21. package/dist/utils/recurrenceUtils.js.map +1 -1
  22. package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -1
  23. package/dist/utils/service/frontendServiceBookingUtils.js +5 -1
  24. package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -1
  25. package/dist/utils/userSubscriptionUtils.d.ts +4 -12
  26. package/dist/utils/userSubscriptionUtils.d.ts.map +1 -1
  27. package/dist/utils/userSubscriptionUtils.js +13 -20
  28. package/dist/utils/userSubscriptionUtils.js.map +1 -1
  29. package/package.json +1 -1
  30. package/prisma/schema.prisma +193 -107
  31. package/src/definitions.ts +180 -1
  32. package/src/extendedSchemas.ts +21 -2
  33. package/src/index.ts +1 -1
  34. package/src/membershipDefinitions.ts +1 -0
  35. package/src/utils/contentFilterUtils.ts +2 -0
  36. package/src/utils/paymentUtils.ts +221 -1
  37. package/src/utils/recurrenceUtils.ts +180 -4
  38. package/src/utils/service/frontendServiceBookingUtils.ts +5 -1
  39. package/src/utils/userSubscriptionUtils.ts +20 -38
  40. package/src/utils/service/venueUtils.ts +0 -30
@@ -1,15 +1,25 @@
1
+ // Re-export from definitions.ts for backwards compatibility
2
+ export { SERVICE_SUBSCRIPTION_TIERS } from "../definitions";
1
3
  export const ServiceSubscriptionTier = {
4
+ Free: "Free",
2
5
  Ally: "Ally",
3
6
  Partner: "Partner",
4
- Patreon: "Patron",
7
+ Patron: "Patron",
5
8
  };
6
9
  export const SERVICE_TIER_TO_SERVICES_LIST = {
10
+ Free: ["EventServices", "EntertainmentServices"],
7
11
  Ally: ["EventServices", "EntertainmentServices"],
8
12
  Partner: ["Vendors", "Exhibitors", "Sponsors"],
9
13
  Patron: ["Venues", "Organizations"],
10
14
  };
11
15
  export const SERVICE_TIER_FROM_SERVICE_TYPE = Object.entries(SERVICE_TIER_TO_SERVICES_LIST).reduce((sofar, [type, serviceTypes]) => {
12
- serviceTypes.forEach((serviceType) => (sofar[serviceType] = type));
16
+ serviceTypes.forEach((serviceType) => {
17
+ // Default to Free tier for EventServices and EntertainmentServices
18
+ // Higher tiers can be chosen by the user
19
+ if (!sofar[serviceType] || type === "Free") {
20
+ sofar[serviceType] = type;
21
+ }
22
+ });
13
23
  return sofar;
14
24
  }, {});
15
25
  export const USER_SUBSCRIPTION_TYPES = {
@@ -34,23 +44,6 @@ export const USER_SUBSCRIPTION_TYPES = {
34
44
  // price: 500,
35
45
  // }
36
46
  };
37
- export const SERVICE_SUBSCRIPTION_TIERS = {
38
- Ally: {
39
- name: "Ally",
40
- description: "Ally",
41
- price: 14,
42
- },
43
- Partner: {
44
- name: "Partner",
45
- description: "Partner",
46
- price: 49.0,
47
- },
48
- Patron: {
49
- name: "Patron",
50
- description: "Patron",
51
- price: 99.0,
52
- },
53
- };
47
+ // Set the type field on each tier info object
54
48
  Object.entries(USER_SUBSCRIPTION_TYPES).forEach(([type, info]) => (info.type = type));
55
- Object.entries(SERVICE_SUBSCRIPTION_TIERS).forEach(([type, info]) => (info.type = type));
56
49
  //# sourceMappingURL=userSubscriptionUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userSubscriptionUtils.js","sourceRoot":"","sources":["../../src/utils/userSubscriptionUtils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,QAAQ;CACT,CAAC;AAmCX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAChD,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC;IAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;CACS,CAAC;AAE/C,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,OAAO,CAC1D,6BAA6B,CAC9B,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE;IACvC,YAAY,CAAC,OAAO,CAClB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAA+B,CAAC,CACxE,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC,EAAE,EAAiD,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,oBAAoB;IACpB,2BAA2B;IAC3B,gBAAgB;IAChB,KAAK;IACL,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,CAAC;KACT;IACD,eAAe;IACf,uBAAuB;IACvB,8BAA8B;IAC9B,kBAAkB;IAClB,KAAK;IACL,WAAW;IACX,mBAAmB;IACnB,0BAA0B;IAC1B,kBAAkB;IAClB,IAAI;CAC6B,CAAC;AAEpC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,EAAE;KACV;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,IAAI;KACZ;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,QAAQ;QACrB,KAAK,EAAE,IAAI;KACZ;CACoC,CAAC;AAExC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAC7C,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAsB,CAAC,CACvD,CAAC;AACF,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAChD,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAA+B,CAAC,CAChE,CAAC"}
1
+ {"version":3,"file":"userSubscriptionUtils.js","sourceRoot":"","sources":["../../src/utils/userSubscriptionUtils.ts"],"names":[],"mappings":"AAEA,4DAA4D;AAC5D,OAAO,EACL,0BAA0B,EAG3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AAwBX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAChD,IAAI,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;IAChD,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC;IAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC;CACS,CAAC;AAE/C,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,OAAO,CAC1D,6BAA6B,CAC9B,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE;IACvC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACnC,mEAAmE;QACnE,yCAAyC;QACzC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC3C,KAAK,CAAC,WAAW,CAAC,GAAG,IAA+B,CAAC;QACvD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,EAAE,EAAiD,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,YAAY;IACZ,oBAAoB;IACpB,2BAA2B;IAC3B,gBAAgB;IAChB,KAAK;IACL,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,OAAO;QACpB,KAAK,EAAE,CAAC;KACT;IACD,eAAe;IACf,uBAAuB;IACvB,8BAA8B;IAC9B,kBAAkB;IAClB,KAAK;IACL,WAAW;IACX,mBAAmB;IACnB,0BAA0B;IAC1B,kBAAkB;IAClB,IAAI;CAC6B,CAAC;AAEpC,8CAA8C;AAC9C,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAC7C,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAsB,CAAC,CACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bash-app/bash-common",
3
- "version": "30.75.2",
3
+ "version": "30.78.0",
4
4
  "description": "Common data and scripts to use on the frontend and backend",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -244,8 +244,8 @@ model BashEvent {
244
244
  description String?
245
245
  eventType String @default("Other")
246
246
  timezone String?
247
- startDateTime DateTime? @default(now())
248
- endDateTime DateTime? @default(now())
247
+ startDateTime DateTime?
248
+ endDateTime DateTime?
249
249
  waiverUrl String?
250
250
  waiverRequired Boolean @default(false)
251
251
  waiverDisplayType String? @default("inline")
@@ -328,6 +328,7 @@ model BashEvent {
328
328
  vendorBookingRequests VendorBookingRequest[] @relation("VendorBookingEvent")
329
329
  media Media[] @relation("BashEventToMedia")
330
330
  associatedServicesReferencingMe Service[] @relation("BashEventToService")
331
+ userConnections UserConnection[]
331
332
  }
332
333
 
333
334
  model Coordinates {
@@ -390,19 +391,24 @@ model UserReferralCode {
390
391
  }
391
392
 
392
393
  model UserReferralToken {
393
- id String @id @default(cuid())
394
- userId String
395
- token String @unique
396
- planName String
397
- expiresAt DateTime
398
- isUsed Boolean @default(false)
399
- createdAt DateTime @default(now())
400
- updatedAt DateTime @updatedAt
401
- user User @relation("UserReferralTokens", fields: [userId], references: [id], onDelete: Cascade)
394
+ id String @id @default(cuid())
395
+ userId String
396
+ token String @unique
397
+ planName String
398
+ redeemedByUserId String?
399
+ type String? @default("PAID_MEMBERSHIP") // "FREE_SIGNUP", "PAID_MEMBERSHIP", or planName
400
+ metadata Json? // JSONB in Postgres: signup method, IP, etc.
401
+ expiresAt DateTime
402
+ isUsed Boolean @default(false)
403
+ createdAt DateTime @default(now())
404
+ updatedAt DateTime @updatedAt
405
+ user User @relation("UserReferralTokens", fields: [userId], references: [id], onDelete: Cascade)
402
406
 
403
407
  @@index([token])
404
408
  @@index([userId])
405
409
  @@index([expiresAt])
410
+ @@index([type])
411
+ @@index([redeemedByUserId])
406
412
  }
407
413
 
408
414
  model TicketTier {
@@ -772,6 +778,10 @@ model User {
772
778
  zelleEmail String?
773
779
  zellePhone String?
774
780
  zelleQRCodeUrl String?
781
+ isAmbashador Boolean @default(false)
782
+ ambashadorAwardedAt DateTime?
783
+ isBashInsider Boolean @default(false)
784
+ insiderAwardedAt DateTime?
775
785
  associatedBashes AssociatedBash[]
776
786
  associatedServices AssociatedService[]
777
787
  comment BashComment[]
@@ -814,6 +824,7 @@ model User {
814
824
  remindersCreatedByMe Reminder[] @relation("RemindersCreatedByMe")
815
825
  remindersAssignedToMe Reminder[] @relation("RemindersAssignedToMe")
816
826
  reviews Review[]
827
+ firstFreeListingId String?
817
828
  createdServices Service[] @relation("CreatedService")
818
829
  ownedServices Service[] @relation("OwnedService")
819
830
  serviceBlocksReceived ServiceBlock[] @relation("ServiceBlocksReceived")
@@ -839,6 +850,8 @@ model User {
839
850
  favorites UserFavorite[]
840
851
  following UserFollowing[] @relation("Follower")
841
852
  followers UserFollowing[] @relation("Following")
853
+ connectionRequestsSent UserConnection[] @relation("ConnectionRequestsSent")
854
+ connectionRequestsReceived UserConnection[] @relation("ConnectionRequestsReceived")
842
855
  links UserLink[]
843
856
  preferences UserPreferences?
844
857
  userPromoCodeRedemption UserPromoCodeRedemption[]
@@ -970,6 +983,25 @@ model UserFollowing {
970
983
  @@unique([userId, followingId])
971
984
  }
972
985
 
986
+ model UserConnection {
987
+ id String @id @default(cuid())
988
+ requesterId String // User who sent the request
989
+ addresseeId String // User who received the request
990
+ status ConnectionStatus @default(Pending)
991
+ sharedBashEventId String? // The bash that enabled this connection
992
+ requestedAt DateTime @default(now())
993
+ respondedAt DateTime?
994
+ message String? // Optional message with request
995
+ requester User @relation("ConnectionRequestsSent", fields: [requesterId], references: [id], onDelete: Cascade)
996
+ addressee User @relation("ConnectionRequestsReceived", fields: [addresseeId], references: [id], onDelete: Cascade)
997
+ sharedBash BashEvent? @relation(fields: [sharedBashEventId], references: [id], onDelete: SetNull)
998
+
999
+ @@unique([requesterId, addresseeId])
1000
+ @@index([requesterId])
1001
+ @@index([addresseeId])
1002
+ @@index([status])
1003
+ }
1004
+
973
1005
  model BiometricCredential {
974
1006
  id String @id @default(cuid())
975
1007
  userId String
@@ -1121,82 +1153,88 @@ model UserSubscription {
1121
1153
  }
1122
1154
 
1123
1155
  model Service {
1124
- id String @id @default(cuid())
1125
- serviceType ServiceTypes?
1126
- serviceStatus ServiceStatus @default(Draft)
1127
- serviceCondition ServiceCondition @default(Pending)
1128
- subscriptionStatus ServiceSubscriptionStatus @default(None)
1129
- isApproved Boolean @default(false)
1130
- ownerId String?
1131
- creatorId String?
1132
- createdAt DateTime @default(now())
1133
- updatedAt DateTime? @updatedAt
1134
- serviceName String?
1135
- tagline String?
1136
- place String?
1137
- googlePlaceId String?
1138
- street String?
1139
- city String?
1140
- state String?
1141
- zipCode String?
1142
- country String?
1143
- description String?
1144
- pocName String?
1145
- pocPhoneNumber String?
1146
- pocBusinessEmail String?
1147
- additionalInfo String?
1148
- coverPhoto String?
1149
- mission String?
1150
- communityInvolvement String?
1151
- emergencyContact String?
1152
- contactDetails String?
1153
- cancellationPolicy ServiceCancellationPolicy? @default(None)
1154
- availableHours String?
1155
- allowsInstantBooking Boolean @default(false)
1156
- instantBookingLeadTimeHours Int @default(0)
1157
- displayGoogleReviewsOnDetailPage Boolean @default(true)
1158
- displayBashReviewsOnDetailPage Boolean @default(true)
1159
- serviceRating Float? @default(0)
1160
- totalRatings Int? @default(0)
1161
- stripeAccountId String?
1162
- targetAudienceId String? @unique
1163
- visibility VisibilityPreference @default(Public)
1164
- bashesNotInterestedIn BashEventType[]
1165
- customExcludedEventTypes String[] @default([])
1166
- volunteerServiceId String? @unique
1167
- eventServiceId String? @unique
1168
- entertainmentServiceId String? @unique
1169
- vendorId String? @unique
1170
- exhibitorId String? @unique
1171
- sponsorId String? @unique
1172
- venueId String? @unique
1173
- organizationId String? @unique
1174
- associatedServicesReferencingMe AssociatedService[]
1175
- exhibitorBookingRequests ExhibitorBookingRequest[] @relation("ExhibitorBookingService")
1176
- notification Notification[]
1177
- creator User? @relation("CreatedService", fields: [creatorId], references: [id])
1178
- entertainmentService EntertainmentService? @relation(fields: [entertainmentServiceId], references: [id], onDelete: Cascade)
1179
- eventService EventService? @relation(fields: [eventServiceId], references: [id], onDelete: Cascade)
1180
- exhibitor Exhibitor? @relation(fields: [exhibitorId], references: [id], onDelete: Cascade)
1181
- organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1182
- owner User? @relation("OwnedService", fields: [ownerId], references: [id])
1183
- sponsor Sponsor? @relation(fields: [sponsorId], references: [id], onDelete: Cascade)
1184
- stripeAccount StripeAccount? @relation(fields: [stripeAccountId], references: [id], onDelete: Restrict)
1185
- targetAudience TargetAudience? @relation(fields: [targetAudienceId], references: [id], onDelete: Cascade)
1186
- vendor Vendor? @relation(fields: [vendorId], references: [id], onDelete: Cascade)
1187
- venue Venue? @relation(fields: [venueId], references: [id], onDelete: Cascade)
1188
- serviceBlocks ServiceBlock[] @relation("ServiceBlocks")
1189
- bookings ServiceBooking[]
1190
- serviceLinks ServiceLink[]
1191
- serviceRatesAssociation ServiceRatesAssociation?
1192
- sponsorBookingRequests SponsorBookingRequest[] @relation("SponsorBookingService")
1193
- favoritedBy UserFavorite[]
1194
- userPromoCodeRedemption UserPromoCodeRedemption[]
1195
- vendorBookingRequests VendorBookingRequest[] @relation("VendorBookingService")
1196
- volunteerService VolunteerService? @relation("ServiceToVolunteer")
1197
- associatedBashesReferencingMe AssociatedBash[] @relation("AssociatedBashToService")
1198
- bashEvent BashEvent[] @relation("BashEventToService")
1199
- media Media[] @relation("MediaToService")
1156
+ id String @id @default(cuid())
1157
+ serviceType ServiceTypes?
1158
+ serviceStatus ServiceStatus @default(Draft)
1159
+ serviceCondition ServiceCondition @default(Pending)
1160
+ subscriptionStatus ServiceSubscriptionStatus @default(None)
1161
+ isApproved Boolean @default(false)
1162
+ ownerId String?
1163
+ creatorId String?
1164
+ createdAt DateTime @default(now())
1165
+ updatedAt DateTime? @updatedAt
1166
+ serviceName String?
1167
+ tagline String?
1168
+ place String?
1169
+ googlePlaceId String?
1170
+ street String?
1171
+ city String?
1172
+ state String?
1173
+ zipCode String?
1174
+ country String?
1175
+ description String?
1176
+ pocName String?
1177
+ pocPhoneNumber String?
1178
+ pocBusinessEmail String?
1179
+ additionalInfo String?
1180
+ coverPhoto String?
1181
+ mission String?
1182
+ communityInvolvement String?
1183
+ emergencyContact String?
1184
+ contactDetails String?
1185
+ cancellationPolicy ServiceCancellationPolicy? @default(None)
1186
+ availableHours String?
1187
+ allowsInstantBooking Boolean @default(false)
1188
+ instantBookingLeadTimeHours Int @default(0)
1189
+ displayGoogleReviewsOnDetailPage Boolean @default(true)
1190
+ displayBashReviewsOnDetailPage Boolean @default(true)
1191
+ serviceRating Float? @default(0)
1192
+ totalRatings Int? @default(0)
1193
+ stripeAccountId String?
1194
+ targetAudienceId String? @unique
1195
+ visibility VisibilityPreference @default(Public)
1196
+ bashesNotInterestedIn BashEventType[]
1197
+ customExcludedEventTypes String[] @default([])
1198
+ volunteerServiceId String? @unique
1199
+ eventServiceId String? @unique
1200
+ entertainmentServiceId String? @unique
1201
+ vendorId String? @unique
1202
+ exhibitorId String? @unique
1203
+ sponsorId String? @unique
1204
+ venueId String? @unique
1205
+ organizationId String? @unique
1206
+ isFreeFirstListing Boolean @default(false)
1207
+ monthlyPrice Decimal @default(0)
1208
+ serviceListingStripeSubscriptionId String?
1209
+ associatedServicesReferencingMe AssociatedService[]
1210
+ exhibitorBookingRequests ExhibitorBookingRequest[] @relation("ExhibitorBookingService")
1211
+ notification Notification[]
1212
+ creator User? @relation("CreatedService", fields: [creatorId], references: [id])
1213
+ entertainmentService EntertainmentService? @relation(fields: [entertainmentServiceId], references: [id], onDelete: Cascade)
1214
+ eventService EventService? @relation(fields: [eventServiceId], references: [id], onDelete: Cascade)
1215
+ exhibitor Exhibitor? @relation(fields: [exhibitorId], references: [id], onDelete: Cascade)
1216
+ organization Organization? @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1217
+ owner User? @relation("OwnedService", fields: [ownerId], references: [id])
1218
+ sponsor Sponsor? @relation(fields: [sponsorId], references: [id], onDelete: Cascade)
1219
+ stripeAccount StripeAccount? @relation(fields: [stripeAccountId], references: [id], onDelete: Restrict)
1220
+ targetAudience TargetAudience? @relation(fields: [targetAudienceId], references: [id], onDelete: Cascade)
1221
+ vendor Vendor? @relation(fields: [vendorId], references: [id], onDelete: Cascade)
1222
+ venue Venue? @relation(fields: [venueId], references: [id], onDelete: Cascade)
1223
+ serviceBlocks ServiceBlock[] @relation("ServiceBlocks")
1224
+ bookings ServiceBooking[]
1225
+ serviceLinks ServiceLink[]
1226
+ serviceRatesAssociation ServiceRatesAssociation?
1227
+ sponsorBookingRequests SponsorBookingRequest[] @relation("SponsorBookingService")
1228
+ favoritedBy UserFavorite[]
1229
+ userPromoCodeRedemption UserPromoCodeRedemption[]
1230
+ vendorBookingRequests VendorBookingRequest[] @relation("VendorBookingService")
1231
+ volunteerService VolunteerService? @relation("ServiceToVolunteer")
1232
+ associatedBashesReferencingMe AssociatedBash[] @relation("AssociatedBashToService")
1233
+ bashEvent BashEvent[] @relation("BashEventToService")
1234
+ media Media[] @relation("MediaToService")
1235
+
1236
+ @@index([serviceListingStripeSubscriptionId])
1237
+ @@index([isFreeFirstListing])
1200
1238
  }
1201
1239
 
1202
1240
  model StripeAccount {
@@ -1291,31 +1329,41 @@ model EntertainmentService {
1291
1329
  }
1292
1330
 
1293
1331
  model Vendor {
1294
- id String @id @default(cuid())
1332
+ id String @id @default(cuid())
1295
1333
  serviceRangeId String?
1296
1334
  vendorServiceTypes VendorServiceType[]
1297
1335
  vendorServiceSubType String?
1298
1336
  yearsOfExperience YearsOfExperience
1299
- crowdSizeId String? @unique
1337
+ crowdSizeId String? @unique
1300
1338
  goodsOrServices String[]
1301
1339
  menuItems String?
1302
1340
  venueTypes String[]
1303
- secondaryVenueTypes String[] @default([])
1341
+ secondaryVenueTypes String[] @default([])
1304
1342
  vendorType String?
1305
1343
  subType String?
1306
1344
  otherSubType String?
1307
1345
  detailsText String?
1308
- minBoothFeeCents Int? @default(0)
1309
- maxBoothFeeCents Int? @default(0)
1310
- preferredBoothFeeCents Int? @default(0)
1311
- service Service?
1312
- crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id], onDelete: Cascade)
1313
- serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1314
- vendorBids VendorBid[]
1315
- insurance VendorInsurance?
1316
- permits VendorPermit[]
1317
- preferences VendorPreferences?
1318
- spaceRequirements VendorSpaceRequirements?
1346
+ minBoothFeeCents Int? @default(0)
1347
+ maxBoothFeeCents Int? @default(0)
1348
+ preferredBoothFeeCents Int? @default(0)
1349
+
1350
+ // Pricing Model Fields
1351
+ pricingModel PricingModel? @default(CUSTOM)
1352
+ baseRateCents Int? // Base rate in cents
1353
+ rateUnit String? // "per_person", "per_hour", "per_day", "flat"
1354
+ minimumChargeCents Int? // Minimum booking amount in cents
1355
+ minimumQuantity Int? // Minimum attendees/hours/days
1356
+ tierPricing Json? // For tiered pricing: [{name: "Bronze", priceCents: 100000, description: "..."}, ...]
1357
+ pricingNotes String? // Additional pricing details or terms
1358
+
1359
+ service Service?
1360
+ crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id], onDelete: Cascade)
1361
+ serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1362
+ vendorBids VendorBid[]
1363
+ insurance VendorInsurance?
1364
+ permits VendorPermit[]
1365
+ preferences VendorPreferences?
1366
+ spaceRequirements VendorSpaceRequirements?
1319
1367
  }
1320
1368
 
1321
1369
  model VendorSpaceRequirements {
@@ -1413,9 +1461,19 @@ model Exhibitor {
1413
1461
  goodsOrServices String[]
1414
1462
  venueTypes String[]
1415
1463
  secondaryVenueTypes String[] @default([])
1416
- crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id], onDelete: Cascade)
1417
- serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1418
- service Service?
1464
+
1465
+ // Pricing Model Fields
1466
+ pricingModel PricingModel? @default(CUSTOM)
1467
+ baseRateCents Int? // Base rate in cents
1468
+ rateUnit String? // "per_person", "per_hour", "per_day", "flat"
1469
+ minimumChargeCents Int? // Minimum booking amount in cents
1470
+ minimumQuantity Int? // Minimum attendees/hours/days
1471
+ tierPricing Json? // For tiered pricing
1472
+ pricingNotes String? // Additional pricing details or terms
1473
+
1474
+ crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id], onDelete: Cascade)
1475
+ serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1476
+ service Service?
1419
1477
  }
1420
1478
 
1421
1479
  model Sponsor {
@@ -1425,9 +1483,19 @@ model Sponsor {
1425
1483
  crowdSizeId String? @unique
1426
1484
  goodsOrServices String[]
1427
1485
  menuItems String?
1428
- service Service?
1429
- crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id])
1430
- serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1486
+
1487
+ // Pricing Model Fields
1488
+ pricingModel PricingModel? @default(CUSTOM)
1489
+ baseRateCents Int? // Base rate in cents
1490
+ rateUnit String? // "per_person", "per_hour", "per_day", "flat"
1491
+ minimumChargeCents Int? // Minimum booking amount in cents
1492
+ minimumQuantity Int? // Minimum attendees/hours/days
1493
+ tierPricing Json? // For tiered pricing: [{name: "Bronze", priceCents: 100000}, ...]
1494
+ pricingNotes String? // Additional pricing details or terms
1495
+
1496
+ service Service?
1497
+ crowdSize AmountOfGuests? @relation(fields: [crowdSizeId], references: [id])
1498
+ serviceRange ServiceRange? @relation(fields: [serviceRangeId], references: [id])
1431
1499
  }
1432
1500
 
1433
1501
  model Venue {
@@ -2241,6 +2309,8 @@ enum NotificationType {
2241
2309
  ServiceBookingCancelled
2242
2310
  ServiceBookingConfirmed
2243
2311
  Message
2312
+ ConnectionRequest
2313
+ ConnectionAccepted
2244
2314
  }
2245
2315
 
2246
2316
  enum NotificationPriority {
@@ -2516,6 +2586,13 @@ enum TransferRequestStatus {
2516
2586
  Expired
2517
2587
  }
2518
2588
 
2589
+ enum ConnectionStatus {
2590
+ Pending
2591
+ Accepted
2592
+ Rejected
2593
+ Blocked
2594
+ }
2595
+
2519
2596
  enum ServiceStatus {
2520
2597
  Draft
2521
2598
  Created
@@ -3855,6 +3932,15 @@ enum ServiceTypes {
3855
3932
  Organizations
3856
3933
  }
3857
3934
 
3935
+ enum PricingModel {
3936
+ FLAT_FEE // Fixed amount: "$500 for vendor booth"
3937
+ PER_ATTENDEE // Per person: "$50 per expected attendee"
3938
+ HOURLY // Per hour: "$200/hour, 4-hour minimum"
3939
+ PER_DAY // Per day: "$1,000/day"
3940
+ TIERED // Multiple options: "Bronze $1K, Silver $2.5K, Gold $5K"
3941
+ CUSTOM // Custom pricing structure with base rate + notes for negotiation
3942
+ }
3943
+
3858
3944
  enum EntityType {
3859
3945
  EVENT_SERVICE
3860
3946
  ENTERTAINMENT_SERVICE