From ee0af4283ee0172cdd6cc351b84867eacd15c183 Mon Sep 17 00:00:00 2001
From: Hugo SUBTIL <ext.sopra.husubtil@grandlyon.com>
Date: Tue, 23 Feb 2021 11:20:12 +0100
Subject: [PATCH] clean: clean code

---
 db/init-db.sh                                 |  5 -----
 scripts/init-db.js                            |  4 ++--
 src/posts/posts.controller.ts                 |  2 +-
 src/structures/schemas/structure.schema.ts    |  2 +-
 src/structures/services/structures.service.ts |  5 ++---
 src/structures/structures.controller.ts       |  3 ---
 src/tcl/tclStopPoint.controller.ts            |  6 +++++-
 src/temp-user/temp-user.service.ts            |  2 +-
 src/users/users.service.spec.ts               | 13 +++++++++----
 src/users/users.service.ts                    |  8 ++++----
 10 files changed, 25 insertions(+), 25 deletions(-)
 delete mode 100644 db/init-db.sh

diff --git a/db/init-db.sh b/db/init-db.sh
deleted file mode 100644
index eb93fd77a..000000000
--- a/db/init-db.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-mongo admin -u root -p MONGO_ROOT_PASSWORD
-use ram
-db.structures.insertOne({"id":1,"numero":"26-190","dateDeCreation":"Mon Nov 16 2020 16:37:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Mon Nov 16 2020 16:38:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Maison de l'Emploi de Feyzin","description":"- Permanence de médiation numérique (sur rdv) les lundis; mardi, mercredi apres midi 13h30 - 17h30 et les vendredi matins 9h-12h - mise à disposition d'ordinateurs aux horaires d'ouverture de la structure lundi, mercredi, jeudi 9h-12h; 13h30-17h30 ; mardi 10h-12h 13h30- 17h30 et vendredi matin 9h-12H. - mise à disposition (sur rdv)de matériels pour suivre des formations / informations collectives à distance et participer à un entretien en visio - cours de code et entrainement en ligne sur rdv","activitesMaintenuesDansLeCadreDuConfinement":"Toutes les activités sont maintenues durant le confinement. Toutes nécessitent cependant de prendre rdv préalablement","n":"18","voie":"Rue de la Mairie","telephone":"04 72 21 46 66","courriel":"m.annequin@ville-feyzin.fr","siteWeb":"ville de Feyzin","facebook":"","twitter":"","instagram":"","civilite":"Madame","nom":"Annequin","prenom":"Muriel","fonction":"Directeur","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Accès libre","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"Si la personne n'est pas inscrite à la maison de l'emploi il lui sera demandé de s'inscrire.","labelsEtQualifications":[""],"publicsAcceptes":["Tout public"],"fermeturesExceptionnelles":"Jours fériés","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":[""],"accesAuxDroits":["176"],"insertionSocialeEtProfessionnelle":[""],"aideALaParentalite":[""],"cultureEtSecuriteNumerique":[""],"wifiEnAccesLibre":"True","ordinateurs":"True","nombre":"5","tablettes":"","bornesNumeriques":"","imprimantes":"True","precisionsSiNecessaire":"","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"141","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"46","statut":"Versement des données offre","typeDeStructure":["Mairie"],"commune":"Feyzin","hours":{"monday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"tuesday":{"open":true,"time":[{"openning":1000,"closing":1200},{"openning":1330,"closing":1730}]},"wednesday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"thursday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":1330,"closing":1730}]},"friday":{"open":true,"time":[{"openning":900,"closing":1200},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}})
-db.structures.insertOne({"id":2,"numero":"26-182","dateDeCreation":"Mon Nov 16 2020 15:15:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Tue Nov 17 2020 09:10:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Centre social Quartier Vitalité","description":"Le centre social s'inscrit dans une démarche d'animation de la vie sociale locale afin de permettre aux habitants d'exprimer, de concevoir, de réaliser leurs projets. C'est un lieu de proximité à vocation familiale et intergénérationnelle qui propose des activités sociales, éducatives et culturelles pour répondre aux besoins de chacun.","activitesMaintenuesDansLeCadreDuConfinement":"Aide aux démarches administratives et médiation numérique, sur rendez vous uniquement","n":"7","voie":"Rue Saint Polycarpe","telephone":"04.78.39.36.36","courriel":"aurebertherat@gmail.com","siteWeb":"www.centresocialquartiervitalite.i-citoyen.com","facebook":"","twitter":"","instagram":"","civilite":"Madame","nom":"BERTHERAT","prenom":"AURELIE","fonction":"Autres","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Téléphone / Visio","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"","labelsEtQualifications":[""],"publicsAcceptes":["Jeunes (16-25 ans)","Adultes","Séniors (+ de 65 ans)","Tout public"],"fermeturesExceptionnelles":"vacances de Noel + tout le mois d'Aout","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","CPAM","Impôts","Logement","CARSAT","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":["259","261","249","222","212","186","183","260"],"accesAuxDroits":["175","174","173","172","171","167","165","176"],"insertionSocialeEtProfessionnelle":["193","192","191","262","194"],"aideALaParentalite":["238","178","166","257"],"cultureEtSecuriteNumerique":["232","225","221","218","208","195","264"],"wifiEnAccesLibre":"","ordinateurs":"True","nombre":"3","tablettes":"","bornesNumeriques":"","imprimantes":"True","precisionsSiNecessaire":"Impression de documents uniquement en lien avec le rendez vous et l'accompagnement administratif de la personne","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"140","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"","statut":"Erreur lors du versement des données offre","typeDeStructure":["Centre socio-culturel"],"commune":"Lyon 1","hours":{"monday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"tuesday":{"open":true,"time":[{"openning":1330,"closing":1700},{"openning":null,"closing":null}]},"wednesday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"thursday":{"open":true,"time":[{"openning":930,"closing":1200},{"openning":null,"closing":null}]},"friday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}})
-db.structures.insertOne({"id":3,"numero":"26-181","dateDeCreation":"Mon Nov 16 2020 12:49:00 GMT+0100 (heure normale d’Europe centrale)","derniereModification":"Tue Nov 17 2020 09:12:00 GMT+0100 (heure normale d’Europe centrale)","nomDeLusager":"-","votreStructureEstElle":"Un établissement principal (siège social)","nomDeVotreStructure":"Centre socioculturel la Carnière","description":"Le centre socio-culturel la Carnière est une association développe dans le cadre de son projet des activités, des services et un soutien aux projets et initiatives ouvert à tous les habitants de la commune. En phase avec les enjeux du territoire, nous œuvrons plus particulièrement dans les domaines de l'accompagnement social et l'accès aux droits, le handicap, la fracture numérique, la parentalité et enfin auprès des personnes âgées.","activitesMaintenuesDansLeCadreDuConfinement":"- WEBTV pour garder le contact et proposer des activités à faire à la maison en direct en replay. - Accompagnement et médiation numérique (démarche en ligne, accès au droit...) - Handicap et numérique. - Entraide numérique sur rdv individuel (sortir d'un blocage, découvrir skype, zoom...) - Ateliers linguistiques via l'outil numérique. - Accompagnement scolaire à distance. - Conférence parentalité en visio.","n":"4","voie":"Montée de la Carnière","telephone":"0478206197","courriel":"contact@centresocial-lacarniere.fr ou numerique@centresocial-lacarniere.fr","siteWeb":"www.centresocial-lacarniere.fr","facebook":"","twitter":"","instagram":"","civilite":"Monsieur","nom":"Chanteperdrix Cyril ou Haouchet Karim","prenom":"","fonction":"Directeur","accessibilitePersonnesAMobiliteReduitePmr":"True","modalitesDacces":["Téléphone / Visio","Sur RDV"],"pourLesRdv,MerciDePreciserSilEstNecessaireDapporterDesPiecesJustificativesOuDuMateriel.":"ordinateur portable habituel.","labelsEtQualifications":["Pass numérique"],"publicsAcceptes":["Tout public"],"fermeturesExceptionnelles":"","jaccompagneLesUsagersDansLeursDemarchesEnLigne":"True","accompagnementDesDemarches":["Pôle Emploi","CPAM","Impôts","Logement","CARSAT","Accompagnant CAF"],"autresAccompagnements":"","lesCompetencesDeBase":["259","261","249","222","212","186","183","260"],"accesAuxDroits":["175","174","173","172","171","167","165","176"],"insertionSocialeEtProfessionnelle":[""],"aideALaParentalite":["178","166","257"],"cultureEtSecuriteNumerique":["255","232","225","221","218","208","195","164","163","162","264"],"wifiEnAccesLibre":"True","ordinateurs":"","nombre":"","tablettes":"","bornesNumeriques":"","imprimantes":"","precisionsSiNecessaire":"équipements informatiques fournis pour les formations","statutJuridique":"","appartenezVousAUnReseauDeMediation":"","precisezLequel":"","idDeLitemStructureDansDirectus":"143","statutDeLitemStructureDansDirectus":"","idDeLitemOffreDansDirectus":"","statut":"Erreur lors du versement des données offre","typeDeStructure":["Centre socio-culturel"],"commune":"Saint-Priest","hours":{"monday":{"open":true,"time":[{"openning":900,"closing":1800},{"openning":null,"closing":null}]},"tuesday":{"open":true,"time":[{"openning":1400,"closing":1730},{"openning":null,"closing":null}]},"wednesday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"thursday":{"open":true,"time":[{"openning":900,"closing":1800},{"openning":null,"closing":null}]},"friday":{"open":true,"time":[{"openning":900,"closing":1730},{"openning":null,"closing":null}]},"saturday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]},"sunday":{"open":false,"time":[{"openning":null,"closing":null},{"openning":null,"closing":null}]}}})
\ No newline at end of file
diff --git a/scripts/init-db.js b/scripts/init-db.js
index 57acb1e1a..d65251eb5 100644
--- a/scripts/init-db.js
+++ b/scripts/init-db.js
@@ -63,8 +63,8 @@ mongoose.connection.dropCollection('users', function (err) {
     user.password = hashPassword();
   });
   // save model to database
