diff --git a/src/tracking/tracking.controller.ts b/src/tracking/tracking.controller.ts index 8049173b8cb8b5147a306965d9fb3836a9fae619..0ccbb85315bcc9d36e08c3e6e5517fcf4b028595 100644 --- a/src/tracking/tracking.controller.ts +++ b/src/tracking/tracking.controller.ts @@ -6,6 +6,8 @@ import { UsePipes, Body, Get, + UseInterceptors, + ClassSerializerInterceptor, } from '@nestjs/common'; import { TrackingService } from './tracking.service'; @@ -38,4 +40,12 @@ export class TrackingController { async getPlayerLocations(@User('id') userId, @Param('id') gameId) { return this.trackingservice.getPlayers(userId, 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); + } } diff --git a/src/tracking/tracking.module.ts b/src/tracking/tracking.module.ts index 45b167fc526ab41addbb87575518c9acae884482..fe31de3704dcd39113f8a46f6f718555a0528b2b 100644 --- a/src/tracking/tracking.module.ts +++ b/src/tracking/tracking.module.ts @@ -5,9 +5,12 @@ import { TrackingController } from './tracking.controller'; import { TrackingService } from './tracking.service'; import { TrackingEntity } from './tracking.entity'; import { Game_PersonEntity } from '../game/game.entity'; +import { PersonEntity } from '../user/user.entity'; @Module({ - imports: [TypeOrmModule.forFeature([TrackingEntity, Game_PersonEntity])], + imports: [ + TypeOrmModule.forFeature([TrackingEntity, Game_PersonEntity, PersonEntity]), + ], controllers: [TrackingController], providers: [TrackingService], }) diff --git a/src/tracking/tracking.service.ts b/src/tracking/tracking.service.ts index fb4eab054b0a53d4fcc2481c21e28a1adcf257a0..3c6453406bf96a2817dd5d8e2c382fb3f5741eb3 100644 --- a/src/tracking/tracking.service.ts +++ b/src/tracking/tracking.service.ts @@ -6,6 +6,7 @@ import { Game_PersonEntity } from '../game/game.entity'; import { TrackingEntity } from './tracking.entity'; import { TrackingDTO } from './tracking.dto'; import { FactionEntity } from '../faction/faction.entity'; +import { PersonEntity } from '../user/user.entity'; @Injectable() export class TrackingService { @@ -14,6 +15,8 @@ export class TrackingService { private trackingrepository: Repository<TrackingEntity>, @InjectRepository(Game_PersonEntity) private gamepersonrepository: Repository<Game_PersonEntity>, + @InjectRepository(PersonEntity) + private personrepository: Repository<PersonEntity>, ) {} async trackLocation(personId, gameId, trackdata: TrackingDTO) { @@ -95,6 +98,25 @@ export class TrackingService { return currentdata; } + // get selected player data + async getPlayerData(person) { + const gameperson = await this.gamepersonrepository.findOne({ + where: { gamepersonId: person.gamepersonId }, + relations: ['person', 'leaderGroup', 'group', 'faction'], + }); + if (!gameperson) { + throw new HttpException('No player found!', HttpStatus.BAD_REQUEST); + } + + return { + gamepersonId: gameperson.gamepersonId, + name: gameperson.person.name, + role: gameperson.role, + group: gameperson.group, + faction: gameperson.faction.factionName, + }; + } + private async mapFunction(data): Promise<Number> { return await data.map(type => { return type;