enum BADGES { P1 P2 P3 D1 D2 D3 DAY1 V1Veteran } enum PERMISSION { ADMIN_EVENT ADMIN_USER ADMIN_USER_ADVANCED ADMIN_STATION ADMIN_KEYWORD ADMIN_MESSAGE ADMIN_KICK ADMIN_HELIPORT ADMIN_CHANGELOG ADMIN_BOOKING AUDIO PILOT DISPO LOGIN_NEXTCLOUD } model User { id String @id @default(uuid()) publicId String @unique firstname String lastname String email String @unique password String vatsimCid String? @map(name: "vatsim_cid") moodleId Int? @map(name: "moodle_id") changelogAck Boolean @default(false) // Settings: pathSelected Boolean @default(false) migratedFromV1 Boolean @default(false) settingsNtfyRoom String? @map(name: "settings_ntfy_room") settingsMicDevice String? @map(name: "settings_mic_device") settingsMicVolume Float? @map(name: "settings_mic_volume") settingsDmeVolume Float? @map(name: "settings_dme_volume") settingsRadioVolume Float? @map(name: "settings_funk_volume") settingsHideLastname Boolean @default(false) @map(name: "settings_hide_lastname") settingsAutoCloseMapPopup Boolean @default(false) @map(name: "settings_auto_close_map_popup") settingsUseHPGAsDispatcher Boolean @default(true) @map(name: "settings_use_hpg_as_dispatcher") // email Verification: emailVerificationToken String? @map(name: "email_verification_token") emailVerificationExpiresAt DateTime? @map(name: "email_verification_expires_at") emailVerified Boolean @default(false) image String? badges BADGES[] @default([]) permissions PERMISSION[] @default([]) createdAt DateTime @default(now()) @map(name: "created_at") updatedAt DateTime @default(now()) @map(name: "updated_at") isBanned Boolean @default(false) @map(name: "is_banned") // Duplicate handling: canonicalUserId String? @map(name: "canonical_user_id") CanonicalUser User? @relation("CanonicalUser", fields: [canonicalUserId], references: [id]) Duplicates User[] @relation("CanonicalUser") duplicateDetectedAt DateTime? @map(name: "duplicate_detected_at") duplicateReason String? @map(name: "duplicate_reason") // relations: oauthTokens OAuthToken[] discordAccounts DiscordAccount[] participants Participant[] EventAppointmentUser EventAppointment[] @relation("EventAppointmentUser") EventAppointment EventAppointment[] SentMessages ChatMessage[] @relation("SentMessages") ReceivedMessages ChatMessage[] @relation("ReceivedMessages") SentReports Report[] @relation("SentReports") ReceivedReports Report[] @relation("ReceivedReports") ReviewedReports Report[] @relation("ReviewedReports") Mission Mission[] MissionOnStationUsers MissionOnStationUsers[] ConnectedDispatcher ConnectedDispatcher[] ConnectedAircraft ConnectedAircraft[] PositionLog PositionLog[] Penaltys Penalty[] CreatedPenalties Penalty[] @relation("CreatedPenalties") Bookings Booking[] @@map(name: "users") } model DiscordAccount { id Int @id @default(autoincrement()) discordId String @unique @map(name: "discord_id") userId String @map(name: "user_id") email String @map(name: "email") username String @map(name: "username") avatar String? @map(name: "avatar") globalName String @map(name: "global_name") verified Boolean @default(false) accessToken String? @map(name: "access_token") refreshToken String @map(name: "refresh_token") tokenType String @map(name: "token_type") createdAt DateTime @default(now()) @map(name: "created_at") updatedAt DateTime @default(now()) @map(name: "updated_at") // relations: user User @relation(fields: [userId], references: [id], onDelete: Cascade) // Beziehung zu User @@map(name: "discord_accounts") }