import { Controller, Post, UseGuards, Body, Get, Param, UsePipes, Put, UseInterceptors, ClassSerializerInterceptor, } from '@nestjs/common'; import { GameService } from './game.service'; import { AuthGuard } from '../shared/auth.guard'; import { User } from '../user/user.decorator'; import { GameDTO, FlagboxEventDTO } from './game.dto'; import { ValidationPipe } from '../shared/validation.pipe'; import { Roles } from '../shared/roles.decorator'; @Controller('game') export class GameController { constructor(private gameservice: GameService) {} @Post('new') @UseGuards(new AuthGuard()) @UsePipes(new ValidationPipe()) async newGame(@User('id') person, @Body() body: GameDTO) { return this.gameservice.createNewGame(person, body); } @Put('edit/:id') @Roles('admin') @UsePipes(new ValidationPipe()) async editGame(@Param('id') id: string, @Body() body: GameDTO) { return this.gameservice.editGame(id, body); } @Get('listgames') async listGames() { return this.gameservice.listGames(); } // ClassSerializerInterceptor removes excluded columns set in Entities @UseInterceptors(ClassSerializerInterceptor) @Get(':id') async returnGameInfo(@Param('id') id: string) { return this.gameservice.returnGameInfo(id); } @Get('flag/:id') async flagboxQuery(@Param('id') id: string) { return this.gameservice.flagboxQuery(id); } @Post('flag/:id') async flagboxEvent(@Param('id') id: string, @Body() data: FlagboxEventDTO) { return this.gameservice.flagboxEvent(id, data); } }