diff --git a/prisma/data/ticket-categories.json b/prisma/data/ticket-categories.json new file mode 100644 index 0000000..1f26e23 --- /dev/null +++ b/prisma/data/ticket-categories.json @@ -0,0 +1,12 @@ +[ + { + "sequence": 1, + "symbol": "FREE", + "name": "Free" + }, + { + "sequence": 2, + "symbol": "PAID", + "name": "Paid" + } +] diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8dbe1bb..4905505 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -242,6 +242,9 @@ model Event { dateTimeStart DateTime @default(now()) dateTimeEnd DateTime @default(now()) + ticketCategoryId String? + tikcetCategory TicketCategory? @relation(fields: [ticketCategoryId], references: [id], onUpdate: Cascade, onDelete: Cascade) + statusId String status EventStatus @relation(fields: [statusId], references: [id]) @@ -260,6 +263,8 @@ model Event { imageId String? image EventImage? @relation(fields: [imageId], references: [id]) + tickets Ticket[] + organizerId String organizer User @relation("EventOrganizer", fields: [organizerId], references: [id]) applicants User[] @relation("EventApplicant") @@ -273,6 +278,7 @@ model Event { @@index([locationId]) @@index([formatId]) @@index([categoryId]) + @@index([ticketCategoryId]) @@index([mediaId]) @@index([organizerId]) } @@ -364,6 +370,41 @@ model Location { updatedAt DateTime @updatedAt } +// ----------------------------------------------------------------------------- +// Ticket Category +// ----------------------------------------------------------------------------- + +model TicketCategory { + id String @id @default(cuid()) + + sequence Int? @unique // 1, 2, 3, ... + symbol String @unique // FREE, PAID + name String @unique // Free, Paid + description String? @db.Text // Long description + + events Event[] +} + +// ----------------------------------------------------------------------------- +// Ticket +// ----------------------------------------------------------------------------- + +model Ticket { + id String @id @default(cuid()) + + name String // name of ticket like student ticket, general ticket, full ticket etc + price Int + description String? @db.Text // the description about the ticket like this ticket include zoom record + + eventId String? + event Event? @relation(fields: [eventId], references: [id]) + + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@index([eventId]) +} + // ----------------------------------------------------------------------------- // Examples // ----------------------------------------------------------------------------- diff --git a/prisma/seed.ts b/prisma/seed.ts index 6bc9d81..6d5b53d 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -14,6 +14,7 @@ import dataPostStatuses from "./data/post-statuses.json" import dataPosts from "./data/posts.json" import dataRoles from "./data/roles.json" import dataTags from "./data/tags.json" +import dataTicketCategories from "./data/ticket-categories.json" /** * Enable and disable seed items by commenting them @@ -30,6 +31,7 @@ const enabledSeedItems = [ "eventCategories", "eventFormats", "eventMedia", + "ticketCategories", ] async function main() { @@ -47,6 +49,7 @@ async function main() { eventFormats: seedEventFormats, eventMedia: seedEventMedia, events: seedEvents, + ticketCategories: seedTicketCategories, } for (const seedName of enabledSeedItems) { @@ -95,6 +98,28 @@ async function seedTags() { console.timeEnd(`🪧 Created User Tags: ${userTags.count} tags`) } +async function seedTicketCategories() { + console.info("\n🪧 Seed ticket categories") + console.info( + "🪧 Count ticket categories", + await prisma.ticketCategory.count(), + ) + // console.info("🪧 Deleted ticket categories", await prisma.ticketCategory.deleteMany()) + console.time("🪧 Upserted ticket categories") + + for (const statusRaw of dataTicketCategories) { + const status = await prisma.ticketCategory.upsert({ + where: { symbol: statusRaw.symbol }, + create: statusRaw, + update: statusRaw, + }) + console.info( + `🪧 Upserted ticket category ${status.symbol} / ${status.name}`, + ) + } + console.timeEnd("🪧 Upserted ticket categories") +} + async function seedRoles() { console.info("\n👑 Seed roles") console.info("👑 Count roles", await prisma.role.count()) diff --git a/prisma/utils/check-data.ts b/prisma/utils/check-data.ts index d6bceb7..32c2178 100644 --- a/prisma/utils/check-data.ts +++ b/prisma/utils/check-data.ts @@ -17,6 +17,10 @@ async function checkData() { console.info("🗓️ Count event categories", await prisma.eventCategory.count()) console.info("🗓️ Count event formats", await prisma.eventFormat.count()) console.info("🗓️ Count event media", await prisma.eventMedia.count()) + console.info( + "🗓️ Count ticket categories", + await prisma.ticketCategory.count(), + ) } checkData()