From edf20c03731582b07ba165de75a780a895ad0dac Mon Sep 17 00:00:00 2001 From: L4168 <L4168@student.jamk.fi> Date: Wed, 10 Jul 2019 13:10:19 +0300 Subject: [PATCH] added mapDrawingHistory for replay --- src/draw/coordinate.entity.ts | 23 ++++++++++++++++++++--- src/draw/draw.module.ts | 6 +++++- src/draw/draw.service.ts | 23 ++++++++++++++++++++--- src/draw/mapdrawing.dto.ts | 2 -- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/draw/coordinate.entity.ts b/src/draw/coordinate.entity.ts index 049f41b..e9fa35a 100644 --- a/src/draw/coordinate.entity.ts +++ b/src/draw/coordinate.entity.ts @@ -1,4 +1,10 @@ -import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm'; +import { + Entity, + Column, + PrimaryGeneratedColumn, + ManyToOne, + CreateDateColumn, +} from 'typeorm'; import { GameEntity } from '../game/game.entity'; import { FactionEntity } from '../faction/faction.entity'; @@ -7,8 +13,6 @@ import { FactionEntity } from '../faction/faction.entity'; export class MapDrawingEntity { @PrimaryGeneratedColumn('uuid') mapDrawingId: string; @Column({ type: 'bool', nullable: true }) drawingIsActive: boolean; - @Column({ type: 'time', nullable: true }) drawingValidTill: string; - @Column({ type: 'json', nullable: true }) data: JSON; @ManyToOne(type => FactionEntity, faction => faction.mapDrawings, { @@ -30,3 +34,16 @@ export class MapDrawingEntity { } } } + +@Entity('MapDrawingHistory') +export class MapDrawingHistoryEntity { + @PrimaryGeneratedColumn('uuid') mapDrawingHistoryId: string; + @CreateDateColumn() timestamp: Date; + @Column('bool') drawingIsActive: boolean; + @Column('json') data: JSON; + + @ManyToOne(() => MapDrawingEntity, mapDrawing => mapDrawing.mapDrawingId, { + onDelete: 'CASCADE', + }) + mapdrawing: string; +} diff --git a/src/draw/draw.module.ts b/src/draw/draw.module.ts index a310951..86bb2e0 100644 --- a/src/draw/draw.module.ts +++ b/src/draw/draw.module.ts @@ -3,7 +3,10 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { DrawController } from './draw.controller'; import { DrawService } from './draw.service'; -import { MapDrawingEntity } from '../draw/coordinate.entity'; +import { + MapDrawingEntity, + MapDrawingHistoryEntity, +} from '../draw/coordinate.entity'; import { FactionEntity } from '../faction/faction.entity'; import { Game_PersonEntity } from '../game/game.entity'; import { NotificationModule } from 'src/notifications/notifications.module'; @@ -15,6 +18,7 @@ Draw imports: [ TypeOrmModule.forFeature([ MapDrawingEntity, + MapDrawingHistoryEntity, FactionEntity, Game_PersonEntity, ]), diff --git a/src/draw/draw.service.ts b/src/draw/draw.service.ts index a046ce9..ef56a85 100644 --- a/src/draw/draw.service.ts +++ b/src/draw/draw.service.ts @@ -2,15 +2,20 @@ import { Injectable, HttpException, HttpStatus } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; -import { MapDrawingEntity } from '../draw/coordinate.entity'; +import { + MapDrawingEntity, + MapDrawingHistoryEntity, +} from '../draw/coordinate.entity'; import { MapDrawingDTO } from './mapdrawing.dto'; -import { NotificationGateway } from 'src/notifications/notifications.gateway'; +import { NotificationGateway } from '../notifications/notifications.gateway'; @Injectable() export class DrawService { constructor( @InjectRepository(MapDrawingEntity) private mapDrawingRepository: Repository<MapDrawingEntity>, + @InjectRepository(MapDrawingHistoryEntity) + private mapDrawHistoryRepository: Repository<MapDrawingHistoryEntity>, private notificationGateway: NotificationGateway, ) {} @@ -23,8 +28,14 @@ export class DrawService { // create new instance if id is null if (data.mapDrawingId == null || data.mapDrawingId == '') { drawing.faction = gameperson.faction; - console.log(drawing); const mapDrawing = await this.mapDrawingRepository.insert(drawing); + // create a history entity and insert it + const history = await this.mapDrawHistoryRepository.create({ + data: data.data, + drawingIsActive: data.drawingIsActive, + mapdrawing: mapDrawing.identifiers[0]['mapDrawingId'], + }); + await this.mapDrawHistoryRepository.insert(history); return mapDrawing.identifiers; } // get ref from db @@ -34,6 +45,12 @@ export class DrawService { }); if (await draw.ownershipCheck(gameperson.faction, gameperson.role)) { // else update the existing instance + const history = await this.mapDrawHistoryRepository.create({ + data: data.data, + drawingIsActive: data.drawingIsActive, + mapdrawing: data.mapDrawingId, + }); + await this.mapDrawHistoryRepository.insert(history); return await this.mapDrawingRepository.save(drawing); } diff --git a/src/draw/mapdrawing.dto.ts b/src/draw/mapdrawing.dto.ts index f377b5c..f342dd2 100644 --- a/src/draw/mapdrawing.dto.ts +++ b/src/draw/mapdrawing.dto.ts @@ -1,6 +1,5 @@ import { IsUUID, IsOptional, IsBoolean, Allow } from 'class-validator'; -import { FactionEntity } from '../faction/faction.entity'; import { GameEntity } from '../game/game.entity'; export class MapDrawingDTO { @@ -14,5 +13,4 @@ export class MapDrawingDTO { gameId: GameEntity; @IsBoolean() drawingIsActive?: boolean; - drawingValidTill?: string; } -- GitLab