-  User.create(userData.data, function (err, user) {
-    if (err) return console.error(err);
+  User.create(userData.data, function (error, user) {
+    if (error) return console.error(error);
     console.log('-- Users collection initialized --');
     process.exit(0);
   });
diff --git a/src/posts/posts.controller.ts b/src/posts/posts.controller.ts
index e5c9478a2..69d709984 100644
--- a/src/posts/posts.controller.ts
+++ b/src/posts/posts.controller.ts
@@ -1,7 +1,7 @@
 import { Controller, Get, HttpService, Query } from '@nestjs/common';
 import { Observable } from 'rxjs';
 import { map } from 'rxjs/operators';
-import { ApiBearerAuth, ApiQuery } from '@nestjs/swagger';
+import { ApiQuery } from '@nestjs/swagger';
 import { Post } from './schemas/post.schema';
 
 @Controller('posts')
diff --git a/src/structures/schemas/structure.schema.ts b/src/structures/schemas/structure.schema.ts
index c18f9cdcc..fdd977bfc 100644
--- a/src/structures/schemas/structure.schema.ts
+++ b/src/structures/schemas/structure.schema.ts
@@ -1,5 +1,5 @@
 import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
-import { Document, Types } from 'mongoose';
+import { Document } from 'mongoose';
 import { Address } from './address.schema';
 import { Week } from './week.schema';
 
diff --git a/src/structures/services/structures.service.ts b/src/structures/services/structures.service.ts
index fe78e14d6..0de3143a2 100644
--- a/src/structures/services/structures.service.ts
+++ b/src/structures/services/structures.service.ts
@@ -24,12 +24,12 @@ export class StructuresService {
     @InjectModel(Structure.name) private structureModel: Model<StructureDocument>
   ) {}
 
-  public async create(idUser: string, structureDto: structureDto): Promise<Structure> {
+  public async create(idUser: string, structure: structureDto): Promise<Structure> {
     const user = await this.userService.findOne(idUser);
     if (!user) {
       throw new HttpException('Invalid profile', HttpStatus.NOT_FOUND);
     }
-    const createdStructure = new this.structureModel(structureDto);
+    const createdStructure = new this.structureModel(structure);
     createdStructure._id = Types.ObjectId();
     createdStructure.save();
     user.structuresLink.push(createdStructure._id);
@@ -330,7 +330,6 @@ export class StructuresService {
   }
 
   public async updateAccountVerified(idStructure: string, emailUser: string): Promise<Structure> {
-    const user = await this.userService.findOne(emailUser);
     const structureLinked = await this.findOne(idStructure);
     const structure = new this.structureModel(structureLinked);
     if (!structure) {
diff --git a/src/structures/structures.controller.ts b/src/structures/structures.controller.ts
index 5b1dde3ee..b4aeea9bc 100644
--- a/src/structures/structures.controller.ts
+++ b/src/structures/structures.controller.ts
@@ -6,7 +6,6 @@ import {
   HttpException,
   HttpStatus,
   Param,
-  ParseIntPipe,
   Post,
   Put,
   Query,
@@ -16,11 +15,9 @@ import { ApiParam } from '@nestjs/swagger';
 import { Types } from 'mongoose';
 import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
 import { CreateTempUserDto } from '../temp-user/dto/create-temp-user.dto';
-import { TempUser } from '../temp-user/temp-user.schema';
 import { TempUserService } from '../temp-user/temp-user.service';
 import { Roles } from '../users/decorators/roles.decorator';
 import { IsStructureOwnerGuard } from '../users/guards/isStructureOwner.guard';
-import { RolesGuard } from '../users/guards/roles.guard';
 import { User } from '../users/schemas/user.schema';
 import { UsersService } from '../users/users.service';
 import { CreateStructureDto } from './dto/create-structure.dto';
diff --git a/src/tcl/tclStopPoint.controller.ts b/src/tcl/tclStopPoint.controller.ts
index 2f8b75148..5f7e940c9 100644
--- a/src/tcl/tclStopPoint.controller.ts
+++ b/src/tcl/tclStopPoint.controller.ts
@@ -1,5 +1,8 @@
 import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common';
 import { ApiOperation, ApiResponse } from '@nestjs/swagger';
+import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
+import { Roles } from '../users/decorators/roles.decorator';
+import { RolesGuard } from '../users/guards/roles.guard';
 import { PgisCoord } from './interfaces/pgis.coord';
 import { TclStopPoint } from './tclStopPoint.schema';
 import { TclStopPointService } from './tclStopPoint.service';
@@ -16,7 +19,8 @@ export class TclStopPointController {
     description: 'The stop points have been updated successfully.',
   })
   @Get('/update')
-  //TODO: protect with admin guard when available
+  @UseGuards(JwtAuthGuard, RolesGuard)
+  @Roles('admin')
   public updateStopPoints(): Promise<void> {
     return this.tclStopPointService.updateStopPoints();
   }
diff --git a/src/temp-user/temp-user.service.ts b/src/temp-user/temp-user.service.ts
index 8d3eba399..f4588a4b9 100644
--- a/src/temp-user/temp-user.service.ts
+++ b/src/temp-user/temp-user.service.ts
@@ -3,7 +3,7 @@ import { InjectModel } from '@nestjs/mongoose';
 import { Model, Types } from 'mongoose';
 import { MailerService } from '../mailer/mailer.service';
 import { CreateTempUserDto } from './dto/create-temp-user.dto';
-import { TempUser, TempUserDocument } from './temp-user.schema';
+import { TempUser } from './temp-user.schema';
 import * as ejs from 'ejs';
 import { ITempUser } from './temp-user.interface';
 
diff --git a/src/users/users.service.spec.ts b/src/users/users.service.spec.ts
index e24a4807c..01f5207c7 100644
--- a/src/users/users.service.spec.ts
+++ b/src/users/users.service.spec.ts
@@ -7,6 +7,11 @@ import { CreateUserDto } from './dto/create-user.dto';
 import { HttpException, HttpStatus } from '@nestjs/common';
 import { LoginDto } from '../auth/login-dto';
 import { EmailChangeDto } from './dto/change-email.dto';
+import * as bcrypt from 'bcrypt';
+
+function hashPassword() {
+  return bcrypt.hashSync(process.env.USER_PWD, process.env.SALT);
+}
 
 describe('UsersService', () => {
   let service: UsersService;
@@ -38,7 +43,7 @@ describe('UsersService', () => {
           'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
         emailVerified: false,
         email: 'jacques.dupont@mii.com',
-        password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
+        password: hashPassword(),
         newEmail: '',
         changeEmailToken: '',
         resetPasswordToken: null,
@@ -74,7 +79,7 @@ describe('UsersService', () => {
           'cf1c74c22cedb6b575945098db42d2f493fb759c9142c6aff7980f252886f36ee086574ee99a06bc99119079257116c959c8ec870949cebdef2b293666dbca42',
         emailVerified: false,
         email: 'jacques.dupont@mii.com',
-        password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
+        password: hashPassword(),
         role: 0,
         newEmail: '',
         changeEmailToken: '',
@@ -133,7 +138,7 @@ describe('UsersService', () => {
         validationToken: '',
         emailVerified: true,
         email: 'jacques.dupont@mii.com',
-        password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
+        password: hashPassword(),
         role: 0,
         newEmail: 'test.dupont@mail.com',
         resetPasswordToken: '',
@@ -162,7 +167,7 @@ describe('UsersService', () => {
         validationToken: '',
         emailVerified: true,
         email: 'test.dupont@mail.com',
-        password: '$2a$12$vLQjJ9zAWyUwiXLeQDa6w.yazDArYIpf2WnQF1jRHOjBxADEjUEA3',
+        password: hashPassword(),
         role: 0,
         newEmail: '',
         resetPasswordToken: '',
diff --git a/src/users/users.service.ts b/src/users/users.service.ts
index cf71c5b3f..c7806f64e 100644
--- a/src/users/users.service.ts
+++ b/src/users/users.service.ts
@@ -441,14 +441,14 @@ export class UsersService {
         status = true;
         // For other users who have made the demand on the same structure
         if (otherUsers) {
-          otherUsers.forEach((user) => {
+          otherUsers.forEach((otherUser) => {
             // Remove the structure id from their demand
-            user.pendingStructuresLink = user.pendingStructuresLink.filter((item) => {
+            otherUser.pendingStructuresLink = otherUser.pendingStructuresLink.filter((item) => {
               return !Types.ObjectId(structureId).equals(item);
             });
             // Send a rejection email
-            this.sendStructureClaimApproval(user.email, structureName, false);
-            user.save();
+            this.sendStructureClaimApproval(otherUser.email, structureName, false);
+            otherUser.save();
           });
         }
       }
-- 
GitLab