generator client_cms { provider = "prisma-client-js" output = "clients/cms" } datasource db_cms { provider = "mysql" url = env("DATABASE_URL") } model AdminAccount { UUID_AA String @id @default(uuid()) Username_AA String @unique Email_AA String @unique Password_AA String LastLogin_AA DateTime? UpdatedAt_AA DateTime @updatedAt CreatedAt_AA DateTime @default(now()) } model AppCredential { UUID_AC String @id @default(uuid()) CreatedAt_AC DateTime @default(now()) TokenCredential_AC String @unique UpdatedAt_AC DateTime @updatedAt } model AppContent { UUID_APC String @id @default(uuid()) Content_APC String @db_cms.Text CreatedAt_APC DateTime @default(now()) Filename_APC String? Title_APC String UpdatedAt_APC DateTime @updatedAt Url_APC String? Type_APC ContentType CorpType_APC CorpType TargetUrl_APC String? } model AppCampaign { UUID_ACP String @id @default(uuid()) Title_ACP String Content_ACP String @db_cms.Text Date_ACP DateTime Status_ACP CampaignStatus @default(pending) UpdatedAt_ACP DateTime @updatedAt CreatedAt_ACP DateTime @default(now()) TargetUsers_ACP Int? @default(0) SentCount_ACP Int? @default(0) SuccessCount_ACP Int? @default(0) FailureCount_ACP Int? @default(0) DeliveryRate_ACP Float? @default(0) SentAt_ACP DateTime? CompletedAt_ACP DateTime? ErrorMessage_ACP String? @db_cms.Text Data_ACP String? @db_cms.Text ImageUrl_ACP String? CampaignDelivery CampaignDelivery[] } model CampaignDelivery { UUID_CD String @id @default(uuid()) @db_cms.Char(36) Campaign_CD String UserID_CD String Token_CD String Status_CD DeliveryStatus @default(pending) SentAt_CD DateTime? DeliveredAt_CD DateTime? FailedAt_CD DateTime? ErrorMessage_CD String? @db_cms.Text ResponseData_CD String? @db_cms.Text CreatedAt_CD DateTime @default(now()) UpdatedAt_CD DateTime @updatedAt AppCampaign AppCampaign @relation(fields: [Campaign_CD], references: [UUID_ACP], onDelete: Cascade) @@index([Campaign_CD]) @@index([UserID_CD]) } model UsersToken { UUID_UT String @id @default(uuid()) UserID_UT String @unique Token_UT String @unique UpdatedAt_UT DateTime @updatedAt CreatedAt_UT DateTime @default(now()) UsersActivity UsersActivity[] } model UsersActivity { UUID_UA String @id @default(uuid()) UUID_UT String ActivityType_UA ActivityType Params_UA String NotifyAt_UA DateTime @default(now()) UpdatedAt_UA DateTime @updatedAt CreatedAt_UA DateTime @default(now()) Processed_UA Boolean @default(false) UsersToken UsersToken @relation(fields: [UUID_UT], references: [UUID_UT], onDelete: Cascade) @@index([UUID_UT], map: "UsersActivity_UUID_UT_fkey") } model CrashReport { UUID_CR String @id @default(uuid()) AppId_CR String AppVersion_CR String BuildVersion_CR String? CrashId_CR String @unique SessionId_CR String? UserId_CR String? CrashType_CR String ExceptionName_CR String? ExceptionReason_CR String? @db_cms.Text StackTrace_CR String? @db_cms.LongText ThreadName_CR String? IsFatal_CR Boolean @default(true) Severity_CR CrashSeverity @default(fatal) Status_CR CrashStatus @default(new) DeviceModel_CR String? DeviceBrand_CR String? OSName_CR DeviceOS @default(android) OSVersion_CR String? Architecture_CR String? AvailableRam_CR BigInt? TotalRam_CR BigInt? AvailableDisk_CR BigInt? TotalDisk_CR BigInt? BatteryLevel_CR Float? IsRooted_CR Boolean? @default(false) IsDebugger_CR Boolean? @default(false) NetworkType_CR String? Breadcrumbs_CR Json? CustomData_CR Json? Logs_CR Json? CrashCount_CR Int @default(1) FirstOccurred_CR DateTime @default(now()) LastOccurred_CR DateTime @default(now()) AffectedUsers_CR Int @default(1) CreatedAt_CR DateTime @default(now()) UpdatedAt_CR DateTime @updatedAt ResolvedAt_CR DateTime? ResolvedBy_CR String? } model CrashSession { UUID_CS String @id @default(uuid()) SessionId_CS String @unique AppId_CS String AppVersion_CS String UserId_CS String? StartedAt_CS DateTime EndedAt_CS DateTime? Duration_CS Int? IsCrashed_CS Boolean @default(false) CrashCount_CS Int @default(0) DeviceModel_CS String? OSVersion_CS String? CreatedAt_CS DateTime @default(now()) UpdatedAt_CS DateTime @updatedAt } model CrashAnalytics { UUID_CA String @id @default(uuid()) AppId_CA String AppVersion_CA String Date_CA DateTime @db_cms.Date TotalCrashes_CA Int @default(0) FatalCrashes_CA Int @default(0) NonFatalCrashes_CA Int @default(0) UniqueCrashes_CA Int @default(0) AffectedUsers_CA Int @default(0) TotalSessions_CA Int @default(0) CrashedSessions_CA Int @default(0) CrashFreeRate_CA Float? TopCrashes_CA Json? CreatedAt_CA DateTime @default(now()) UpdatedAt_CA DateTime @updatedAt @@unique([AppId_CA, AppVersion_CA, Date_CA]) } model AINotification { UUID_AIN String @id @default(uuid()) UserID_AIN String AnalyzedActivities_AIN Int @default(0) ActivityTypes_AIN String? @db_cms.Text GeneratedTitle_AIN String GeneratedDesc_AIN String @db_cms.Text SentStatus_AIN DeliveryStatus @default(pending) SentAt_AIN DateTime? DeliveredAt_AIN DateTime? FailedAt_AIN DateTime? ErrorMessage_AIN String? @db_cms.Text FCMMessageId_AIN String? ResponseTime_AIN Int? ProcessingTime_AIN Int? ActivityTimeRange_AIN Int @default(60) AIModel_AIN String @default("google/gemma-3n-e4b-it") ScheduledAt_AIN DateTime? PredictedConfidence_AIN Int? PredictionReasoning_AIN String? @db_cms.VarChar(255) UserEngagementPattern_AIN String? @db_cms.VarChar(50) DelayMinutes_AIN Int? CreatedAt_AIN DateTime @default(now()) UpdatedAt_AIN DateTime @updatedAt @@index([UserID_AIN]) @@index([SentStatus_AIN]) @@index([CreatedAt_AIN]) @@index([SentStatus_AIN, ScheduledAt_AIN], name: "idx_scheduled_notifications") @@index([UserID_AIN, UserEngagementPattern_AIN], name: "idx_user_pattern") } model AINotificationAnalytics { UUID_ANA String @id @default(uuid()) Date_ANA DateTime @unique @db_cms.Date TotalAnalyzed_ANA Int @default(0) TotalGenerated_ANA Int @default(0) TotalSent_ANA Int @default(0) TotalDelivered_ANA Int @default(0) TotalFailed_ANA Int @default(0) DeliveryRate_ANA Float? @default(0) AvgResponseTime_ANA Float? @default(0) AvgProcessingTime_ANA Float? @default(0) TopActivityTypes_ANA Json? PopularTitles_ANA Json? ErrorBreakdown_ANA Json? CreatedAt_ANA DateTime @default(now()) UpdatedAt_ANA DateTime @updatedAt } model AppMenu { UUID_AM String @id @default(uuid()) Name_AM String Route_AM String Icon_AM String IsActive_AM Boolean @default(true) Badge_AM String? Order_AM Int @default(0) Type_AM MenuType @default(IN_APP_ROUTE) CreatedAt_AM DateTime @default(now()) UpdatedAt_AM DateTime @updatedAt @@index([Order_AM]) @@index([IsActive_AM]) } enum MenuType { IN_APP_ROUTE WEB_OPEN } enum CampaignStatus { failed pending cancelled completed } enum ContentType { splash promo article banner floatingWidget } enum CorpType { walanja simaya cifo } enum ActivityType { VisitHotel VisitRoom VisitRetail VisitCCTV VisitTopup VisitTransfer VisitSwap CheckBalance InputDepositAmount InputTransferAmount ScanQRCode SelectSwapPair ViewArticle ViewPromo ViewDiscount SearchHotel FilterHotel ViewHotelGallery CheckRoomAvail ViewProfile UpdateProfile ChangePIN ViewQRCode InitiateBooking SelectCheckInDate SelectCheckOutDate ViewBookingSummary SelectPaymentMethod ViewPaymentEstimate InitiatePayment CheckInternetBill ViewTransactionHistory ViewNotification ShareContent SaveFavorite ContactSupport ViewFAQ } enum DeliveryStatus { pending scheduled sent delivered failed cancelled } enum CrashSeverity { fatal error warning info } enum CrashStatus { new acknowledged resolved ignored } enum DeviceOS { android ios web desktop }