// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" binaryTargets = ["native"] } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) email String @unique name String? password String role Role @default(USER) isEmailVerified Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt Token Token[] } model Token { id Int @id @default(autoincrement()) token String type TokenType expires DateTime blacklisted Boolean createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id]) userId Int memberId Int? } enum Role { USER ADMIN } enum TokenType { ACCESS REFRESH RESET_PASSWORD VERIFY_EMAIL } // REQ0044/near_by_page model Member { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // email String @unique name String? Event Event[] eventId Int? age Int? rank String @default("Beginner") verified String @default("NOT_VERIFIED") hobbies String[] @default([]) distance String @default("10km") location_area String @default("Sai Kung") greetings String @default("Hi, I am") gender String @default("not disclosed") tall_cm Int? weight_kg Int? occupation String @default("not disclosed") language String[] @default([]) education String[] @default([]) self_introduction String @default("") music String[] @default([]) pets String[] @default([]) character String[] @default([]) } // REQ0042/event-detail model Event { id Int @id @default(autoincrement()) eventDate DateTime title String joinMembers Member[] // Assuming Member model exists price Float currency String duration_m Int ageBottom Int ageTop Int location String avatar String // Assuming avatar is stored as a file path or URL Order Order[] } model Order { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // title String? order_time DateTime @default(now()) last_payment_date DateTime? status String @default("pending") Event Event[] } // cms_backend // mapped to IProductReview model ProductReview { id Int @id @default(autoincrement()) name String rating Float comment String helpful Float avatarUrl String postedAt DateTime @default(now()) // Assuming IDateValue maps to DateTime isPurchased Boolean attachments String[] ProductItem ProductItem[] // createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } // mapped to IProductFilters model ProductFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // rating String gender String[] category String colors String[] priceRange Int[] } // mapped to IProductTableFilters model ProductTableFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // stock String[] publish String[] } // mapped to IProductItem model ProductItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // sku String name String code String price Float taxes Float tags String[] sizes String[] publish String gender String[] coverUrl String images String[] colors String[] quantity Int category String available Int totalSold Int description String totalRatings Float totalReviews Int inventoryType String subDescription String priceSale Float? newLabel Json saleLabel Json ratings Json[] reviews ProductReview[] testing Helloworld[] } // model Helloworld { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt hello String @default("") ProductItem ProductItem[] } model MailSender { // Define fields for MailSender here // Example: id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // email String name String avatarUrl String? // // SendMail Mail[] @relation("mail_from") // ReceiveMail Mail[] @relation("mail_to") } model MailLabel { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // type String name String color String unreadCount Int? } model MailAttachment { // Define fields for MailAttachment here // Example: id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // filename String url String size Int // Mail Mail? @relation(fields: [mailId], references: [id]) // mailId Int? } model Mail { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // folder String labelIds String[] subject String isUnread Boolean isImportant Boolean message String isStarred Boolean // // from MailSender @relation("mail_from", fields: [mailFromId], references: [id]) // mailFromId Int // // to MailSender[] @relation("mail_to") // // attachments MailAttachment[] } model OrderHistory { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // orderTime DateTime paymentTime DateTime deliveryTime DateTime completionTime DateTime timeline Json[] OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderShippingAddress { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // fullAddress String phoneNumber String OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderPayment { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // cardType String cardNumber String OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderDelivery { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // shipBy String speedy String trackingNumber String OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderCustomer { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String email String avatarUrl String ipAddress String OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderProductItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // sku String name String price Float coverUrl String quantity Float OrderItem OrderItem? @relation(fields: [orderItemId], references: [id]) orderItemId Int? } model OrderItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // taxes Float status String shipping Float discount Float subtotal Float orderNumber String totalAmount Float totalQuantity Float history OrderHistory[] payment OrderPayment[] customer OrderCustomer[] delivery OrderDelivery[] items OrderProductItem[] shippingAddress OrderShippingAddress[] } // src/types/tour.ts model TourGuide { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String avatarUrl String phoneNumber String TourItem TourItem? @relation(fields: [tourItemId], references: [id]) tourItemId Int? TourFilters TourFilters? @relation(fields: [tourFiltersId], references: [id]) tourFiltersId Int? } model TourBooker { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String guests Float avatarUrl String TourItem TourItem? @relation(fields: [tourItemId], references: [id]) tourItemId Int? } model TourItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String price Float tags String[] content String publish String images String[] durations String priceSale Float totalViews Float services String[] destination String ratingNumber Float bookers TourBooker[] tourGuides TourGuide[] available Json } model TourFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // services String[] destination String[] tourGuides TourGuide[] endDate DateTime startDate DateTime } // src/types/user.ts model UserProfileCover { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String coverUrl String avatarUrl String } model UserProfile { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // role String quote String email String school String country String company String totalFollowers Float totalFollowing Float // socialLinks: ISocialLink } model UserProfileFollower { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String country String avatarUrl String } model UserProfileGallery { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // title String imageUrl String postedAt DateTime } model UserProfileFriend { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String avatarUrl String } model UserProfilePost { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // media String message String personLikes Json[] comments Json[] } model UserCard { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String coverUrl String avatarUrl String totalPosts Float totalFollowers Float totalFollowing Float } model UserItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String city String role String email String state String status String address String country String zipCode String company String avatarUrl String phoneNumber String isVerified Boolean } model UserAccountBillingHistory { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // price Float invoiceNumber String } // src/types/blog.ts model PostFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // publish String } model PostHero { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // title String coverUrl String author Json? } model PostComment { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String message String avatarUrl String postedAt DateTime users Json[] replyComment Json[] PostItem PostItem? @relation(fields: [postItemId], references: [id]) postItemId Int? } model PostItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // title String tags String[] publish String content String coverUrl String metaTitle String totalViews Float totalShares Float description String totalComments Float totalFavorites Float metaKeywords String[] metaDescription String comments PostComment[] author Json favoritePerson Json[] } // src/types/calendar.ts model CalendarFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // colors String[] startDate DateTime endDate DateTime } model CalendarRange { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // start String? end String? } model CalendarEvent { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // color String title String allDay Boolean description String end String start String } // src/types/chat.ts model ChatAttachment { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String size Int type String path String preview String ChatMessage ChatMessage? @relation(fields: [chatMessageId], references: [id]) chatMessageId Int? } model ChatMessage { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // body String senderId String contentType String attachments ChatAttachment[] ChatConversation ChatConversation? @relation(fields: [chatConversationId], references: [id]) chatConversationId Int? } model ChatParticipant { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String email String address String avatarUrl String phoneNumber String lastActivity DateTime status String ChatConversation ChatConversation? @relation(fields: [chatConversationId], references: [id]) chatConversationId Int? } model ChatConversation { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // type String unreadCount Int messages ChatMessage[] participants ChatParticipant[] } model ChatConversations { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // allIds String[] byId Json } // src/types/checkout.ts model CheckoutItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String size String price Float coverUrl String colors String[] quantity Float available Float subtotal Float CheckoutState CheckoutState? @relation(fields: [checkoutStateId], references: [id]) checkoutStateId Int? } model CheckoutDeliveryOption { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // label String value Float description String } model CheckoutPaymentOption { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // value String label String description String } model CheckoutCardOption { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // value String label String } model CheckoutState { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // total Float subtotal Float discount Float shipping Float totalItems Float items CheckoutItem[] billing AddressItem[] } // common.ts model PaymentCard { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt cardType String primary Boolean? cardNumber String } model AddressItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt name String company String? primary Boolean? fullAddress String phoneNumber String? addressType String? CheckoutState CheckoutState[] checkoutStateId Int? InvoiceTo Invoice[] @relation("invoice_to") InvoiceFrom Invoice[] @relation("invoice_from") } model SocialLink { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt twitter String facebook String linkedin String instagram String } // file.ts model FileFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt name String type String[] endDate DateTime startDate DateTime } model FileShared { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt name String email String avatarUrl String permission String FolderManager FolderManager? @relation(fields: [folderManagerId], references: [id]) folderManagerId Int? FileManager FileManager? @relation(fields: [fileManagerId], references: [id]) fileManagerId Int? } model FolderManager { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt url String name String size Int type String tags String[] totalFiles Int? isFavorited Boolean modifiedAt DateTime shared FileShared[] } model FileManager { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt url String name String size Int type String tags String[] isFavorited Boolean modifiedAt DateTime shared FileShared[] } model FileStore { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt modifiedAt DateTime @updatedAt // name String path String preview String size Float type String } // invoice.ts model InvoiceTableFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String status String service String[] endDate DateTime startDate DateTime } model InvoiceItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // title String price Float total Float service String quantity Int description String Invoice Invoice? @relation(fields: [invoiceId], references: [id]) invoiceId Int? } model Invoice { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // sent Int taxes Float status String subtotal Float discount Float shipping Float totalAmount Float dueDate DateTime invoiceNumber String items InvoiceItem[] createDate DateTime invoiceTo AddressItem[] @relation("invoice_to") invoiceFrom AddressItem[] @relation("invoice_from") } // job.ts model JobFilters { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // roles String[] experience String benefits String[] locations String[] employmentTypes String[] } model JobCandidate { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String avatarUrl String JobItem JobItem[] } model JobCompany { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String logo String phoneNumber String fullAddress String JobItem JobItem[] } model JobSalary { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // type String price Float negotiable Boolean JobItem JobItem[] } model JobItem { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // role String title String content String publish String skills String[] totalViews Float experience String benefits String[] locations String[] employmentTypes String[] workingSchedule String[] expiredDate DateTime? @db.Timestamp(3) salary JobSalary[] company JobCompany[] candidates JobCandidate[] } // kanban.ts model KanbanColumn { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String Kanban Kanban? @relation(fields: [kanbanId], references: [id]) kanbanId Int? } model KanbanComment { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String message String avatarUrl String messageType String KanbanTask KanbanTask? @relation(fields: [kanbanTaskId], references: [id]) kanbanTaskId Int? } model KanbanAssignee { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String role String email String status String address String avatarUrl String phoneNumber String lastActivity DateTime KanbanTask KanbanTask? @relation(fields: [kanbanTaskId], references: [id]) kanbanTaskId Int? } model Reporter { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String avatarUrl String KanbanTask KanbanTask? @relation(fields: [kanbanTaskId], references: [id]) kanbanTaskId Int? } model KanbanTask { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // name String status String priority String labels String[] description String? attachments String[] comments KanbanComment[] assignee KanbanAssignee[] due DateTime[] reporter Reporter[] Kanban Kanban? @relation(fields: [kanbanId], references: [id]) kanbanId Int? } model Kanban { id Int @id @default(autoincrement()) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // columns KanbanColumn[] tasks KanbanTask[] }