From 49790c4f18e120a3d4f918b6bc67fce62f1c605b Mon Sep 17 00:00:00 2001 From: Sosthene Date: Mon, 21 Jul 2025 14:03:57 +0200 Subject: [PATCH 01/13] Check for `deleted`, not `statutDuRattachement` when updating user --- src/services/common/IdNotService/IdNotService.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index deeb732f..eca2b5d5 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -50,6 +50,7 @@ interface IRattachementData { numeroTelephone: string; statutDuRattachement: boolean; mailRattachement: string; + deleted: boolean; } interface IOfficeData { @@ -241,12 +242,12 @@ export default class IdNotService extends BaseService { return; } - if (!userData.statutDuRattachement) { + if (userData.deleted) { let rattachements: any; try { rattachements = (await ( - await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?` + searchParams, { + await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?deleted=false` + searchParams, { method: "GET", }) ).json()) as any; @@ -256,14 +257,14 @@ export default class IdNotService extends BaseService { } if (rattachements.totalResultCount === 0) { + console.warn("User has no valid rattachements", user.uid); await this.userService.updateCheckedAt(user.uid!); - //await this.userService.delete(user.uid!); return; } const rattachementsResults = rattachements.result as IRattachementData[]; if (!rattachementsResults) return; rattachementsResults.forEach(async (rattachement) => { - if (rattachement.statutDuRattachement) { + if (rattachement.statutDuRattachement && !rattachement.deleted) { let officeData: IOfficeData; try { From 28cf728eac54fa3f477a3ce52a6c62b95c3498f2 Mon Sep 17 00:00:00 2001 From: Omar Oughriss Date: Mon, 21 Jul 2025 16:48:11 +0200 Subject: [PATCH 02/13] Add updateUser method verbosity --- src/services/common/IdNotService/IdNotService.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index eca2b5d5..250713cc 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -287,6 +287,11 @@ export default class IdNotService extends BaseService { let updates = 0; + console.log("userData", userData); + console.log("user", user); + console.log("user.office_membership!.idNot", user.office_membership!.idNot); + console.log("userData.entite.ou", userData.entite.ou); + if (user.office_membership!.idNot !== userData.entite.ou) { updates++; let officeData = (await this.officeService.get({ where: { idNot: userData.entite.ou } }))[0]; From 1c1a1e3a042f7c8a7d316d7dd201c19b3469ba1b Mon Sep 17 00:00:00 2001 From: Omar Oughriss Date: Mon, 21 Jul 2025 17:06:19 +0200 Subject: [PATCH 03/13] Update verbosity --- src/services/common/IdNotService/IdNotService.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 250713cc..9ac353f6 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -242,6 +242,8 @@ export default class IdNotService extends BaseService { return; } + console.log("First userData", userData); + if (userData.deleted) { let rattachements: any; @@ -287,10 +289,9 @@ export default class IdNotService extends BaseService { let updates = 0; - console.log("userData", userData); - console.log("user", user); - console.log("user.office_membership!.idNot", user.office_membership!.idNot); - console.log("userData.entite.ou", userData.entite.ou); + console.log("Second userData", userData); + console.log("BDD user", user); + if (user.office_membership!.idNot !== userData.entite.ou) { updates++; From 6344f6be15d7663e026007e0bf42f664edcbb52c Mon Sep 17 00:00:00 2001 From: Omar Oughriss Date: Mon, 21 Jul 2025 17:29:16 +0200 Subject: [PATCH 04/13] Stringify logs --- src/services/common/IdNotService/IdNotService.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 9ac353f6..4e22695f 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -222,6 +222,7 @@ export default class IdNotService extends BaseService { public async updateUser(userId: string) { const userInfos = await this.userService.getByUid(userId, { contact: true, role: true, office_membership: true }); const user = User.hydrate(userInfos!); + console.log("Got user from db:", JSON.stringify(user)); const searchParams = new URLSearchParams({ key: this.variables.IDNOT_API_KEY, }); @@ -238,11 +239,11 @@ export default class IdNotService extends BaseService { ) ).json()) as IRattachementData; } catch (error) { - console.error("Error fetching user data", error); + console.error(`Error fetching user data for ${user.uid}: ${error}`); return; } - console.log("First userData", userData); + console.log("Got userData from idnot", JSON.stringify(userData)); if (userData.deleted) { let rattachements: any; @@ -282,6 +283,7 @@ export default class IdNotService extends BaseService { if (officeData.typeEntite.name === "office") { userData = rattachement; + console.log("Updated userData", JSON.stringify(userData)); } } }); @@ -289,9 +291,6 @@ export default class IdNotService extends BaseService { let updates = 0; - console.log("Second userData", userData); - console.log("BDD user", user); - if (user.office_membership!.idNot !== userData.entite.ou) { updates++; @@ -366,9 +365,6 @@ export default class IdNotService extends BaseService { return; } const officeData = (await officeRawData.json()) as IOfficeData; - console.log("office", office); - - console.log("officeData", officeData); let updates = 0; //093051 = demo @@ -380,6 +376,7 @@ export default class IdNotService extends BaseService { updates++; office.office_status = this.getOfficeStatus(officeData.statutEntite.name); } + console.log(`Updating office: ${office.uid} - ${office.name} - ${office.crpcen}`); if (updates != 0) await this.officeService.update(office.uid!, office); await this.officeService.updateCheckedAt(office.uid!); } @@ -556,6 +553,7 @@ export default class IdNotService extends BaseService { public async updateOffices() { const officesReq = await this.officeService.getOfficesToBeChecked(); const offices = Office.hydrateArray(officesReq); + console.log(`Updating ${offices.length} offices`); offices.forEach(async (office) => { await this.updateOffice(office.uid!); }); From b96720c0af6d524511c65e7254afb7104125d153 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 22 Jul 2025 14:48:04 +0200 Subject: [PATCH 05/13] Handle raw response from idnot --- .../common/IdNotService/IdNotService.ts | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 4e22695f..44a63573 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -227,21 +227,29 @@ export default class IdNotService extends BaseService { key: this.variables.IDNOT_API_KEY, }); - let userData: IRattachementData; + let userRawData: Response; try { - userData = (await ( - await fetch( + userRawData = await fetch( `${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/rattachements/${user.idNot}_${user.office_membership!.idNot}?` + searchParams, { method: "GET", }, ) - ).json()) as IRattachementData; } catch (error) { console.error(`Error fetching user data for ${user.uid}: ${error}`); return; } + + if (userRawData.status === 404) { + console.error(`User ${user.uid} not found in idnot`); + return; + } else if (userRawData.status !== 200) { + console.error(`Error fetching user data for ${user.uid}: ${userRawData.status} - ${userRawData.statusText}`); + return; + } + + let userData = (await userRawData.json()) as IRattachementData; console.log("Got userData from idnot", JSON.stringify(userData)); @@ -249,16 +257,22 @@ export default class IdNotService extends BaseService { let rattachements: any; try { - rattachements = (await ( - await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?deleted=false` + searchParams, { - method: "GET", - }) - ).json()) as any; + rattachements = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?deleted=false` + searchParams, { + method: "GET", + }); } catch (error) { console.error("Error fetching rattachements", error); return; } + if (rattachements.status === 404) { + console.error(`User ${user.uid} not found in idnot`); + return; + } else if (rattachements.status !== 200) { + console.error(`Error fetching rattachements for ${user.uid}: ${rattachements.status} - ${rattachements.statusText}`); + return; + } + if (rattachements.totalResultCount === 0) { console.warn("User has no valid rattachements", user.uid); await this.userService.updateCheckedAt(user.uid!); From 384e139cedddabb5f523b6b84dd8bc6a7ec1fe1a Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 22 Jul 2025 15:37:56 +0200 Subject: [PATCH 06/13] more verbosity --- src/services/common/IdNotService/IdNotService.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 44a63573..fec3a9c8 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -256,6 +256,8 @@ export default class IdNotService extends BaseService { if (userData.deleted) { let rattachements: any; + console.log("Fetching rattachements for user", user.uid); + console.log(searchParams.toString()); try { rattachements = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?deleted=false` + searchParams, { method: "GET", @@ -383,14 +385,17 @@ export default class IdNotService extends BaseService { let updates = 0; //093051 = demo if (office.name !== officeData.denominationSociale && office.name !== officeData.codeCrpcen && office.crpcen !== "029178" && office.crpcen !== "035010" && office.crpcen !== "093051") { + console.log(`Updating office name: ${office.uid} - ${office.name} - ${office.crpcen}`); updates++; office.name = officeData.denominationSociale ?? officeData.codeCrpcen; + console.log(`New name: ${office.name}`); } if (office.office_status !== this.getOfficeStatus(officeData.statutEntite.name)) { + console.log(`Updating office status: ${office.uid} - ${office.name} - ${office.crpcen}`); updates++; office.office_status = this.getOfficeStatus(officeData.statutEntite.name); + console.log(`New status: ${office.office_status}`); } - console.log(`Updating office: ${office.uid} - ${office.name} - ${office.crpcen}`); if (updates != 0) await this.officeService.update(office.uid!, office); await this.officeService.updateCheckedAt(office.uid!); } From a132e363085ad9c8f70fffb82f0471e6792c8731 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 12:58:58 +0200 Subject: [PATCH 07/13] Fix url --- src/services/common/IdNotService/IdNotService.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index fec3a9c8..a3e6e46d 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -259,7 +259,7 @@ export default class IdNotService extends BaseService { console.log("Fetching rattachements for user", user.uid); console.log(searchParams.toString()); try { - rattachements = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?deleted=false` + searchParams, { + rattachements = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?` + searchParams, { method: "GET", }); } catch (error) { @@ -281,6 +281,7 @@ export default class IdNotService extends BaseService { return; } const rattachementsResults = rattachements.result as IRattachementData[]; + console.log("rattachementsResults", JSON.stringify(rattachementsResults)); if (!rattachementsResults) return; rattachementsResults.forEach(async (rattachement) => { if (rattachement.statutDuRattachement && !rattachement.deleted) { From 0949770e6683a5c56bb306a6ecf372af1df312b1 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 13:23:54 +0200 Subject: [PATCH 08/13] Fix updateUser res parsing --- .../common/IdNotService/IdNotService.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index a3e6e46d..c8170d48 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -257,23 +257,24 @@ export default class IdNotService extends BaseService { let rattachements: any; console.log("Fetching rattachements for user", user.uid); - console.log(searchParams.toString()); try { - rattachements = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?` + searchParams, { + const res = await fetch(`${this.variables.IDNOT_API_BASE_URL}/api/pp/v2/personnes/${user.idNot}/rattachements?` + searchParams, { method: "GET", }); + if (res.status === 404) { + console.error(`User ${user.uid} not found in idnot`); + return; + } else if (res.status !== 200) { + console.error(`Error fetching rattachements for ${user.uid}: ${rattachements.status} - ${rattachements.statusText}`); + return; + } + + rattachements = await res.json(); } catch (error) { console.error("Error fetching rattachements", error); return; } - if (rattachements.status === 404) { - console.error(`User ${user.uid} not found in idnot`); - return; - } else if (rattachements.status !== 200) { - console.error(`Error fetching rattachements for ${user.uid}: ${rattachements.status} - ${rattachements.statusText}`); - return; - } if (rattachements.totalResultCount === 0) { console.warn("User has no valid rattachements", user.uid); From d794bfbbc9e58b8b708c0c16e9b94afb3924bdb5 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 16:12:33 +0200 Subject: [PATCH 09/13] Updated userData includes office --- src/services/common/IdNotService/IdNotService.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index c8170d48..309eb245 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -299,8 +299,11 @@ export default class IdNotService extends BaseService { return; } + console.log("officeData", JSON.stringify(officeData)); + if (officeData.typeEntite.name === "office") { userData = rattachement; + userData.entite = officeData; console.log("Updated userData", JSON.stringify(userData)); } } @@ -309,7 +312,6 @@ export default class IdNotService extends BaseService { let updates = 0; - if (user.office_membership!.idNot !== userData.entite.ou) { updates++; let officeData = (await this.officeService.get({ where: { idNot: userData.entite.ou } }))[0]; @@ -345,15 +347,18 @@ export default class IdNotService extends BaseService { officeData = await this.officeService.create(office); } user.office_membership = officeData; + console.log("Updated user.office_membership", JSON.stringify(user.office_membership)); } if (user.contact!.email !== userData.mailRattachement) { updates++; user.contact!.email = userData.mailRattachement; + console.log("Updated user.contact.email", JSON.stringify(user.contact!.email)); } if (user.contact!.cell_phone_number !== userData.numeroMobile) { updates++; user.contact!.cell_phone_number = userData.numeroMobile; + console.log("Updated user.contact.cell_phone_number", JSON.stringify(user.contact!.cell_phone_number)); } if (updates != 0) await this.userService.update(user.uid!, user); await this.userService.updateCheckedAt(user.uid!); From df3ac394b2525c8b9f9be92c512404587c7a561f Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 17:17:52 +0200 Subject: [PATCH 10/13] more verbosity --- src/common/repositories/UsersRepository.ts | 1 + src/services/common/IdNotService/IdNotService.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index 4dc65708..606700c9 100644 --- a/src/common/repositories/UsersRepository.ts +++ b/src/common/repositories/UsersRepository.ts @@ -90,6 +90,7 @@ export default class UsersRepository extends BaseRepository { */ public async update(uid: string, user: User): Promise { + console.log("Updating user", JSON.stringify(user)); const updateArgs: Prisma.UsersUpdateArgs = { where: { uid: uid, diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 309eb245..9bdbc4d3 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -275,11 +275,14 @@ export default class IdNotService extends BaseService { return; } + console.log("rattachements", JSON.stringify(rattachements)); - if (rattachements.totalResultCount === 0) { + if (rattachements && rattachements.totalResultCount === 0 && rattachements.result.length === 0) { console.warn("User has no valid rattachements", user.uid); await this.userService.updateCheckedAt(user.uid!); return; + } else { + console.log(`Found ${rattachements.totalResultCount} rattachements for ${user.uid}`); } const rattachementsResults = rattachements.result as IRattachementData[]; console.log("rattachementsResults", JSON.stringify(rattachementsResults)); @@ -312,9 +315,14 @@ export default class IdNotService extends BaseService { let updates = 0; + console.log("user.office_membership.idNot", JSON.stringify(user.office_membership!.idNot)); + console.log("userData.entite.ou", JSON.stringify(userData.entite.ou)); + if (user.office_membership!.idNot !== userData.entite.ou) { + console.log("Updating user.office_membership"); updates++; let officeData = (await this.officeService.get({ where: { idNot: userData.entite.ou } }))[0]; + console.log("officeData", JSON.stringify(officeData)); if (!officeData) { let officeLocationData: IOfficeLocation; @@ -360,6 +368,7 @@ export default class IdNotService extends BaseService { user.contact!.cell_phone_number = userData.numeroMobile; console.log("Updated user.contact.cell_phone_number", JSON.stringify(user.contact!.cell_phone_number)); } + console.log("updates", updates); if (updates != 0) await this.userService.update(user.uid!, user); await this.userService.updateCheckedAt(user.uid!); } From 9bfc33a5c7c99469ff91d97697fb726e8fc9b752 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 20:02:14 +0200 Subject: [PATCH 11/13] Fix async issue --- src/services/common/IdNotService/IdNotService.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 9bdbc4d3..c14eae58 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -285,10 +285,11 @@ export default class IdNotService extends BaseService { console.log(`Found ${rattachements.totalResultCount} rattachements for ${user.uid}`); } const rattachementsResults = rattachements.result as IRattachementData[]; - console.log("rattachementsResults", JSON.stringify(rattachementsResults)); if (!rattachementsResults) return; - rattachementsResults.forEach(async (rattachement) => { + + for (const rattachement of rattachementsResults) { if (rattachement.statutDuRattachement && !rattachement.deleted) { + console.log("rattachementsResults", JSON.stringify(rattachementsResults)); let officeData: IOfficeData; try { @@ -299,7 +300,7 @@ export default class IdNotService extends BaseService { ).json()) as IOfficeData; } catch (error) { console.error("Error fetching office data", error); - return; + continue; } console.log("officeData", JSON.stringify(officeData)); @@ -308,9 +309,10 @@ export default class IdNotService extends BaseService { userData = rattachement; userData.entite = officeData; console.log("Updated userData", JSON.stringify(userData)); + break; // Found the first valid office, no need to continue } } - }); + } } let updates = 0; From 3e88c933578275d7389bc63b9e6c186e29a2b58e Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 23 Jul 2025 22:59:25 +0200 Subject: [PATCH 12/13] Fix null values with prisma --- src/common/repositories/UsersRepository.ts | 8 +++-- .../common/IdNotService/IdNotService.ts | 34 +++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index 606700c9..f5e25b83 100644 --- a/src/common/repositories/UsersRepository.ts +++ b/src/common/repositories/UsersRepository.ts @@ -101,9 +101,9 @@ export default class UsersRepository extends BaseRepository { update: { first_name: user.contact?.first_name, last_name: user.contact?.last_name, - email: user.contact?.email, - phone_number: user.contact?.phone_number, - cell_phone_number: user.contact?.cell_phone_number, + email: user.contact?.email === null ? undefined : user.contact?.email, + phone_number: user.contact?.phone_number === null ? undefined : user.contact?.phone_number, + cell_phone_number: user.contact?.cell_phone_number === null ? undefined : user.contact?.cell_phone_number, civility: ECivility[user.contact?.civility as keyof typeof ECivility], }, }, @@ -142,6 +142,8 @@ export default class UsersRepository extends BaseRepository { }; } + console.log("updateArgs", JSON.stringify(updateArgs)); + return this.model.update({ ...updateArgs, include: { contact: true, office_membership: { include: { address: true } } } }); } diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index c14eae58..7eaa9b63 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -370,8 +370,11 @@ export default class IdNotService extends BaseService { user.contact!.cell_phone_number = userData.numeroMobile; console.log("Updated user.contact.cell_phone_number", JSON.stringify(user.contact!.cell_phone_number)); } - console.log("updates", updates); - if (updates != 0) await this.userService.update(user.uid!, user); + if (updates != 0) { + // Filter out null values before updating to prevent Prisma errors + const convertedUser = this.convertNullToUndefined(user); + await this.userService.update(user.uid!, convertedUser); + } await this.userService.updateCheckedAt(user.uid!); } @@ -582,17 +585,36 @@ export default class IdNotService extends BaseService { public async updateUsers() { const usersReq = await this.userService.getUsersToBeChecked(); const users = User.hydrateArray(usersReq); - users.forEach(async (user) => { + for (const user of users) { await this.updateUser(user.uid!); - }); + } } public async updateOffices() { const officesReq = await this.officeService.getOfficesToBeChecked(); const offices = Office.hydrateArray(officesReq); console.log(`Updating ${offices.length} offices`); - offices.forEach(async (office) => { + for (const office of offices) { await this.updateOffice(office.uid!); - }); + } + } + + /** + * Utility function to convert null values to undefined + * This prevents Prisma from throwing errors about null values + */ + private convertNullToUndefined>(obj: T): T { + const converted = { ...obj }; + + for (const [key, value] of Object.entries(converted)) { + if (value === null) { + console.log(`Converting null to undefined for key: ${key}`); + (converted as any)[key] = undefined; + } else if (typeof value === 'object' && !Array.isArray(value)) { + (converted as any)[key] = this.convertNullToUndefined(value); + } + } + + return converted; } } From 6c30016e0d0dfc59d91df5b2e4aa7dadacb421c5 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Thu, 24 Jul 2025 00:03:49 +0200 Subject: [PATCH 13/13] Don't trigger updateUser on missing email/phone --- .../common/IdNotService/IdNotService.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/services/common/IdNotService/IdNotService.ts b/src/services/common/IdNotService/IdNotService.ts index 7eaa9b63..3b7cfaee 100644 --- a/src/services/common/IdNotService/IdNotService.ts +++ b/src/services/common/IdNotService/IdNotService.ts @@ -315,16 +315,12 @@ export default class IdNotService extends BaseService { } } - let updates = 0; - - console.log("user.office_membership.idNot", JSON.stringify(user.office_membership!.idNot)); - console.log("userData.entite.ou", JSON.stringify(userData.entite.ou)); + let update = false; if (user.office_membership!.idNot !== userData.entite.ou) { console.log("Updating user.office_membership"); - updates++; + update = true; let officeData = (await this.officeService.get({ where: { idNot: userData.entite.ou } }))[0]; - console.log("officeData", JSON.stringify(officeData)); if (!officeData) { let officeLocationData: IOfficeLocation; @@ -360,17 +356,17 @@ export default class IdNotService extends BaseService { console.log("Updated user.office_membership", JSON.stringify(user.office_membership)); } - if (user.contact!.email !== userData.mailRattachement) { - updates++; + if (userData.mailRattachement && (user.contact!.email === null || user.contact!.email === undefined || user.contact!.email !== userData.mailRattachement)) { + update = true; user.contact!.email = userData.mailRattachement; console.log("Updated user.contact.email", JSON.stringify(user.contact!.email)); } - if (user.contact!.cell_phone_number !== userData.numeroMobile) { - updates++; + if (userData.numeroMobile && (user.contact!.cell_phone_number === null || user.contact!.cell_phone_number === undefined || user.contact!.cell_phone_number !== userData.numeroMobile)) { + update = true; user.contact!.cell_phone_number = userData.numeroMobile; console.log("Updated user.contact.cell_phone_number", JSON.stringify(user.contact!.cell_phone_number)); } - if (updates != 0) { + if (update) { // Filter out null values before updating to prevent Prisma errors const convertedUser = this.convertNullToUndefined(user); await this.userService.update(user.uid!, convertedUser);