diff --git a/package-lock.json b/package-lock.json index fe60e359660e52589b864d983fab69f17b4e7076..01d2eb7272357854133cd7fe3325d9234a86c4cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -426,11 +426,11 @@ } }, "@nestjs/common": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.2.4.tgz", - "integrity": "sha512-YZvJ6/S7yVQZK+9rupCzMCg4tpbc9DyVvLoTx0NBDqExTCUNcNEcCtn0AZrO/hLqbeYODnJwGE2NxkH1R/qw+w==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.2.tgz", + "integrity": "sha512-vkB6JLPPckjS35usLMV3Q6vljkgzhN3jgQ+U1VY6cKriyjnkIcUKo37tNQSPYkaAGe1pOLK4IkmwMTSyhNieyg==", "requires": { - "axios": "0.18.0", + "axios": "0.19.0", "cli-color": "1.4.0", "uuid": "3.3.2" } @@ -1272,12 +1272,19 @@ "dev": true }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + } } }, "babel-jest": { @@ -2172,11 +2179,12 @@ } }, "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, "dashdash": { @@ -2222,6 +2230,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -2598,13 +2607,13 @@ } }, "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "requires": { "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, @@ -3021,11 +3030,26 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { - "debug": "^3.2.6" + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "for-in": { @@ -3101,8 +3125,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -3123,14 +3146,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3145,20 +3166,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3275,8 +3293,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -3288,7 +3305,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3303,7 +3319,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3311,14 +3326,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3337,7 +3350,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -3418,8 +3430,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3431,7 +3442,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -3517,8 +3527,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3554,7 +3563,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3574,7 +3582,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3618,14 +3625,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -4062,7 +4067,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-callable": { "version": "1.1.4", @@ -5109,9 +5115,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.14", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.14.tgz", + "integrity": "sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw==", "dev": true }, "lodash.includes": { @@ -5382,9 +5388,9 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -6652,9 +6658,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -7641,6 +7647,11 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", + "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==" + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -7838,38 +7849,15 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-string": { diff --git a/package.json b/package.json index 7f9b55f7927a8d9c62a905c3334d0d8025fb688a..3677b2a8db9be496cadc813cab1446501627bbc3 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { - "@nestjs/common": "^6.0.0", + "@nestjs/common": "^6.5.2", "@nestjs/core": "^6.0.0", "@nestjs/jwt": "^6.1.1", "@nestjs/platform-express": "^6.0.0", diff --git a/src/faction/faction.dto.ts b/src/faction/faction.dto.ts index 9064f56f285d3ab2aede368ad91c269ad8c2a334..fbc46d3267dc109010c4450a371ede7300c0d1d0 100644 --- a/src/faction/faction.dto.ts +++ b/src/faction/faction.dto.ts @@ -9,6 +9,7 @@ import { Max, IsOptional, IsHexColor, + IsIn, } from 'class-validator'; import { GameEntity } from '../game/game.entity'; @@ -57,6 +58,8 @@ export class GameGroupDTO { @IsString() @Length(3, 31) name: string; + @IsIn(['infantry', 'recon', 'mechanized']) + class: string; @IsUUID('4') faction: FactionEntity; } diff --git a/src/faction/faction.entity.ts b/src/faction/faction.entity.ts index bc0b9269bdc5618364c536632f226c4974877080..5bdd6d933acef37be121d1fad29482e80f411aa4 100644 --- a/src/faction/faction.entity.ts +++ b/src/faction/faction.entity.ts @@ -13,6 +13,7 @@ import { GameEntity } from '../game/game.entity'; import { Game_PersonEntity } from '../game/game.entity'; import { MapDrawingEntity } from '../draw/coordinate.entity'; import { Exclude } from 'class-transformer'; +import { ScoreEntity } from 'src/score/score.entity'; //Faction, PowerUp, Faction_powerUp, FP_History, Score @@ -35,6 +36,10 @@ export class FactionEntity { game: GameEntity; @OneToMany(type => MapDrawingEntity, mapDrawings => mapDrawings.faction) mapDrawings: MapDrawingEntity[]; + @OneToMany(type => ScoreEntity, score => score.scoreId, { + onDelete: 'NO ACTION', + }) + scores: ScoreEntity[]; factionObject() { const { factionId, factionName, game } = this; @@ -88,6 +93,7 @@ export class FP_HistoryEntity { export class GameGroupEntity { @PrimaryGeneratedColumn('uuid') id: string; @Column('text') name: string; + @Column('text') class: string; @OneToOne(type => Game_PersonEntity, person => person.leaderGroup, { onDelete: 'CASCADE', }) diff --git a/src/replay/replay.controller.ts b/src/replay/replay.controller.ts index acc2ef50dafc1fb1c7f193c8da4834162b6ff4be..ed23960549f32e8b76e21b72dfb4693a7f389224 100644 --- a/src/replay/replay.controller.ts +++ b/src/replay/replay.controller.ts @@ -1,12 +1,19 @@ -import { Controller, Get, Param, Post } from '@nestjs/common'; +import { + Controller, + Get, + Param, + Post, + UseInterceptors, + ClassSerializerInterceptor, +} from '@nestjs/common'; import { ReplayService } from './replay.service'; -import { Roles } from 'src/shared/guard.decorator'; @Controller('replay') export class ReplayController { constructor(private replayservice: ReplayService) {} @Get(':id') + @UseInterceptors(ClassSerializerInterceptor) async replayInfo(@Param('id') gameId) { return this.replayservice.replayData(gameId); } diff --git a/src/replay/replay.module.ts b/src/replay/replay.module.ts index c7accefa55f867a49c36e2dbc5cc3e75563b211c..b5dc7c888da8806ecae546a7dd5aecfcc7f10dae 100644 --- a/src/replay/replay.module.ts +++ b/src/replay/replay.module.ts @@ -8,8 +8,12 @@ import { FactionEntity, GameGroupEntity } from '../faction/faction.entity'; import { UserService } from '../user/user.service'; import { FactionService } from '../faction/faction.service'; import { TrackingService } from '../tracking/tracking.service'; -import { TrackingEntity } from 'src/tracking/tracking.entity'; -import { PersonEntity } from 'src/user/user.entity'; +import { TrackingEntity } from '../tracking/tracking.entity'; +import { PersonEntity } from '../user/user.entity'; +import { + MapDrawingEntity, + MapDrawingHistoryEntity, +} from '../draw/coordinate.entity'; @Module({ imports: [ @@ -20,6 +24,8 @@ import { PersonEntity } from 'src/user/user.entity'; TrackingEntity, GameGroupEntity, Game_PersonEntity, + MapDrawingEntity, + MapDrawingHistoryEntity, ]), ], controllers: [ReplayController], diff --git a/src/replay/replay.service.ts b/src/replay/replay.service.ts index f5430860112e243305a4f0542036b8f9a0bb8a0a..76803d53d827479c5256fb1a74bf6410ca55ab4f 100644 --- a/src/replay/replay.service.ts +++ b/src/replay/replay.service.ts @@ -4,11 +4,15 @@ import { Repository } from 'typeorm'; import * as jwt from 'jsonwebtoken'; import { FactionEntity } from '../faction/faction.entity'; -import { GameEntity } from 'src/game/game.entity'; -import { TrackingService } from 'src/tracking/tracking.service'; -import { UserService } from 'src/user/user.service'; -import { FactionService } from 'src/faction/faction.service'; -import { TrackingEntity } from 'src/tracking/tracking.entity'; +import { GameEntity } from '../game/game.entity'; +import { TrackingService } from '../tracking/tracking.service'; +import { UserService } from '../user/user.service'; +import { FactionService } from '../faction/faction.service'; +import { TrackingEntity } from '../tracking/tracking.entity'; +import { + MapDrawingEntity, + MapDrawingHistoryEntity, +} from '../draw/coordinate.entity'; @Injectable() export class ReplayService { @@ -19,36 +23,51 @@ export class ReplayService { private gameRepository: Repository<GameEntity>, @InjectRepository(TrackingEntity) private trackingRepository: Repository<TrackingEntity>, + @InjectRepository(MapDrawingEntity) + private mapdrawingRepository: Repository<MapDrawingEntity>, + @InjectRepository(MapDrawingHistoryEntity) + private mapHistoryRepository: Repository<MapDrawingHistoryEntity>, private trackingService: TrackingService, private userService: UserService, private factionService: FactionService, ) {} async replayData(gameId) { - const replay = await this.factionRepository.find({ - where: { game: gameId }, - relations: ['mapDrawings', 'scores', 'trackdata'], + let mapDrawingIds = await this.mapdrawingRepository.find({ + where: { gameId: gameId }, + select: ['mapDrawingId'], }); - return replay; + let drawings = []; + await Promise.all( + mapDrawingIds.map(async mapId => { + drawings.push( + await this.mapHistoryRepository.find({ + mapdrawing: mapId.mapDrawingId, + }), + ); + }), + ); + return drawings; } // get replay data for players async getPlayers(gameId) { let playerdata = await this.trackingRepository.find({ where: { game: gameId }, - relations: ['faction', 'gamepersonId'], + relations: ['faction', 'gamepersonId', 'gamepersonId.person'], }); - // parse data const currentdata = await Promise.all( playerdata.map(async player => { + player.data.map(async data => { + data['info'] = [ + { key: 'icon', value: player.icon }, + { key: 'colour', value: player.faction.colour }, + { key: 'name', value: player.gamepersonId.person.name }, + { key: 'role', value: player.gamepersonId.role }, + ]; + }); return player['data']; - /* return { - gamepersonId: player['gamepersonId']['gamepersonId'], - gamepersonRole: player['gamepersonId']['role'], - factionId: player['faction']['factionId'], - coordinates: player['data'], - }; */ }), ); @@ -62,14 +81,17 @@ export class ReplayService { where: { id: gameId }, relations: ['factions'], }); - for (let i = 0; i < 20; i++) { + const groups = await this.factionService.showGroups( + game.factions[1].factionId, + ); + for (let i = 0; i < 100; i++) { let res = await this.userService.register({ - name: 'qqqqq' + i, + name: 'asdfasa' + i, password: 'asd', }); let user = await jwt.verify(res.token, process.env.SECRET); users.push(user); - let gameperson = await this.factionService.joinFaction(user['id'], { + /* let gameperson = await this.factionService.joinFaction(user['id'], { factionId: i < 10 ? game.factions[0].factionId : game.factions[1].factionId, factionPassword: @@ -77,15 +99,23 @@ export class ReplayService { ? game.factions[0].factionPassword : game.factions[1].factionPassword, game: gameId, + }); */ + let gameperson = await this.factionService.joinFaction(user['id'], { + factionId: game.factions[1].factionId, + factionPassword: game.factions[1].factionPassword, + game: gameId, + }); + await this.factionService.joinGroup(gameperson, { + groupId: groups[Math.floor(Math.random() * 3)], }); gamepersons.push(gameperson); } let date: number = Date.now(); let y1 = 25.7; - let x1 = 62.3; + let x1 = 62.0; let y2 = 25.75; - let x2 = 62.35; - for (let i = 1; i < 16 * 6 * 3; i++) { + let x2 = 62.05; + for (let i = 1; i < 6; i++) { let x = 0; date += 10000; await Promise.all( @@ -93,11 +123,11 @@ export class ReplayService { x++; let dataObject = { lat: - x < 10 + x < 50 ? x1 + ((i + Math.random()) * 5) / 2000 : x2 - ((i + Math.random()) * 5) / 2000, lng: - x < 10 + x < 50 ? y1 + ((i + Math.random()) * 5) / 2000 : y2 - ((i + Math.random()) * 5) / 2000, time: date, diff --git a/src/score/score.service.ts b/src/score/score.service.ts index 640970c8e5ca99e877982cc2f4174123595792bb..90716c4b2e9f5d72f21971edb574972a2ccfda6d 100644 --- a/src/score/score.service.ts +++ b/src/score/score.service.ts @@ -69,7 +69,8 @@ export class ScoreService { i => i.faction === current.owner.factionId, ); index !== -1 - ? await (scoreData[index]['score'] += box.objectivePointMultiplier * current.owner.multiplier) + ? await (scoreData[index]['score'] += + box.objectivePointMultiplier * current.owner.multiplier) : await scoreData.push({ score: box.objectivePointMultiplier, faction: current.owner.factionId, diff --git a/src/shared/roles.guard.ts b/src/shared/roles.guard.ts index 359a42d8165ee7d579078c300eded626b760df8b..7ae58d2f0c2d9f1258e41ea1a8341e2e664df15d 100644 --- a/src/shared/roles.guard.ts +++ b/src/shared/roles.guard.ts @@ -42,7 +42,7 @@ export class RolesGuard implements CanActivate { request.user = await this.getUserObject(request.headers.authorization); const role = await this.game_PersonRepository.findOne({ where: { person: request.user['id'], game: gameId }, - relations: ['faction'], + relations: ['faction', 'group'], }); // add gameperson role to the request // @GamePerson decorator can access it and pass it to service diff --git a/src/tracking/tracking.service.ts b/src/tracking/tracking.service.ts index ff97aae3993f62c9dbb342ca9ff5744001d32366..b366784ec03f8c4f67e0ec99bbc563a292733d6f 100644 --- a/src/tracking/tracking.service.ts +++ b/src/tracking/tracking.service.ts @@ -15,6 +15,12 @@ export class TrackingService { private gamepersonrepository: Repository<Game_PersonEntity>, ) {} + private icons = { + infantry: 'infantry.svg', + recon: 'recon.svg', + mechanized: 'mechanized.svg', + }; + async trackLocation( gameperson: Game_PersonEntity, gameId, @@ -37,7 +43,10 @@ export class TrackingService { trackdata['time'] = Date.now(); // initialize data trackedperson = await this.trackingrepository.create(trackedperson); - trackedperson.icon = 'infantry.svg'; + // if group exists, add icon based on that, else add default icon + trackedperson.icon = gameperson.group + ? this.icons[gameperson.group.class] + : 'infantry.svg'; trackedperson.data = [trackdata]; trackedperson.faction = gameperson.faction; trackedperson.game = gameId;