diff --git a/src/tracking/tracking.controller.ts b/src/tracking/tracking.controller.ts index 9451cdc366f0847389067bd5b9093903a46a1633..8049173b8cb8b5147a306965d9fb3836a9fae619 100644 --- a/src/tracking/tracking.controller.ts +++ b/src/tracking/tracking.controller.ts @@ -5,6 +5,7 @@ import { UseGuards, UsePipes, Body, + Get, } from '@nestjs/common'; import { TrackingService } from './tracking.service'; @@ -30,4 +31,11 @@ export class TrackingController { ) { return this.trackingservice.trackLocation(userId, id, trackdata); } + + @Get('players/:id') + @Roles('admin', 'factionleader') + @GameStates('STARTED', 'PAUSED') + async getPlayerLocations(@User('id') userId, @Param('id') gameId) { + return this.trackingservice.getPlayers(userId, gameId); + } } diff --git a/src/tracking/tracking.entity.ts b/src/tracking/tracking.entity.ts index b31239101176a0316031cf6c1449205a26bcd150..e208b95d012be22ae3db0a48e09e03ded1ac62ca 100644 --- a/src/tracking/tracking.entity.ts +++ b/src/tracking/tracking.entity.ts @@ -1,5 +1,6 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm'; import { Game_PersonEntity } from '../game/game.entity'; +import { FactionEntity } from 'src/faction/faction.entity'; @Entity('Tracking') export class TrackingEntity { @@ -7,4 +8,6 @@ export class TrackingEntity { @Column({ type: 'json', nullable: true }) data: JSON; @ManyToOne(type => Game_PersonEntity, person => person.gamepersonId) gamepersonId: Game_PersonEntity; + @ManyToOne(type => FactionEntity, faction => faction.factionId) + faction: FactionEntity; } diff --git a/src/tracking/tracking.service.ts b/src/tracking/tracking.service.ts index 6dc01c1d9c6dbfcf7336750602d2c90c5092f81b..0d6994cbdc3a2244178da73fd9bf59e19b30f438 100644 --- a/src/tracking/tracking.service.ts +++ b/src/tracking/tracking.service.ts @@ -5,6 +5,7 @@ import { Repository } from 'typeorm'; import { Game_PersonEntity } from '../game/game.entity'; import { TrackingEntity } from './tracking.entity'; import { TrackingDTO } from './tracking.dto'; +import { FactionEntity } from '../faction/faction.entity'; @Injectable() export class TrackingService { @@ -55,6 +56,22 @@ export class TrackingService { } } + // get player data while game is running + async getPlayers(userId, gameId) { + // get gameperson + const gameperson = await this.gamepersonrepository.findOne({ + where: { person: userId, game: gameId }, + relations: ['faction'], + }); + + // if faction is not null, user is factionleader + if (gameperson.faction) { + return 'factionleader'; + } else { + return 'admin'; + } + } + private async mapFunction(data): Promise<Number> { return await data.map(type => { return type;