From 95dddeb0b542b2771ecef7c3fc6c9a3fc4f0882c Mon Sep 17 00:00:00 2001
From: Haim Kastnet <haim.kastner@gmail.com>
Date: Thu, 4 Apr 2019 01:03:49 +0300
Subject: [PATCH] Add activity-log comment. #41

---
 src/controllers/user-statuses-controller.ts   |  7 +++---
 src/core/symbols.ts                           |  5 ++++
 src/data/report.ts                            |  3 ++-
 src/data/user-statuses.ts                     |  6 +++--
 .../1554323679399-add-activity-comment.ts     | 23 +++++++++++++++++++
 src/models/activity-log.model.ts              |  3 +++
 6 files changed, 41 insertions(+), 6 deletions(-)
 create mode 100644 src/migrations/1554323679399-add-activity-comment.ts

diff --git a/src/controllers/user-statuses-controller.ts b/src/controllers/user-statuses-controller.ts
index 2b20298..01b81a9 100644
--- a/src/controllers/user-statuses-controller.ts
+++ b/src/controllers/user-statuses-controller.ts
@@ -21,7 +21,7 @@ import {
   getSpecificUserStatuses,
   updateUserStatus
 } from '../data';
-import { Platform, UserStatusMap, Cache, Status } from '../core';
+import { Platform, UserStatusMap, Cache, SetUserStatus } from '../core';
 import { UserStatus, Pagination } from '../models';
 
 const usersCache = new Cache(
@@ -128,9 +128,10 @@ export class UserStatusesController extends Controller {
   @Put('statuses/{id}')
   public async updateUser(
     id: number,
-    @Body() { status }: { status: Status },
+    @Body() setUserStatus: SetUserStatus,
     @Request() request: express.Request
   ): Promise<UserStatus> {
-    return await updateUserStatus(id, status, request.user);
+    const { status, comment } = setUserStatus;
+    return await updateUserStatus(id, status, request.user, comment);
   }
 }
diff --git a/src/core/symbols.ts b/src/core/symbols.ts
index 64078f7..f20b4a9 100644
--- a/src/core/symbols.ts
+++ b/src/core/symbols.ts
@@ -41,3 +41,8 @@ export interface SignedInfo {
   adminId: number;
   scope: Scope;
 }
+
+export interface SetUserStatus {
+  status: Status;
+  comment?: string;
+}
diff --git a/src/data/report.ts b/src/data/report.ts
index c0e25fb..d3eb5fd 100644
--- a/src/data/report.ts
+++ b/src/data/report.ts
@@ -54,6 +54,7 @@ export const createNewReport = async (report: UserStatus, reporterKey: string) =
 
   await saveActivity({
     userStatusId: userStatus.id,
-    newStatus: status
+    newStatus: status,
+    comment: userStatus.description
   });
 };
diff --git a/src/data/user-statuses.ts b/src/data/user-statuses.ts
index 9d68b88..1910fd8 100644
--- a/src/data/user-statuses.ts
+++ b/src/data/user-statuses.ts
@@ -104,7 +104,8 @@ export const getSpecificUserStatuses = async (
 export const updateUserStatus = async (
   id: number,
   status: Status,
-  adminId: number
+  adminId: number,
+  comment: string
 ): Promise<UserStatus> => {
   const botRepository = getConnection().getRepository(UserStatus);
   const userStatus = await botRepository.findOne(id);
@@ -114,7 +115,8 @@ export const updateUserStatus = async (
     userStatusId: userStatus.id,
     oldStatus: userStatus.status,
     newStatus: status,
-    adminId
+    adminId,
+    comment
   });
 
   return userStatus;
diff --git a/src/migrations/1554323679399-add-activity-comment.ts b/src/migrations/1554323679399-add-activity-comment.ts
new file mode 100644
index 0000000..a05fac3
--- /dev/null
+++ b/src/migrations/1554323679399-add-activity-comment.ts
@@ -0,0 +1,23 @@
+import { MigrationInterface, QueryRunner, Table, TableColumn } from 'typeorm';
+
+export class AddActivityComment1554323679399 implements MigrationInterface {
+  public async up(queryRunner: QueryRunner): Promise<any> {
+    await this._createColumns(queryRunner);
+  }
+
+  public async down(queryRunner: QueryRunner): Promise<any> {
+    await queryRunner.dropColumn('activity_log', 'comment');
+  }
+
+  private async _createColumns(queryRunner: QueryRunner) {
+    await queryRunner.addColumn(
+      'activity_log',
+      new TableColumn({
+        name: 'comment',
+        type: 'varchar',
+        length: '255',
+        isNullable: true
+      })
+    );
+  }
+}
diff --git a/src/models/activity-log.model.ts b/src/models/activity-log.model.ts
index ec17280..44a445e 100644
--- a/src/models/activity-log.model.ts
+++ b/src/models/activity-log.model.ts
@@ -38,6 +38,9 @@ export class ActivityLog {
   @CreateDateColumn({ name: 'created_at', nullable: false })
   public createdAt: Date;
 
+  @Column({ type: 'varchar', length: 255, nullable: true })
+  public comment?: string;
+
   constructor(private activityLog?: Partial<ActivityLog>) {
     if (activityLog) {
       Object.assign(this, activityLog);