diff --git a/src/game/game.controller.ts b/src/game/game.controller.ts index b79699c3e50130bc9a9537257c0130182ef278ea..95df1720d7e3d8bb05ecef9333cd71f23f5048e7 100644 --- a/src/game/game.controller.ts +++ b/src/game/game.controller.ts @@ -24,6 +24,7 @@ import { GameDTO, FlagboxEventDTO, GameStateDTO, newGameDTO } from './game.dto'; import { ValidationPipe } from '../shared/validation.pipe'; import { Roles, GameStates } from '../shared/guard.decorator'; import { GameEntity } from './game.entity'; +import { TickService } from './tick.service'; ///////////////////////////////////////////////////////////////////////// /// GameController /// @@ -36,7 +37,12 @@ import { GameEntity } from './game.entity'; @Controller('game') export class GameController { - constructor(private gameservice: GameService) {} + constructor( + private gameservice: GameService, + private tickservice: TickService, + ) { + this.tickservice.startTimer(); + } @Post('new') @UseGuards(new AuthGuard()) diff --git a/src/game/tick.service.ts b/src/game/tick.service.ts index 8417fe8b0b3b11c464bd4d837743ec3cabdcbc33..a12c45220f38fad268d0ca4ab86932f69aa54668 100644 --- a/src/game/tick.service.ts +++ b/src/game/tick.service.ts @@ -9,8 +9,6 @@ export class TickService { WARNING: multiple calls start multiple timers, if you need to use this service somewhere else remember to call startTimer method from somewhere else */ - - this.startTimer(); } private logger: Logger = new Logger('TickLogger'); diff --git a/src/replay/replay.controller.ts b/src/replay/replay.controller.ts index 1b42439569d54da8d6b2fa8f2986b28669e16a39..a2634a43bde3f4a3d57e08e4feed358f579ba505 100644 --- a/src/replay/replay.controller.ts +++ b/src/replay/replay.controller.ts @@ -7,6 +7,11 @@ import { ClassSerializerInterceptor, } from '@nestjs/common'; import { ReplayService } from './replay.service'; +import { Roles } from 'src/shared/guard.decorator'; + +/* +POST mockdata is mainly used for development, it can be removed from the code when needed, remember to remove service & test relations. +*/ @Controller('replay') export class ReplayController { @@ -21,6 +26,7 @@ export class ReplayController { // gets mockdata for specified Game @Post('mockdata/:id') + @Roles('admin') async mockData(@Param('id') gameId) { return this.replayservice.mockdata(gameId); } diff --git a/src/replay/replay.service.ts b/src/replay/replay.service.ts index 330029b4ea2846e9cd5325703520a372f5f93101..be423495a09073676a7c7b81916876b23f5ecf38 100644 --- a/src/replay/replay.service.ts +++ b/src/replay/replay.service.ts @@ -46,17 +46,13 @@ export class ReplayService { ) {} async replayData(gameId) { - // // this block returns game's initial location - // let gameObj = await this.gameRepository.findOne({ where: { id: gameId }, select: ['center'], }); let gamelocation = [gameObj.center.lat, gameObj.center.lng]; - // // this block returns all player data from the game - // let playerdata = await this.trackingRepository.find({ where: { game: gameId }, relations: ['faction', 'gamepersonId', 'gamepersonId.person'], @@ -75,9 +71,9 @@ export class ReplayService { return player['data']; }), ); - // + // this block returns all faction data from the game - // + let factions = await this.factionRepository.find({ game: gameId }); let currentFactions = factions.map(faction => { return { @@ -87,10 +83,8 @@ export class ReplayService { active: true, }; }); - let factionIds = factions.map(faction => faction.factionId); - // + // this block returns all score data from the game - // let currentScore = []; await Promise.all( factions.map(async faction => { @@ -109,9 +103,9 @@ export class ReplayService { ); }), ); - // + // this block returns all map drawings from the game - // + let refs = await this.mapdrawingRepository.find({ where: { gameId: gameId }, select: ['mapDrawingId'], @@ -124,9 +118,9 @@ export class ReplayService { }); }), ); - // + // this function returns all flagbox-events from the game - // + let objectivepoints = await this.returnObjectivePointInfo(gameId); return { @@ -204,7 +198,7 @@ export class ReplayService { // insert x amont of flagbox events // insert x amount of score ticks for score mockdata // use the game's initial geojson to draw game area - // + async mockdata(gameId) { // initial settings for mockdata // set the x amount of users to be created diff --git a/src/task/task.service.ts b/src/task/task.service.ts index 478a6c18059c5b0388aaad1abe2f3fcc2e05ce5e..d09eb1cda37435a1392563365bd25a23735ba6ea 100644 --- a/src/task/task.service.ts +++ b/src/task/task.service.ts @@ -32,10 +32,7 @@ export class TaskService { await this.taskRepository.insert(createdTask); // notify subscribers about a new task // if faction was set it notifies only faction members, else everyone - this.notificationGateway.server.emit( - task.faction != null ? task.faction.toString() : task.taskGame.toString(), - { type: 'task-update' }, - ); + await this.triggerTasks(task); return { message: 'Task added', }; @@ -59,15 +56,24 @@ export class TaskService { task.taskWinner = data.taskWinner; task.taskIsActive = false; await this.taskRepository.save(task); + await this.triggerTasks(task); return { message: 'Task updated and closed', }; } + private async triggerTasks(task) { + this.notificationGateway.server.emit( + task.faction != null ? task.faction.toString() : task.taskGame.toString(), + { type: 'task-update' }, + ); + } + async deleteTask(data: DeleteTaskDTO) { const task = await this.taskRepository.findOne({ taskId: data.taskId }); if (task) { await this.taskRepository.delete({ taskId: task.taskId }); + await this.triggerTasks(task); return { message: 'Task deleted', };