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