diff --git a/src/draw/coordinate.entity.ts b/src/draw/coordinate.entity.ts index e9fa35a222c8670171b8b1c4971a70334d34e193..8350415c98fa0160f29047c4b24355ee78049a0e 100644 --- a/src/draw/coordinate.entity.ts +++ b/src/draw/coordinate.entity.ts @@ -9,12 +9,18 @@ import { import { GameEntity } from '../game/game.entity'; import { FactionEntity } from '../faction/faction.entity'; +////////////////////////////////////////////////////////////////////// +/// Entities for different drawings in game and their histories /// +////////////////////////////////////////////////////////////////////// + @Entity('MapDrawing') export class MapDrawingEntity { @PrimaryGeneratedColumn('uuid') mapDrawingId: string; @Column({ type: 'bool', nullable: true }) drawingIsActive: boolean; @Column({ type: 'json', nullable: true }) data: JSON; + // When Faction or game that has the drawing in question is deleted from + // the database, the drawing is also deleted @ManyToOne(type => FactionEntity, faction => faction.mapDrawings, { onDelete: 'CASCADE', }) @@ -42,6 +48,7 @@ export class MapDrawingHistoryEntity { @Column('bool') drawingIsActive: boolean; @Column('json') data: JSON; + // If drawing is deleted, it's histories are deleted also @ManyToOne(() => MapDrawingEntity, mapDrawing => mapDrawing.mapDrawingId, { onDelete: 'CASCADE', }) diff --git a/src/draw/draw.controller.ts b/src/draw/draw.controller.ts index 39db26afdbaab2f8c4c44ca166fc545742daf5f9..08b493940ff0b802a664c4bf5e54d797bf7690f4 100644 --- a/src/draw/draw.controller.ts +++ b/src/draw/draw.controller.ts @@ -1,7 +1,6 @@ import { Controller, Put, - UseGuards, Get, Param, UsePipes, @@ -16,13 +15,16 @@ import { Roles, GameStates } from '../shared/guard.decorator'; import { MapDrawingDTO } from './mapdrawing.dto'; import { GamePerson } from 'src/game/gameperson.decorator'; -/* - DrawController +////////////////////////////////////////////////////////////////////////// +/// 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. /// +////////////////////////////////////////////////////////////////////////// - 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 ddata: MapDrawingDTOata to database. - Data return functions require atleast spectator role. - */ @Controller('draw') export class DrawController { constructor(private drawService: DrawService) {} diff --git a/src/draw/draw.module.ts b/src/draw/draw.module.ts index 86bb2e0e885019beedfd801caf6ef50a7fc6023a..bea1b669ffdde53e107179b3379711321a28aceb 100644 --- a/src/draw/draw.module.ts +++ b/src/draw/draw.module.ts @@ -10,10 +10,11 @@ import { import { FactionEntity } from '../faction/faction.entity'; import { Game_PersonEntity } from '../game/game.entity'; import { NotificationModule } from 'src/notifications/notifications.module'; -/* -Draw -- contains everything to do with mapdrawing data. -*/ + +///////////////////////////////////////////////////////////////////// +/// Draw /// +/// - contains everything to do with mapdrawing data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([ diff --git a/src/faction/faction.entity.ts b/src/faction/faction.entity.ts index 5bdd6d933acef37be121d1fad29482e80f411aa4..a851e190b349d046aae00c776aef345b7de6f373 100644 --- a/src/faction/faction.entity.ts +++ b/src/faction/faction.entity.ts @@ -5,7 +5,6 @@ import { OneToMany, ManyToOne, OneToOne, - Timestamp, JoinColumn, } from 'typeorm'; @@ -15,7 +14,9 @@ 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 +////////////////////////////////////////////////////////////////////// +/// Entities for Factions and Groups in Factions /// +////////////////////////////////////////////////////////////////////// @Entity('Faction') export class FactionEntity { @@ -24,12 +25,14 @@ export class FactionEntity { @Column({ type: 'float' }) multiplier: number; @Column('text') colour: string; + // Faction's password won't be included when FactionEntity is transformed @Exclude() @Column({ type: 'text' }) factionPassword: string; @OneToMany(type => Game_PersonEntity, game_persons => game_persons.faction) game_persons: Game_PersonEntity[]; + // When Game where a Faction is in is deleted, the Factions in that game are also deleted @ManyToOne(type => GameEntity, game => game.factions, { onDelete: 'CASCADE', }) @@ -51,49 +54,12 @@ export class FactionEntity { } } -/* @Entity('PowerUp') -export class PowerUpEntity { - @PrimaryGeneratedColumn('uuid') powerUpId: string; - @Column({ type: 'text' }) powerUpName: string; - @Column({ type: 'text' }) powerUpDescription: string; - @Column({ type: 'int' }) amount: number; - @Column({ type: 'time' }) cooldown: string; - - @OneToMany(type => FactionEntity, factions => factions.factionId, { - onDelete: 'CASCADE', - }) - factions: Faction_PowerUpEntity[]; -} - -@Entity('Faction_PowerUp') -export class Faction_PowerUpEntity { - @PrimaryGeneratedColumn('uuid') faction_powerUpId: string; - - @ManyToOne(type => FactionEntity, faction => faction.factionId) - faction: FactionEntity; - @ManyToOne(type => PowerUpEntity, powerUp => powerUp.factions) - powerUp: PowerUpEntity; - @OneToMany(type => FP_HistoryEntity, histories => histories.faction_PowerUp) - histories: FP_HistoryEntity[]; -} - -@Entity('FP_History') -export class FP_HistoryEntity { - @PrimaryGeneratedColumn('uuid') historyId: string; - @Column({ type: 'timestamp' }) historyTimeStamp: Timestamp; - - @ManyToOne( - type => Faction_PowerUpEntity, - faction_PowerUp => faction_PowerUp.histories, - ) - faction_PowerUp: Faction_PowerUpEntity; -} */ - @Entity('GameGroup') export class GameGroupEntity { @PrimaryGeneratedColumn('uuid') id: string; @Column('text') name: string; @Column('text') class: string; + // When Groups leader, players or Faction is deleted, the Group(s) go also @OneToOne(type => Game_PersonEntity, person => person.leaderGroup, { onDelete: 'CASCADE', }) diff --git a/src/faction/faction.module.ts b/src/faction/faction.module.ts index dcb399aa1119851781270477c448ecec7362c804..f53f076b7e88af7536e6307640d7e10414a7c357 100644 --- a/src/faction/faction.module.ts +++ b/src/faction/faction.module.ts @@ -6,6 +6,10 @@ import { FactionService } from './faction.service'; import { GameGroupEntity, FactionEntity } from './faction.entity'; import { Game_PersonEntity } from '../game/game.entity'; +///////////////////////////////////////////////////////////////////// +/// Faction /// +/// - contains everything to do with Faction data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([ diff --git a/src/faction/faction.service.ts b/src/faction/faction.service.ts index 4a574baa552ac205b509a50edc75c50072663410..32299861ea7b8a349b89194c7f51e3626b7f2389 100644 --- a/src/faction/faction.service.ts +++ b/src/faction/faction.service.ts @@ -66,6 +66,7 @@ export class FactionService { }; } + // changes factions multiplier to the value given to FactionDTO async changeFactionMultiplier(body: FactionDTO) { const faction = await this.factionRepository.findOne({ where: { factionId: body.factionId }, @@ -129,6 +130,7 @@ export class FactionService { }; } + // get the groups in the given Faction async showGroups(factionId) { return await this.game_GroupRepository.find({ relations: ['leader', 'players'], @@ -136,6 +138,7 @@ export class FactionService { }); } + // puts a non admin or faction leader player into a specified group async joinGroup(gameperson, data: JoinGameGroupDTO) { gameperson.group = data.groupId; await this.game_PersonRepository.save(gameperson); @@ -144,6 +147,7 @@ export class FactionService { }; } + // lists all members from given faction async listFactionMembers(faction) { const members = await this.game_PersonRepository.find({ where: { faction }, @@ -155,6 +159,7 @@ export class FactionService { return members; } + // checks if player is in a faction and what role the player is in async verifyUser(person, game) { const gameperson = await this.game_PersonRepository.findOne({ where: { person, game }, diff --git a/src/game/game.controller.ts b/src/game/game.controller.ts index a0b85a24e645f99bff5d1b4175bc6e9b24d1353f..27e3248368c7fa54c76db0cc114e66afdc445118 100644 --- a/src/game/game.controller.ts +++ b/src/game/game.controller.ts @@ -20,6 +20,15 @@ import { ValidationPipe } from '../shared/validation.pipe'; import { Roles, GameStates } from '../shared/guard.decorator'; import { GameEntity } from './game.entity'; +///////////////////////////////////////////////////////////////////////// +/// GameController /// +/// /// +/// Functions for creating, editing, deleting and listing games. /// +/// Also there are functions to get objective point info and list /// +/// of Factions in game /// +/// /// +///////////////////////////////////////////////////////////////////////// + @Controller('game') export class GameController { constructor(private gameservice: GameService) {} diff --git a/src/game/game.entity.ts b/src/game/game.entity.ts index 7ae6e29955d02a2c1368b5f720200f009bd92ee1..22e171b67e655917d108a66695dae59f32304e4e 100644 --- a/src/game/game.entity.ts +++ b/src/game/game.entity.ts @@ -56,6 +56,7 @@ export class GameEntity { export class Game_PersonEntity { @PrimaryGeneratedColumn('uuid') gamepersonId: string; @Column({ type: 'text', nullable: true }) role: string; + // If a Faction or Game where the GamePerson was in is deleted, the GamePerson is also deleted @ManyToOne(type => FactionEntity, faction => faction.game_persons, { onDelete: 'CASCADE', }) @@ -68,6 +69,8 @@ export class Game_PersonEntity { person: PersonEntity; @OneToOne(type => GameGroupEntity, group => group.leader) leaderGroup: GameGroupEntity; + + // When a Group where GamePerson is is deleted, nothing happens to the GamePerson @ManyToOne(type => GameGroupEntity, group => group.players, { onDelete: 'NO ACTION', }) @@ -81,6 +84,7 @@ export class ObjectivePointEntity { @Column({ type: 'text' }) objectivePointDescription: string; @Column({ type: 'float' }) objectivePointMultiplier: number; + // If the MapDrawing or Game where the ObjectivePoint was in is deleted, the ObjectivePoint is also deleted @ManyToOne(type => MapDrawingEntity, coordinate => coordinate.data, { onDelete: 'CASCADE', }) @@ -96,6 +100,9 @@ export class ObjectivePoint_HistoryEntity { @PrimaryGeneratedColumn('uuid') oP_HistoryId: string; @Column({ type: 'timestamp' }) oP_HistoryTimestamp: Timestamp; @Column('float') action: number; + + // If the owner Faction, capturer Faction or ObjectivePoint, that has, is trying to have or is the point where + // ObjectivePointHistory points to is deleted, the ObjectivePointHistory is also deleted @ManyToOne(type => FactionEntity, factionEntity => factionEntity.factionId, { onDelete: 'CASCADE', }) diff --git a/src/game/game.module.ts b/src/game/game.module.ts index d08a79515052b1b3ee3f932f22d969c17bc3c74d..8fa0638e4a5ef0a0a72d04a416113c15278fc242 100644 --- a/src/game/game.module.ts +++ b/src/game/game.module.ts @@ -17,6 +17,10 @@ import { TickService } from './tick.service'; import { ScoreService } from '../score/score.service'; import { ScoreEntity } from 'src/score/score.entity'; +///////////////////////////////////////////////////////////////////// +/// Game /// +/// - contains everything to do with Game data /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([ diff --git a/src/notifications/notification.entity.ts b/src/notifications/notification.entity.ts index f9d5dca9290c30da406a63adf56ee06fe716a7b5..5e1f841cf031767574c75d54af65ca209fc7e86b 100644 --- a/src/notifications/notification.entity.ts +++ b/src/notifications/notification.entity.ts @@ -16,6 +16,7 @@ export class NotificationEntity { @Column({ type: 'text' }) message: string; @CreateDateColumn() issued: Date; + // Notifications are deleted if the game is deleted @ManyToOne(type => GameEntity, game => game.id, { onDelete: 'CASCADE', }) diff --git a/src/notifications/notifications.module.ts b/src/notifications/notifications.module.ts index 607ea0c2d486bddc8f8919a86915ed6014176628..6133784682e03ee4aba0eacf79fad64298b1a80d 100644 --- a/src/notifications/notifications.module.ts +++ b/src/notifications/notifications.module.ts @@ -7,6 +7,10 @@ import { GameEntity } from '../game/game.entity'; import { NotificationsController } from './notifications.controller'; import { NotificationsService } from './notifications.service'; +///////////////////////////////////////////////////////////////////// +/// Notification /// +/// - contains everything to do with Notification data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [TypeOrmModule.forFeature([NotificationEntity, GameEntity])], providers: [NotificationGateway, NotificationsService], diff --git a/src/notifications/notifications.service.ts b/src/notifications/notifications.service.ts index d63f01786f1bbab3b500658ac40c24a977165e73..0bbe016ecba9bde516b99222bbe388b3269bba6c 100644 --- a/src/notifications/notifications.service.ts +++ b/src/notifications/notifications.service.ts @@ -10,6 +10,7 @@ export class NotificationsService { private notificationRepository: Repository<NotificationEntity>, ) {} + // finds all notifications for specified game async getNotifications(game: string) { return this.notificationRepository.find({ game }); } diff --git a/src/replay/replay.controller.ts b/src/replay/replay.controller.ts index e91bbc09653b35ad45b7581b1529806e2a9c3e0a..1b42439569d54da8d6b2fa8f2986b28669e16a39 100644 --- a/src/replay/replay.controller.ts +++ b/src/replay/replay.controller.ts @@ -12,12 +12,14 @@ import { ReplayService } from './replay.service'; export class ReplayController { constructor(private replayservice: ReplayService) {} + // gets replay data for specified Game @Get(':id') @UseInterceptors(ClassSerializerInterceptor) async replayInfo(@Param('id') gameId) { return this.replayservice.replayData(gameId); } + // gets mockdata for specified Game @Post('mockdata/:id') async mockData(@Param('id') gameId) { return this.replayservice.mockdata(gameId); diff --git a/src/replay/replay.module.ts b/src/replay/replay.module.ts index 00638def67675c7fd46775c4fa40c4c1ab2b250b..d4d5dc095bf95a9fd2316870d4e3d57a17af321f 100644 --- a/src/replay/replay.module.ts +++ b/src/replay/replay.module.ts @@ -23,6 +23,10 @@ import { ScoreService } from '../score/score.service'; import { ScoreEntity } from '../score/score.entity'; import { NotificationModule } from 'src/notifications/notifications.module'; +///////////////////////////////////////////////////////////////////// +/// Replay /// +/// - contains everything to do with Replay data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([ diff --git a/src/replay/replay.service.ts b/src/replay/replay.service.ts index 04ace741bd2ed4dc1ee96a6a2359d745a219896c..0ecd90328d77fea094b182b6069a10869afda64b 100644 --- a/src/replay/replay.service.ts +++ b/src/replay/replay.service.ts @@ -41,6 +41,11 @@ export class ReplayService { let mapDrawingIds = await this.mapdrawingRepository.find({ where: { gameId: gameId }, select: ['mapDrawingId'], + // replay data for Factions + async replayData(gameId) { + const replay = await this.factionRepository.find({ + where: { game: gameId }, + relations: ['mapDrawings', 'scores', 'trackdata'], }); let drawings = []; await Promise.all( diff --git a/src/score/score.entity.ts b/src/score/score.entity.ts index 1047f90dc7029c1011368ab54107a875a224b6d2..a5321daa56ae78dbe1d54911bf934a37a9b124db 100644 --- a/src/score/score.entity.ts +++ b/src/score/score.entity.ts @@ -14,6 +14,7 @@ export class ScoreEntity { @Column({ type: 'float' }) score: number; @Column({ type: 'float' }) scoreTimeStamp: number; + // when Faction is deleted, it's Score is also deleted @ManyToOne(type => FactionEntity, factionName => factionName.factionId, { onDelete: 'CASCADE', }) diff --git a/src/score/score.module.ts b/src/score/score.module.ts index c04486fc676fca0d7c6a38c74374e03e23a1008c..fce21d189b233bd6f952ebce79e47869171df60b 100644 --- a/src/score/score.module.ts +++ b/src/score/score.module.ts @@ -11,6 +11,10 @@ import { import { ScoreEntity } from './score.entity'; import { NotificationModule } from '../notifications/notifications.module'; +///////////////////////////////////////////////////////////////////// +/// Score /// +/// - contains everything to do with Score data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([ diff --git a/src/shared/roles.controller.ts b/src/shared/roles.controller.ts index 0d91e061c7fea732af225819e87f8529ff326eab..0298723936651e1859e76273b14b9086e167f6c9 100644 --- a/src/shared/roles.controller.ts +++ b/src/shared/roles.controller.ts @@ -48,41 +48,4 @@ const grants = { //player & spectator }; -const ac = new AccessControl(grants); - -/*const express = require ('express'); -const router express.Router; - -const ac = new AccessControl(); -ac.grant('faction_leader') // define new or modify existing role. also takes an array. - .createOwn('mapmarker') // equivalent to .createOwn('video', ['*']) - .deleteOwn('mapmarker') - .readOwn('mapmarker') - .grant('admin') // switch to another role without breaking the chain - .extend('user') // inherit role capabilities. also takes an array - .updateAny('mapmarker', ['title']) // explicitly defined attributes - .deleteAny('mapmarker') - .readAny('mapmarker'); - -//const -let permission = ac.can('user').createOwn('mapmarker'); -console.log(permission.granted); // —> true -console.log(permission.attributes); // —> ['*'] (all attributes) - -permission = ac.can('admin').updateAny('mapmarker'); -console.log(permission.granted); // —> true -console.log(permission.attributes); // —> ['title'] - -router.get('/videos/:title', function (req, res, next) { - const permission = ac.can(req.user.role).readAny('video'); - if (permission.granted) { - Video.find(req.params.title, function (err, data) { - if (err || !data) return res.status(404).end(); - // filter data by permission attributes and send. - res.json(permission.filter(data)); - }); - } else { - // resource is forbidden for this user/role - res.status(403).end(); - } -});*/ +const ac = new AccessControl(grants); \ No newline at end of file diff --git a/src/shared/validation.pipe.ts b/src/shared/validation.pipe.ts index cff51f1b068b67886c29dd85587760a1fa016f1e..423f23152e202e3c808d8c1e888f2a5fc00dac30 100644 --- a/src/shared/validation.pipe.ts +++ b/src/shared/validation.pipe.ts @@ -7,7 +7,6 @@ import { } from '@nestjs/common'; import { validate } from 'class-validator'; import { plainToClass } from 'class-transformer'; -import { AdvancedConsoleLogger } from 'typeorm'; @Injectable() export class ValidationPipe implements PipeTransform<any> { diff --git a/src/task/task.entity.ts b/src/task/task.entity.ts index f1c1cf103fa4338a7f10d0305888d13c097d7a09..762dbc038992f394b1bd773b9fd4e2965fe9a145 100644 --- a/src/task/task.entity.ts +++ b/src/task/task.entity.ts @@ -16,6 +16,7 @@ export class TaskEntity { @Column({ type: 'text' }) taskDescription: string; @Column({ type: 'bool' }) taskIsActive: boolean; + // when a Faction or Game is deleted, affiliated Tasks are also deleted @ManyToOne(type => FactionEntity, faction => faction.factionId, { onDelete: 'CASCADE', }) diff --git a/src/task/task.module.ts b/src/task/task.module.ts index 2391f284e62af1eaccb4df9a4cf051735a903775..dc4b8f63d9a1866771f4c68035a09516cfc56bf6 100644 --- a/src/task/task.module.ts +++ b/src/task/task.module.ts @@ -7,6 +7,10 @@ import { TaskEntity } from './task.entity'; import { FactionEntity } from '../faction/faction.entity'; import { NotificationModule } from '../notifications/notifications.module'; +///////////////////////////////////////////////////////////////////// +/// Task /// +/// - contains everything to do with Task data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([TaskEntity, FactionEntity]), diff --git a/src/task/task.service.ts b/src/task/task.service.ts index 043f65a130fd37f632b38464112ed353dc4a4233..478a6c18059c5b0388aaad1abe2f3fcc2e05ce5e 100644 --- a/src/task/task.service.ts +++ b/src/task/task.service.ts @@ -5,7 +5,6 @@ import { InjectRepository } from '@nestjs/typeorm'; import { TaskEntity } from './task.entity'; import { CreateTaskDTO, EditTaskDTO, DeleteTaskDTO } from './task.dto'; import { FactionEntity } from '../faction/faction.entity'; -import { Game_PersonEntity } from '../game/game.entity'; import { NotificationGateway } from '../notifications/notifications.gateway'; @Injectable() @@ -76,6 +75,8 @@ export class TaskService { throw new HttpException('Task not found', HttpStatus.BAD_REQUEST); } + // finds all tasks if admin and if non-admin player it finds the playres own + // tasks and general tasks async fetchTasks(gameperson, taskGame) { if (gameperson.role == 'admin') { return await this.taskRepository.find({ diff --git a/src/tracking/tracking.controller.ts b/src/tracking/tracking.controller.ts index 2b409cee30764f1d0d33133828a5fd9f9d47d31f..93d0779a9c1ec36f2446b93167211f9c8eae9dce 100644 --- a/src/tracking/tracking.controller.ts +++ b/src/tracking/tracking.controller.ts @@ -2,7 +2,6 @@ import { Controller, Post, Param, - UseGuards, UsePipes, Body, Get, @@ -15,7 +14,7 @@ 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'; +import { GamePerson } from '../game/gameperson.decorator'; @Controller('tracking') export class TrackingController { @@ -35,6 +34,8 @@ export class TrackingController { return this.trackingservice.trackLocation(gameperson, id, trackdata); } + // finds certain player's location + // :id is the id of the game @Get('players/:id') @Roles('admin', 'factionleader') @GameStates('STARTED', 'PAUSED') @@ -42,6 +43,8 @@ export class TrackingController { return this.trackingservice.getPlayers(gameperson, gameId); } + + // finds certain player @Get('player/:id') @Roles('admin', 'factionleader') @GameStates('STARTED', 'PAUSED') diff --git a/src/tracking/tracking.dto.ts b/src/tracking/tracking.dto.ts index 81cc71597fa93910cb195b1fd4e30f38c62c1f05..3ac93c71d8ccf3035e82fb52a7d21350b6407763 100644 --- a/src/tracking/tracking.dto.ts +++ b/src/tracking/tracking.dto.ts @@ -1,4 +1,3 @@ -import { Game_PersonEntity } from '../game/game.entity'; import { Allow, ValidateNested } from 'class-validator'; import { GeoDTO } from './geo.dto'; import { Type } from 'class-transformer'; diff --git a/src/tracking/tracking.entity.ts b/src/tracking/tracking.entity.ts index 8c5b9ab59c8e4250aa313e6eda540f1847d41f78..4952e18c1f2cbac3b2c31a377909960ed85100c9 100644 --- a/src/tracking/tracking.entity.ts +++ b/src/tracking/tracking.entity.ts @@ -9,6 +9,7 @@ export class TrackingEntity { @Column({ type: 'json', nullable: true }) data: GeoDTO[]; @Column('text') icon: string; + // when the GamePerson is deleted it's tracking data is also deleted @ManyToOne(type => Game_PersonEntity, person => person.gamepersonId, { onDelete: 'CASCADE', }) diff --git a/src/tracking/tracking.module.ts b/src/tracking/tracking.module.ts index fe31de3704dcd39113f8a46f6f718555a0528b2b..b2a731217fadbda0dca4be40af271b711e604482 100644 --- a/src/tracking/tracking.module.ts +++ b/src/tracking/tracking.module.ts @@ -7,6 +7,10 @@ import { TrackingEntity } from './tracking.entity'; import { Game_PersonEntity } from '../game/game.entity'; import { PersonEntity } from '../user/user.entity'; +///////////////////////////////////////////////////////////////////// +/// Tracking /// +/// - contains everything to do with Tracking data. /// +///////////////////////////////////////////////////////////////////// @Module({ imports: [ TypeOrmModule.forFeature([TrackingEntity, Game_PersonEntity, PersonEntity]),