From 2ccc5e86bc34a5afaef901ca3ae1dca80c6294f4 Mon Sep 17 00:00:00 2001
From: Hugo SUBTIL <ext.sopra.husubtil@grandlyon.com>
Date: Fri, 4 Dec 2020 10:46:27 +0100
Subject: [PATCH] feat(config): update logging and add envconfiguration
 handling

---
 src/configuration/config.prod.ts           | 21 +++++++++++++++++++++
 src/configuration/config.ts                |  6 +++---
 src/configuration/configuration.service.ts | 11 ++++++++++-
 src/mailer/mailer.service.ts               |  6 +++---
 src/structures/structures.service.ts       |  5 +++--
 template.env                               |  1 +
 6 files changed, 41 insertions(+), 9 deletions(-)
 create mode 100644 src/configuration/config.prod.ts

diff --git a/src/configuration/config.prod.ts b/src/configuration/config.prod.ts
new file mode 100644
index 000000000..ca8ee3cac
--- /dev/null
+++ b/src/configuration/config.prod.ts
@@ -0,0 +1,21 @@
+export const configProd = {
+  url: process.env.MAIL_URL,
+  token: process.env.MAIL_TOKEN,
+  host: 'ram.grandlyon.com',
+  protocol: 'https',
+  port: '443',
+  from: 'inclusionnumerique@grandlyon.com',
+  from_name: 'Réseau des acteurs de la médiation numérique',
+  replyTo: 'inclusionnumerique@grandlyon.com',
+  templates: {
+    directory: './src/mailer/mail-templates',
+    verify: {
+      ejs: 'verify.ejs',
+      json: 'verify.json',
+    },
+    changeEmail: {
+      ejs: 'changeEmail.ejs',
+      json: 'changeEmail.json',
+    },
+  },
+};
diff --git a/src/configuration/config.ts b/src/configuration/config.ts
index ee0b9db0d..9cc7f1d62 100644
--- a/src/configuration/config.ts
+++ b/src/configuration/config.ts
@@ -1,9 +1,9 @@
 export const config = {
   url: process.env.MAIL_URL,
   token: process.env.MAIL_TOKEN,
-  host: 'ram.grandlyon.com',
-  protocol: 'https',
-  port: '443',
+  host: 'localhost',
+  protocol: 'http',
+  port: '4200',
   from: 'inclusionnumerique@grandlyon.com',
   from_name: 'Réseau des acteurs de la médiation numérique',
   replyTo: 'inclusionnumerique@grandlyon.com',
diff --git a/src/configuration/configuration.service.ts b/src/configuration/configuration.service.ts
index 09d6666ca..e14d70024 100644
--- a/src/configuration/configuration.service.ts
+++ b/src/configuration/configuration.service.ts
@@ -1,10 +1,19 @@
+import { Logger } from '@nestjs/common';
 import * as dotenv from 'dotenv';
 import { config } from './config';
+import { configProd } from './config.prod';
 export class ConfigurationService {
-  private _config = config;
+  private readonly _config;
 
   constructor() {
     // Initializing conf with values from var env
+    if (process.env.NODE_ENV === 'production') {
+      this._config = configProd;
+      Logger.log('App started with production conf', 'ConfigurationService');
+    } else {
+      this._config = config;
+      Logger.log('App started with dev conf', 'ConfigurationService');
+    }
     dotenv.config();
   }
 
diff --git a/src/mailer/mailer.service.ts b/src/mailer/mailer.service.ts
index fdebbee31..567520c66 100644
--- a/src/mailer/mailer.service.ts
+++ b/src/mailer/mailer.service.ts
@@ -28,7 +28,7 @@ export class MailerService {
       subject: subject,
       content: html,
     });
-    Logger.log(`[Mailer] Send mail : ${subject}`);
+    Logger.log(`Send mail : ${subject}`, 'Mailer');
     return new Promise((resolve, reject) => {
       this.httpService
         .post(process.env.MAIL_URL, data, {
@@ -39,11 +39,11 @@ export class MailerService {
         })
         .subscribe(
           (body) => {
-            Logger.log(`[Mailer] Send mail : ${subject} success`);
+            Logger.log(`Send mail : ${subject} success`, 'Mailer');
             return resolve(body);
           },
           (err) => {
-            Logger.error(err);
+            Logger.error(err, 'Mailer');
             return reject(err);
           }
         );
diff --git a/src/structures/structures.service.ts b/src/structures/structures.service.ts
index 7c9b02198..a7f049580 100644
--- a/src/structures/structures.service.ts
+++ b/src/structures/structures.service.ts
@@ -82,7 +82,8 @@ export class StructuresService {
           resolve(structure);
         },
         (err) => {
-          Logger.error(`[getCoord] Request error: ${err.config.url}`, err);
+          Logger.error(`Request error: ${err.config.url}`, 'StructureService');
+          Logger.error(err);
         }
       );
     });
@@ -112,7 +113,7 @@ export class StructuresService {
   public getCoord(numero: string, address: string, zipcode: string): Observable<AxiosResponse<any>> {
     const req =
       'https://download.data.grandlyon.com/geocoding/photon/api' + '?q=' + numero + ' ' + address + ' ' + zipcode;
-    Logger.log(`[StructureService - getCoord] Request : ${req}`);
+    Logger.log(`Request : ${req}`, 'StructureService - getCoord');
     return this.httpService.get(encodeURI(req));
   }
 }
diff --git a/template.env b/template.env
index 88a2a0339..79db55d3f 100644
--- a/template.env
+++ b/template.env
@@ -1,4 +1,5 @@
 TAG=<version number>
+NODE_ENV=<dev or production>
 SERVICE_API_BIND_PORT=<service port>
 JWT_SECRET=<the secret used to sign jwt token>
 MONGO_ROOT_PASSWORD=<mongo root user password>
-- 
GitLab