11import argon2 from "argon2" ;
22import axios from "axios" ;
3+ import jwt from "jsonwebtoken" ;
34import {
45 Arg ,
56 Ctx ,
@@ -15,6 +16,7 @@ import { IsNull } from "typeorm";
1516import { PendingInvitation } from "../entities/PendingInvitation" ;
1617import User from "../entities/User" ;
1718import cookieManager from "../lib/cookieManager/cookieManager" ;
19+ import { getVariableEnv } from "../lib/envManager/envManager" ;
1820import { RoleMiddleware } from "../middleware/RoleMiddleware" ;
1921import { addMembersToGroup } from "../services/groupMemberService" ;
2022import type { ContextType } from "../types/context" ;
@@ -163,6 +165,9 @@ export default class UserResolver {
163165 try {
164166 urlImage = await axios . post ( "http://picture-service:3410/service/picture/uploads" , {
165167 imageBase64 : data . pictureBase64 ,
168+ tokenService : jwt . sign ( { service : "API-graphQL" } , getVariableEnv ( "INTERNAL_SECRET_KEY" ) , {
169+ expiresIn : "2m" ,
170+ } ) ,
166171 } ) ;
167172 } catch ( _error ) {
168173 throw new Error ( "Erreur lors de l'upload de l'image" ) ;
@@ -262,11 +267,18 @@ export default class UserResolver {
262267 async UpdateMyProfile ( @Arg ( "data" ) data : UpdateMyProfileInput , @Ctx ( ) ctx : ContextType ) {
263268 if ( ! ctx . user ) throw new Error ( "Utilisateur non connecté update impossible" ) ;
264269
270+ // récupère l'utilisateur avant la modification
271+ const userBeforeUpdate = await User . findOne ( { where : { id : ctx . user . id } } ) ;
272+
265273 let urlImage = null ;
266274 if ( data . pictureBase64 ) {
267275 try {
268276 urlImage = await axios . post ( "http://picture-service:3410/service/picture/uploads" , {
269277 imageBase64 : data . pictureBase64 ,
278+ tokenService : jwt . sign ( { service : "API-graphQL" } , getVariableEnv ( "INTERNAL_SECRET_KEY" ) , {
279+ expiresIn : "2m" ,
280+ } ) ,
281+ urlExistant : userBeforeUpdate ?. image_url , // donne a notre service d'image son potentielle url actuelle
270282 } ) ;
271283 } catch ( _error ) {
272284 throw new Error ( "Erreur lors de l'upload de l'image" ) ;
@@ -328,6 +340,12 @@ export default class UserResolver {
328340 {
329341 deletedAt : new Date ( ) ,
330342 email : deletedEmail ,
343+ firstName : "deleted" ,
344+ lastName : "user" ,
345+ phone_number : "0000000000" ,
346+ image_url : null ,
347+ password_hashed : "" ,
348+ date_of_birth : "1970-01-01" ,
331349 } ,
332350 ) ;
333351
@@ -468,13 +486,37 @@ export default class UserResolver {
468486 } ;
469487 }
470488
489+ // si il existe on fait appel a notres service d'image pour qu'il supprime l'image de profil de l'utilisateur
490+ if ( user . image_url ) {
491+ try {
492+ await axios . post ( "http://picture-service:3410/service/picture/delete" , {
493+ url : user . image_url ,
494+ tokenService : jwt . sign ( { service : "API-graphQL" } , getVariableEnv ( "INTERNAL_SECRET_KEY" ) , {
495+ expiresIn : "2m" ,
496+ } ) ,
497+ } ) ;
498+ } catch ( error ) {
499+ // on ne bloque pas la suppression du compte si la suppression de l'image échoue
500+ console . error (
501+ `Erreur lors de la suppression de l'image de profil de l'utilisateur id=${ user . id } :` ,
502+ error ,
503+ ) ;
504+ }
505+ }
506+
471507 // Soft delete : mettre à jour le champ deletedAt et modifier l'email pour permettre la réutilisation
472508 const deletedEmail = `${ user . email } _deleted_${ Date . now ( ) } ` ;
473509 await User . update (
474510 { id : ctx . user . id } ,
475511 {
476512 deletedAt : new Date ( ) ,
477513 email : deletedEmail ,
514+ firstName : "deleted" ,
515+ lastName : "user" ,
516+ phone_number : "0000000000" ,
517+ image_url : null ,
518+ password_hashed : "" ,
519+ date_of_birth : "1970-01-01" ,
478520 } ,
479521 ) ;
480522
0 commit comments