generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) name String @unique password String money Int @default(0) currentRunner Boolean @default(false) actions ChallengeAction[] geolocations Geolocation[] moneyUpdates MoneyUpdate[] trips TrainTrip[] } model Geolocation { id Int @id @default(autoincrement()) user User @relation(fields: [userId], references: [id]) userId Int longitude Float latitude Float speed Float accuracy Float altitude Float altitudeAccuracy Float timestamp DateTime @db.Timestamptz(3) } model Challenge { id Int @id @default(autoincrement()) title String @unique description String reward Int action ChallengeAction? } model ChallengeAction { id Int @id @default(autoincrement()) user User @relation(fields: [userId], references: [id]) userId Int challenge Challenge @relation(fields: [challengeId], references: [id]) challengeId Int @unique active Boolean @default(false) success Boolean @default(false) start DateTime @default(now()) @db.Timestamptz(3) end DateTime? @db.Timestamptz(3) penaltyStart DateTime? @db.Timestamptz(3) penaltyEnd DateTime? @db.Timestamptz(3) moneyUpdate MoneyUpdate? } model TrainTrip { id String @id user User @relation(fields: [userId], references: [id]) userId Int distance Float from String to String departureTime DateTime @db.Timestamptz(3) arrivalTime DateTime @db.Timestamptz(3) infoJson Json moneyUpdate MoneyUpdate? } model MoneyUpdate { id Int @id @default(autoincrement()) user User @relation(fields: [userId], references: [id]) userId Int before Int after Int reason MoneyUpdateType action ChallengeAction? @relation(fields: [actionId], references: [id]) actionId Int? @unique trip TrainTrip? @relation(fields: [tripId], references: [id]) tripId String? @unique } enum MoneyUpdateType { START WIN_CHALLENGE BUY_TRAIN }