import { Injectable } from '@nestjs/common'; import { PrismaService } from '../prisma/prisma.service'; import { customAlphabet } from 'nanoid'; const nanoid = customAlphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 6); @Injectable() export class RoomsService { constructor(private prisma: PrismaService) {} async createRoom(hostId: string, questionPackId: string, settings?: any) { const code = nanoid(); const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours const room = await this.prisma.room.create({ data: { code, hostId, questionPackId, expiresAt, ...settings, }, include: { host: true, questionPack: true, }, }); await this.prisma.participant.create({ data: { userId: hostId, roomId: room.id, name: room.host.name || 'Host', role: 'HOST', }, }); return room; } async getRoomByCode(code: string) { return this.prisma.room.findUnique({ where: { code }, include: { host: true, participants: { include: { user: true }, }, questionPack: true, }, }); } async joinRoom(roomId: string, userId: string, name: string, role: 'PLAYER' | 'SPECTATOR') { return this.prisma.participant.create({ data: { userId, roomId, name, role, }, }); } async updateRoomStatus(roomId: string, status: 'WAITING' | 'PLAYING' | 'FINISHED') { return this.prisma.room.update({ where: { id: roomId }, data: { status }, }); } async updateParticipantScore(participantId: string, score: number) { return this.prisma.participant.update({ where: { id: participantId }, data: { score }, }); } }