From 2450d674e2a6a810f679312419eb9958a58da036 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Fri, 12 Sep 2025 12:50:13 +0200 Subject: [PATCH] Update CustomerService --- .../Api/LeCoffreApi/sdk/CustomerService.ts | 127 ++++++------------ 1 file changed, 43 insertions(+), 84 deletions(-) diff --git a/src/common/Api/LeCoffreApi/sdk/CustomerService.ts b/src/common/Api/LeCoffreApi/sdk/CustomerService.ts index 2654f2a3..2d77745f 100644 --- a/src/common/Api/LeCoffreApi/sdk/CustomerService.ts +++ b/src/common/Api/LeCoffreApi/sdk/CustomerService.ts @@ -3,6 +3,7 @@ import { v4 as uuidv4 } from 'uuid'; import User from 'src/sdk/User'; import AbstractService from './AbstractService'; +import { DEFAULT_STORAGE_URLS } from '@Front/Config/AppConstants'; export default class CustomerService extends AbstractService { @@ -10,7 +11,7 @@ export default class CustomerService extends AbstractService { super(); } - public static createCustomer(customerData: any, validatorId: string): Promise { + public static async createCustomer(customerData: any, validatorId: string): Promise<{ processId: string, processData: any }> { const ownerId: string = User.getInstance().getPairingId()!; const processData: any = { @@ -23,114 +24,72 @@ export default class CustomerService extends AbstractService { }; const privateFields: string[] = Object.keys(processData); - privateFields.splice(privateFields.indexOf('uid'), 1); - privateFields.splice(privateFields.indexOf('utype'), 1); - privateFields.splice(privateFields.indexOf('isDeleted'), 1); + const allFields: string[] = [...privateFields, 'roles']; const roles: any = { demiurge: { - members: [...[ownerId], validatorId], + members: [ownerId, validatorId], validation_rules: [], storages: [] }, owner: { - members: [ownerId], + members: [ownerId, validatorId], validation_rules: [ { - quorum: 0.5, - fields: [...privateFields, 'roles', 'uid', 'utype'], + quorum: 1, + fields: allFields, min_sig_member: 1, }, ], - storages: [] - }, - validator: { - members: [validatorId], - validation_rules: [ - { - quorum: 0.5, - fields: ['idCertified', 'roles'], - min_sig_member: 1, - }, - { - quorum: 0.0, - fields: [...privateFields], - min_sig_member: 0, - }, - ], - storages: [] + storages: [...DEFAULT_STORAGE_URLS] }, apophis: { - members: [ownerId], + members: [ownerId, validatorId], validation_rules: [], storages: [] } }; - return new Promise((resolve: (processCreated: any) => void, reject: (error: string) => void) => { - this.messageBus.createProcess(processData, privateFields, roles).then((processCreated: any) => { - this.messageBus.notifyUpdate(processCreated.processId, processCreated.process.states[0].state_id).then(() => { - this.messageBus.validateState(processCreated.processId, processCreated.process.states[0].state_id).then((_stateValidated: any) => { - this.getCustomerByUid(processCreated.processData.uid).then(resolve).catch(reject); - }).catch(reject); - }).catch(reject); - }).catch(reject); - }); + try { + const processCreated = await this.messageBus.createProcess(processData, privateFields, roles); + await this.messageBus.notifyUpdate(processCreated.processId, processCreated.process.states[0].state_id); + await this.messageBus.validateState(processCreated.processId, processCreated.process.states[0].state_id); + const finalProcessData = await this.messageBus.getProcessData(processCreated.processId); + + return { processId: processCreated.processId, processData: finalProcessData[processCreated.processId] }; + } catch (error) { + throw error; + } } - public static getCustomers(): Promise { + public static getCustomers(callback: (processes: Record) => void): void { // Check if we have valid cache - const items: any[] = this.getItems('_customers_'); - - return this.messageBus.getProcessesDecoded((publicValues: any) => - publicValues['uid'] && - publicValues['utype'] && - publicValues['utype'] === 'customer' && - publicValues['isDeleted'] && - publicValues['isDeleted'] === 'false' && - !items.map((item: any) => item.processData.uid).includes(publicValues['uid']) - ).then((processes: any[]) => { - if (processes.length === 0) { - return items; - } else { - for (const process of processes) { - // Update cache - this.setItem('_customers_', process); - - items.push(process); - } - return items; - } - }); - } - - public static getCustomerByUid(uid: string): Promise { - // Check if we have valid cache - const item: any = this.getItem('_customers_', uid); - if (item) { - return Promise.resolve(item); + const items: Record = this.getItems('_customers_'); + if (Object.keys(items).length > 0) { + setTimeout(() => callback(items), 0); } - return new Promise((resolve: (process: any) => void, reject: (error: string) => void) => { - this.messageBus.getProcessesDecoded((publicValues: any) => - publicValues['uid'] && - publicValues['uid'] === uid && - publicValues['utype'] && - publicValues['utype'] === 'customer' && - publicValues['isDeleted'] && - publicValues['isDeleted'] === 'false' - ).then((processes: any[]) => { - if (processes.length === 0) { - resolve(null); - } else { - const process: any = processes[0]; + this.messageBus.getProcessesDecoded((_processId: string, values: any) => { + return values['utype'] + && values['utype'] === 'customer' + && values['isDeleted'] + && values['isDeleted'] === 'false'; + }).then(async (processes: Record) => { + if (Object.keys(processes).length === 0) { + callback(items); + return; + } - // Update cache - this.setItem('_customers_', process); + const updatedItems: Record = { ...items }; - resolve(process); - } - }).catch(reject); + for (const [processId, process] of Object.entries(processes)) { + // Update cache + this.setItem('_customers_', processId, process); + + updatedItems[processId] = process; + } + + callback(updatedItems); }); } @@ -143,7 +102,7 @@ export default class CustomerService extends AbstractService { const customerUid: string = process.processData.uid; this.removeItem('_customers_', customerUid); - this.getCustomerByUid(customerUid).then(resolve).catch(reject); + resolve(); }).catch(reject); }).catch(reject); }).catch(reject);