Stage 5: Add Prisma integration and enhance mission management
- Introduced Prisma as a dependency in package.json and updated pnpm-lock.yaml. - Created Prisma module and service for database interactions. - Added initial Prisma schema and migration for user, survivor, mission, and related entities. - Implemented throttling in the API using @nestjs/throttler for rate limiting. - Enhanced mission management logic to utilize Prisma for database transactions. - Updated missions controller and service to handle mission state and participant management. - Added Twitch PubSub service for real-time updates on mission states.
This commit is contained in:
80
apps/api/prisma/schema.prisma
Normal file
80
apps/api/prisma/schema.prisma
Normal file
@@ -0,0 +1,80 @@
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
output = "../../../node_modules/.prisma/client"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
opaqueUserId String @unique @map("twitch_opaque_user_id")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
survivors Survivor[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
model Survivor {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
userId String @map("user_id") @db.Uuid
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
channelId String @map("channel_id")
|
||||
name String @db.VarChar(32)
|
||||
state String @default("active")
|
||||
stats Json
|
||||
perkSlots Json @map("perk_slots")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
participants MissionParticipant[]
|
||||
|
||||
@@map("survivors")
|
||||
}
|
||||
|
||||
model Mission {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
groupId String? @map("group_id") @db.Uuid
|
||||
channelId String @map("channel_id")
|
||||
difficulty Int @db.SmallInt
|
||||
status String @default("active")
|
||||
encounterLibraryVersion String @map("encounter_library_version")
|
||||
startedAt DateTime @default(now()) @map("started_at")
|
||||
endedAt DateTime? @map("ended_at")
|
||||
tickIndex Int @default(0) @map("tick_index")
|
||||
nextTickAt DateTime @map("next_tick_at")
|
||||
participants MissionParticipant[]
|
||||
logs MissionLog[]
|
||||
|
||||
@@index([channelId])
|
||||
@@index([status, nextTickAt])
|
||||
@@map("missions")
|
||||
}
|
||||
|
||||
model MissionParticipant {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
missionId String @map("mission_id") @db.Uuid
|
||||
mission Mission @relation(fields: [missionId], references: [id])
|
||||
survivorId String @map("survivor_id") @db.Uuid
|
||||
survivor Survivor @relation(fields: [survivorId], references: [id])
|
||||
state String @default("active")
|
||||
hookCount Int @default(0) @map("hook_count") @db.SmallInt
|
||||
|
||||
@@unique([missionId, survivorId])
|
||||
@@map("mission_participants")
|
||||
}
|
||||
|
||||
model MissionLog {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
missionId String @map("mission_id") @db.Uuid
|
||||
mission Mission @relation(fields: [missionId], references: [id])
|
||||
tickIndex Int @map("tick_index")
|
||||
encounterKey String @map("encounter_key")
|
||||
renderedText String @map("rendered_text")
|
||||
seed String
|
||||
modifiersApplied Json @map("modifiers_applied")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
@@index([missionId, tickIndex])
|
||||
@@map("mission_logs")
|
||||
}
|
||||
Reference in New Issue
Block a user