generator client { provider = "prisma-client-js" }
datasource db { provider = "postgresql" url = env("DATABASE_URL") }
model User {
 id String @id @default(cuid())
 email String? @unique
 name String
 role Role @default(STUDENT)
 createdAt DateTime @default(now())
 accessCodes AccessCode[]
 sessions TrainingSession[]
 loginSessions LoginSession[]
 results TrainingResult[]
}
enum Role { ADMIN INSTRUCTOR STUDENT }
model AccessCode {
 id String @id @default(cuid())
 codeHash String @unique
 userId String
 user User @relation(fields:[userId],references:[id])
 activatedAt DateTime?
 expiresAt DateTime?
 createdAt DateTime @default(now())
 revokedAt DateTime?
}
model LoginSession {
 id String @id @default(cuid())
 tokenHash String @unique
 userId String
 user User @relation(fields:[userId],references:[id])
 createdAt DateTime @default(now())
 expiresAt DateTime
 revokedAt DateTime?
 @@index([userId,expiresAt])
}
model TrainingSession {
 id String @id @default(cuid())
 userId String
 user User @relation(fields:[userId],references:[id])
 device String
 startedAt DateTime @default(now())
 endedAt DateTime?
 events ActivityEvent[]
}
model ActivityEvent {
 id String @id @default(cuid())
 sessionId String
 session TrainingSession @relation(fields:[sessionId],references:[id])
 activity String
 startedAt DateTime
 endedAt DateTime
 speedKmh Float @default(0)
 @@index([sessionId,startedAt])
}

model TrainingResult {
 id String @id @default(cuid())
 userId String
 user User @relation(fields:[userId],references:[id],onDelete:Cascade)
 createdAt DateTime @default(now())
 kind String
 score Int
 total Int
 payload Json
 @@index([userId,createdAt])
}
