From d78c7fb0e1783629e48f03817841998cf1dd81be Mon Sep 17 00:00:00 2001 From: priyanshee1604 Date: Tue, 4 Feb 2025 16:05:06 +0530 Subject: [PATCH 1/3] Implemented: Bulk API calls to add facility to group and to update facility to group on Manage Facilities page.(#339) --- src/services/FacilityService.ts | 18 +++++++ src/views/FacilityDetails.vue | 4 +- src/views/ManageFacilities.vue | 83 +++++++++++++++++++-------------- 3 files changed, 68 insertions(+), 37 deletions(-) diff --git a/src/services/FacilityService.ts b/src/services/FacilityService.ts index fc7352c..44aee7d 100644 --- a/src/services/FacilityService.ts +++ b/src/services/FacilityService.ts @@ -811,7 +811,24 @@ const updateProductStoreFacilityGroup = async (payload: any): Promise => { }) } +const addFacilitiesToGroup = async (payload: any): Promise => { + return api({ + url: "service/addFacilitiesToGroup", + method: "post", + data: payload + }) +} + +const updateFacilitiesToGroup = async (payload: any): Promise => { + return api({ + url: "service/updateFacilitiesToGroup", + method: "post", + data: payload + }) +} + export const FacilityService = { + addFacilitiesToGroup, addFacilityToGroup, addPartyToFacility, associateCalendarToFacility, @@ -864,6 +881,7 @@ export const FacilityService = { updateFacilityLocation, updateFacilityPostalAddress, updateFacilityTelecomNumber, + updateFacilitiesToGroup, updateFacilityToGroup, updateProductStoreFacility, updateProductStoreFacilityGroup, diff --git a/src/views/FacilityDetails.vue b/src/views/FacilityDetails.vue index 8b86f08..5290d38 100644 --- a/src/views/FacilityDetails.vue +++ b/src/views/FacilityDetails.vue @@ -976,7 +976,7 @@ export default defineComponent({ }); } else { const groupInformation = this.current.groupInformation.find((group: any) => group.facilityGroupId === facilityGroupId) - resp = await await FacilityService.updateFacilityToGroup({ + resp = await FacilityService.updateFacilityToGroup({ "facilityId": this.current.facilityId, "facilityGroupId": facilityGroupId, "fromDate": groupInformation.fromDate, @@ -1014,7 +1014,7 @@ export default defineComponent({ successMessage = translate('is now selling on', { "facilityName": this.current.facilityName, "facilityGroupId": facilityGroup.facilityGroupName }); } else { const groupInformation = this.current.groupInformation.find((group: any) => group.facilityGroupId === facilityGroup.facilityGroupId) - resp = await await FacilityService.updateFacilityToGroup({ + resp = await FacilityService.updateFacilityToGroup({ "facilityId": this.current.facilityId, "facilityGroupId": facilityGroup.facilityGroupId, "fromDate": groupInformation.fromDate, diff --git a/src/views/ManageFacilities.vue b/src/views/ManageFacilities.vue index 07f77da..1179d0d 100644 --- a/src/views/ManageFacilities.vue +++ b/src/views/ManageFacilities.vue @@ -315,48 +315,61 @@ const facilitiesToAdd = this.selectedFacilities.filter((facility: any) => !memberFacilityIds.includes(facility.facilityId)) const selectedFacilityIds = this.selectedFacilities ? new Set(this.selectedFacilities.map((facility:any) => facility.facilityId)) as any : []; const facilitiesToRemove = this.memberFacilities.filter((facility: any) => !selectedFacilityIds.has(facility.facilityId)) - - const removeResponses = await Promise.allSettled(facilitiesToRemove - .map((facility: any) => FacilityService.updateFacilityToGroup({ - "facilityId": facility.facilityId, - "facilityGroupId": facility.facilityGroupId, - "fromDate": facility.fromDate, - "thruDate": DateTime.now().toMillis() - })) - ) - const addResponses = await Promise.allSettled(facilitiesToAdd - .map((facility: any) => FacilityService.addFacilityToGroup({ - "facilityId": facility.facilityId, - "facilityGroupId": this.facilityGroupId, - "sequenceNum": facility.sequenceNum - })) - ) + try{ + const removeResponses = await FacilityService.updateFacilitiesToGroup({ + "payload": { + "facilityList": facilitiesToRemove.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "fromDate": facility.fromDate, + "thruDate": DateTime.now().toMillis() + })) + } + }) + + const addResponses = await FacilityService.addFacilitiesToGroup({ + "payload": { + "facilityList": facilitiesToAdd.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "sequenceNum": facility.sequenceNum + })) + } + }) - const facilityIdsToAdd = facilitiesToAdd ? new Set(facilitiesToAdd.map((facility:any) => facility.facilityId)) as any : []; - const existingFacilityMembers = this.selectedFacilities.filter((facility:any) => !facilityIdsToAdd.has(facility.facilityId)) - const diffMemberFacilitySequencing = existingFacilityMembers.filter((facility: any) => this.memberFacilities.some((memberFacility: any) => memberFacility.facilityId === facility.facilityId && memberFacility.sequenceNum !== facility.sequenceNum)) + const facilityIdsToAdd = facilitiesToAdd ? new Set(facilitiesToAdd.map((facility:any) => facility.facilityId)) as any : []; + const existingFacilityMembers = this.selectedFacilities.filter((facility:any) => !facilityIdsToAdd.has(facility.facilityId)) + const diffMemberFacilitySequencing = existingFacilityMembers.filter((facility: any) => this.memberFacilities.some((memberFacility: any) => memberFacility.facilityId === facility.facilityId && memberFacility.sequenceNum !== facility.sequenceNum)) - const memberFacilityDetail = this.memberFacilities.reduce((memberInfo:any, facility:any) => { - memberInfo[facility.facilityId] = facility; - return memberInfo; - }, {}); + const memberFacilityDetail = this.memberFacilities.reduce((memberInfo:any, facility:any) => { + memberInfo[facility.facilityId] = facility; + return memberInfo; + }, {}); - const sequenceUpdateResponses = await Promise.allSettled(diffMemberFacilitySequencing.map((memberFacility: any) => { - FacilityService.updateFacilityToGroup({ - "facilityId": memberFacility.facilityId, - "facilityGroupId": this.facilityGroupId, - "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, - "sequenceNum": memberFacility.sequenceNum - }); - })) + const sequenceUpdateResponses = await FacilityService.updateFacilitiesToGroup({ + "payload": { + "facilityList": diffMemberFacilitySequencing.map((memberFacility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": memberFacility.facilityId, + "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, + "sequenceNum": memberFacility.sequenceNum + })) + } + }) - const hasFailedResponse = [...removeResponses, ...addResponses, ...sequenceUpdateResponses].some((response: any) => response.status === 'rejected') - if (hasFailedResponse) { + if(hasError(removeResponses)){ + throw removeResponses + }else if(hasError(addResponses)){ + throw addResponses + }else if(hasError(sequenceUpdateResponses)){ + throw sequenceUpdateResponses + } + }catch(error){ showToast(translate("Failed to update some member facilities.")) - } else { - showToast(translate("Member facilities updated successfully.")) + logger.error(error) } + this.isFacilityMembersModified = false; this.router.push({ path: `/tabs/find-groups` }) }, From d15c64608882bc13088dd6c80abd89158a10bbe2 Mon Sep 17 00:00:00 2001 From: priyanshee1604 Date: Thu, 6 Feb 2025 14:36:35 +0530 Subject: [PATCH 2/3] Improved: Added check to not make this api calls if there are no facilities to add/remove or change in sequence.(#339) --- src/views/ManageFacilities.vue | 112 +++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 46 deletions(-) diff --git a/src/views/ManageFacilities.vue b/src/views/ManageFacilities.vue index 1179d0d..a5a5c8f 100644 --- a/src/views/ManageFacilities.vue +++ b/src/views/ManageFacilities.vue @@ -315,61 +315,81 @@ const facilitiesToAdd = this.selectedFacilities.filter((facility: any) => !memberFacilityIds.includes(facility.facilityId)) const selectedFacilityIds = this.selectedFacilities ? new Set(this.selectedFacilities.map((facility:any) => facility.facilityId)) as any : []; const facilitiesToRemove = this.memberFacilities.filter((facility: any) => !selectedFacilityIds.has(facility.facilityId)) + + if(facilitiesToRemove.length > 0){ + try{ + const removeResponse = await FacilityService.updateFacilitiesToGroup({ + "payload": { + "facilityList": facilitiesToRemove.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "fromDate": facility.fromDate, + "thruDate": DateTime.now().toMillis() + })) + } + }) - try{ - const removeResponses = await FacilityService.updateFacilitiesToGroup({ - "payload": { - "facilityList": facilitiesToRemove.map((facility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": facility.facilityId, - "fromDate": facility.fromDate, - "thruDate": DateTime.now().toMillis() - })) + if(hasError(removeResponse)){ + throw removeResponse } - }) + showToast(translate("Member facilities updated successfully.")) + }catch(error){ + showToast(translate("Failed to update some member facilities.")) + } + } - const addResponses = await FacilityService.addFacilitiesToGroup({ - "payload": { - "facilityList": facilitiesToAdd.map((facility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": facility.facilityId, - "sequenceNum": facility.sequenceNum - })) + if(facilitiesToAdd.length > 0){ + try{ + const addResponse = await FacilityService.addFacilitiesToGroup({ + "payload": { + "facilityList": facilitiesToAdd.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "sequenceNum": facility.sequenceNum + })) + } + }) + + if(hasError(addResponse)){ + throw addResponse } - }) + showToast(translate("Member facilities updated successfully.")) + }catch(error){ + showToast(translate("Failed to update some member facilities.")) + } + } - const facilityIdsToAdd = facilitiesToAdd ? new Set(facilitiesToAdd.map((facility:any) => facility.facilityId)) as any : []; - const existingFacilityMembers = this.selectedFacilities.filter((facility:any) => !facilityIdsToAdd.has(facility.facilityId)) - const diffMemberFacilitySequencing = existingFacilityMembers.filter((facility: any) => this.memberFacilities.some((memberFacility: any) => memberFacility.facilityId === facility.facilityId && memberFacility.sequenceNum !== facility.sequenceNum)) - - const memberFacilityDetail = this.memberFacilities.reduce((memberInfo:any, facility:any) => { - memberInfo[facility.facilityId] = facility; - return memberInfo; - }, {}); + const facilityIdsToAdd = facilitiesToAdd ? new Set(facilitiesToAdd.map((facility:any) => facility.facilityId)) as any : []; + const existingFacilityMembers = this.selectedFacilities.filter((facility:any) => !facilityIdsToAdd.has(facility.facilityId)) + const diffMemberFacilitySequencing = existingFacilityMembers.filter((facility: any) => this.memberFacilities.some((memberFacility: any) => memberFacility.facilityId === facility.facilityId && memberFacility.sequenceNum !== facility.sequenceNum)) + + const memberFacilityDetail = this.memberFacilities.reduce((memberInfo:any, facility:any) => { + memberInfo[facility.facilityId] = facility; + return memberInfo; + }, {}) - const sequenceUpdateResponses = await FacilityService.updateFacilitiesToGroup({ - "payload": { - "facilityList": diffMemberFacilitySequencing.map((memberFacility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": memberFacility.facilityId, - "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, - "sequenceNum": memberFacility.sequenceNum - })) - } - }) + if(diffMemberFacilitySequencing.length > 0){ + try{ + const sequenceUpdateResponse = await FacilityService.updateFacilitiesToGroup({ + "payload": { + "facilityList": diffMemberFacilitySequencing.map((memberFacility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": memberFacility.facilityId, + "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, + "sequenceNum": memberFacility.sequenceNum + })) + } + }) - if(hasError(removeResponses)){ - throw removeResponses - }else if(hasError(addResponses)){ - throw addResponses - }else if(hasError(sequenceUpdateResponses)){ - throw sequenceUpdateResponses + if(hasError(sequenceUpdateResponse)){ + throw sequenceUpdateResponse + } + showToast(translate("Member facilities updated successfully.")) + }catch(error){ + showToast(translate("Failed to update some member facilities.")) } - }catch(error){ - showToast(translate("Failed to update some member facilities.")) - logger.error(error) } - + this.isFacilityMembersModified = false; this.router.push({ path: `/tabs/find-groups` }) }, From a68f687f0cda9b9708e48388830eb2ddab358749 Mon Sep 17 00:00:00 2001 From: priyanshee1604 Date: Thu, 13 Feb 2025 16:18:19 +0530 Subject: [PATCH 3/3] Improved: The code by parallel API calls and showed toast only once for all responses.(#339) --- src/views/ManageFacilities.vue | 99 +++++++++++++--------------------- 1 file changed, 36 insertions(+), 63 deletions(-) diff --git a/src/views/ManageFacilities.vue b/src/views/ManageFacilities.vue index a5a5c8f..6ef4b24 100644 --- a/src/views/ManageFacilities.vue +++ b/src/views/ManageFacilities.vue @@ -315,50 +315,20 @@ const facilitiesToAdd = this.selectedFacilities.filter((facility: any) => !memberFacilityIds.includes(facility.facilityId)) const selectedFacilityIds = this.selectedFacilities ? new Set(this.selectedFacilities.map((facility:any) => facility.facilityId)) as any : []; const facilitiesToRemove = this.memberFacilities.filter((facility: any) => !selectedFacilityIds.has(facility.facilityId)) - - if(facilitiesToRemove.length > 0){ - try{ - const removeResponse = await FacilityService.updateFacilitiesToGroup({ - "payload": { - "facilityList": facilitiesToRemove.map((facility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": facility.facilityId, - "fromDate": facility.fromDate, - "thruDate": DateTime.now().toMillis() - })) - } - }) - - if(hasError(removeResponse)){ - throw removeResponse - } - showToast(translate("Member facilities updated successfully.")) - }catch(error){ - showToast(translate("Failed to update some member facilities.")) - } - } - if(facilitiesToAdd.length > 0){ - try{ - const addResponse = await FacilityService.addFacilitiesToGroup({ - "payload": { - "facilityList": facilitiesToAdd.map((facility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": facility.facilityId, - "sequenceNum": facility.sequenceNum - })) - } - }) - - if(hasError(addResponse)){ - throw addResponse - } - showToast(translate("Member facilities updated successfully.")) - }catch(error){ - showToast(translate("Failed to update some member facilities.")) - } - } - + const facilitiesToRemoveList = facilitiesToRemove.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "fromDate": facility.fromDate, + "thruDate": DateTime.now().toMillis() + })) + + const facilitiesToAddList = facilitiesToAdd.map((facility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": facility.facilityId, + "sequenceNum": facility.sequenceNum + })) + const facilityIdsToAdd = facilitiesToAdd ? new Set(facilitiesToAdd.map((facility:any) => facility.facilityId)) as any : []; const existingFacilityMembers = this.selectedFacilities.filter((facility:any) => !facilityIdsToAdd.has(facility.facilityId)) const diffMemberFacilitySequencing = existingFacilityMembers.filter((facility: any) => this.memberFacilities.some((memberFacility: any) => memberFacility.facilityId === facility.facilityId && memberFacility.sequenceNum !== facility.sequenceNum)) @@ -368,28 +338,31 @@ return memberInfo; }, {}) - if(diffMemberFacilitySequencing.length > 0){ - try{ - const sequenceUpdateResponse = await FacilityService.updateFacilitiesToGroup({ - "payload": { - "facilityList": diffMemberFacilitySequencing.map((memberFacility: any) => ({ - "facilityGroupId": this.facilityGroupId, - "facilityId": memberFacility.facilityId, - "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, - "sequenceNum": memberFacility.sequenceNum - })) - } - }) + const diffMemberFacilitySequencingList = diffMemberFacilitySequencing.map((memberFacility: any) => ({ + "facilityGroupId": this.facilityGroupId, + "facilityId": memberFacility.facilityId, + "fromDate": memberFacilityDetail[memberFacility.facilityId].fromDate, + "sequenceNum": memberFacility.sequenceNum + })) - if(hasError(sequenceUpdateResponse)){ - throw sequenceUpdateResponse - } - showToast(translate("Member facilities updated successfully.")) - }catch(error){ - showToast(translate("Failed to update some member facilities.")) - } + const facilitiesToUpdateList = [...facilitiesToRemoveList, ...diffMemberFacilitySequencingList] + const requestPayload = [] + + if(facilitiesToUpdateList.length > 0){ + requestPayload.push(FacilityService.updateFacilitiesToGroup({ "payload": { "facilityList": facilitiesToUpdateList}})) } - + + if (facilitiesToAddList.length > 0) { + requestPayload.push(FacilityService.addFacilitiesToGroup({ "payload": { "facilityList": facilitiesToAddList } })); + } + + const responses = await Promise.allSettled(requestPayload) + if(responses.some((response: any) => response.status === 'rejected')){ + showToast(translate("Failed to update some member facilities.")) + } else { + showToast(translate("Member facilities updated successfully.")) + } + this.isFacilityMembersModified = false; this.router.push({ path: `/tabs/find-groups` }) },