/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
dev
backend/src/team/team.service.ts
69 строк
3 KB
kochkareal
chore: добавлен .gitattributes, нормализованы переносы строк (LF везде, кроме .bat/.cmd)
06 авг 2026, 15:18
06 авг 2026, 15:18
c25ef1b
Код
Авторство
О чём код?
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common'; import { PrismaService } from '../prisma/prisma.service'; import { GameConfig } from '../game/default-config'; import { remainingSec } from '../common/session-time'; import { availableCities } from '../economy/economy.calc'; @Injectable() export class TeamService { constructor(private readonly prisma: PrismaService) {} async join(publicCode: string, joinCode: string, nickname: string) { if (!publicCode || !joinCode || !nickname?.trim()) { throw new BadRequestException('Заполните код комнаты, код команды и имя игрока'); } const session = await this.prisma.gameSession.findUnique({ where: { publicCode: publicCode.toUpperCase() }, }); if (!session) throw new NotFoundException('Комната с таким кодом не найдена'); if (session.status === 'FINISHED') { throw new BadRequestException('Эта игра уже завершена'); } const team = await this.prisma.team.findUnique({ where: { sessionId_joinCode: { sessionId: session.id, joinCode: joinCode.toUpperCase() } }, }); if (!team) throw new NotFoundException('Неверный код команды'); const player = await this.prisma.player.create({ data: { teamId: team.id, nickname: nickname.trim().slice(0, 40) }, }); return { session, team, player }; } async getState(sessionId: string, teamId: string) { const session = await this.prisma.gameSession.findUnique({ where: { id: sessionId }, include: { teams: { orderBy: { createdAt: 'asc' }, include: { branches: { orderBy: { createdAt: 'asc' } } } } }, }); if (!session) throw new NotFoundException('Игровая сессия не найдена'); const myTeam = session.teams.find((t) => t.id === teamId); if (!myTeam) throw new NotFoundException('Команда не найдена в этой сессии'); const config = session.config as unknown as GameConfig; const openedKeys = myTeam.branches.map((b) => b.cityKey); return { status: session.status, remainingSec: remainingSec(session), transferEnabled: session.transferEnabled, sanctionsEnabled: session.sanctionsEnabled, theftEnabled: session.theftEnabled, config, myTeam, availableCities: availableCities(config, openedKeys), teams: session.teams.map((t) => ({ id: t.id, name: t.name, score: t.score, resources: t.resources, branches: t.branches, theftsUsed: t.theftsUsed, sanctionsUsed: t.sanctionsUsed, })), }; } }