import { Controller, Put, Get, Param, UsePipes, ValidationPipe, Body, UseInterceptors, ClassSerializerInterceptor, } from '@nestjs/common'; import { DrawService } from './draw.service'; import { Roles, GameStates } from '../shared/guard.decorator'; import { MapDrawingDTO } from './mapdrawing.dto'; import { GamePerson } from 'src/game/gameperson.decorator'; ////////////////////////////////////////////////////////////////////////// /// DrawController /// /// /// /// Functions either insert or return MapDrawing data, /// /// Insert functions require user to have proper role (either gm /// /// or commander) in the game to be able store the data: /// /// MapDrawingDTO data to database. /// /// Data return functions require atleast spectator role. /// ////////////////////////////////////////////////////////////////////////// @Controller('draw') export class DrawController { constructor(private drawService: DrawService) {} @Put('mapdrawing/:id') @Roles('admin', 'factionleader') @GameStates('CREATED', 'STARTED', 'PAUSED') @UsePipes(new ValidationPipe()) async draw( @GamePerson() gameperson, @Param('id') gameId, @Body() data: MapDrawingDTO, ) { return this.drawService.draw(gameperson, gameId, data); } @Get('map/:id') @Roles('admin', 'factionleader', 'soldier', 'groupleader') @UseInterceptors(ClassSerializerInterceptor) async drawMap(@GamePerson() gameperson, @Param('id') gameId) { return this.drawService.drawMap(gameperson, gameId); } }