Skip to content
Snippets Groups Projects
tracking.controller.ts 1.44 KiB
Newer Older
L4168's avatar
L4168 committed
import {
  Controller,
  Post,
  Param,
  UseGuards,
  UsePipes,
  Body,
  UseInterceptors,
  ClassSerializerInterceptor,
L4168's avatar
L4168 committed
} from '@nestjs/common';

import { TrackingService } from './tracking.service';
import { User } from '../user/user.decorator';
import { Roles, GameStates } from '../shared/guard.decorator';
import { ValidationPipe } from '../shared/validation.pipe';
import { GeoDTO } from './geo.dto';
import { GamePerson } from 'src/game/gameperson.decorator';
L4168's avatar
L4168 committed

@Controller('tracking')
export class TrackingController {
  constructor(private trackingservice: TrackingService) {}

  // inserts tracking data to the database
  // :id is the id of the game
  @Post('location/:id')
  @Roles('soldier')
L4168's avatar
L4168 committed
  @GameStates('STARTED')
L4168's avatar
L4168 committed
  @UsePipes(new ValidationPipe())
  async trackLocation(
    @GamePerson() gameperson,
L4168's avatar
L4168 committed
    @Param('id') id,
    @Body() trackdata: GeoDTO,
L4168's avatar
L4168 committed
  ) {
    return this.trackingservice.trackLocation(gameperson, id, trackdata);
L4168's avatar
L4168 committed
  }

  @Get('players/:id')
  @Roles('admin', 'factionleader')
  @GameStates('STARTED', 'PAUSED')
  async getPlayerLocations(@GamePerson() gameperson, @Param('id') gameId) {
    return this.trackingservice.getPlayers(gameperson, gameId);

  @Get('player/:id')
  @Roles('admin', 'factionleader')
  @GameStates('STARTED', 'PAUSED')
  @UseInterceptors(ClassSerializerInterceptor)
  async getPlayerData(@User('id') userId, @Param('id') gameid, @Body() person) {
    return this.trackingservice.getPlayerData(person);
  }
L4168's avatar
L4168 committed
}