# Bulk Order Improvement ## Existing Flow ```plantuml participant "frontend" as fe participant "evm-asgard" as asgard participant "AWS S3" as s3 participant "everpro-logistic-client" as elc fe -> asgard : upload file from user activate asgard asgard -> s3 : put the file to S3 bucket s3 ---> asgard : success asgard -> fe : upload success deactivate asgard fe -> fe : parse excel file fe -> elc : send the data to validate activate elc note right see /v1/public/shipment/validate/excel flow endnote elc -> fe : return validated order deactivate elc ``` ## New Flow 1 ```plantuml participant "frontend" as fe participant "everpro-logistic-client" as elc database "popaket_logistic" as db participant "everpro-user" as eu participant "evm-gss" as gss participant "everpro-rts-scoring" as rtsScoring participant "AWS S3" as s3 fe -> elc : upload the excel file activate elc elc -> elc : parse the file elc -> s3 : upload to S3 bucket note left: in paralel group existing process validate excel at handler layer elc -> db : (settingUsecase) get logistic insurance setting from table insurance_settings db ---> elc elc -> db : (settingUsecase) get shipment setting from table shipment_settings db --> elc elc --> db : (settingUsecase) get package insurance markup from table package_insurance_markup_settings db --> elc end group group existing method ValidateExcelCreateOrder elc -> eu : call grpc method GetUserByUserId to get user data eu --> elc elc -> elc : KYC validation elc -> db : bulk checking unique reference number is exist db --> elc group loop elc -> gss : find origin location data for courier coverage gss --> elc elc -> gss : find destination location data for courier coverage gss --> elc elc -> elc : validate required field (nama pengirim wajib diisi, etc) elc -> rtsScoring : check RTS score for this route rtsScoring --> elc alt if data is valid elc -> elc : call method GetRateV6() end end group end group elc -> fe : return back the data deactivate elc ``` ## New Flow 2 ```plantuml participant "frontend" as fe participant "everpro-utility" as utility database "redis" as redis participant "everpro-logistic-client" as elc database "popaket_logistic" as db participant "everpro-user" as eu participant "evm-gss" as gss participant "everpro-rts-scoring" as rtsScoring participant "AWS S3" as s3 fe -> utility : upload excel file activate utility utility -> utility : parse the uploaded file utility -> s3 : put the file to S3 utility -> utility : generate the upload ID utility -> redis : set the parsed data from file to redis (upload ID as key) utility -> fe : return the upload ID deactivate utility fe -> elc : hit /v2/public/shipment/validate/excel with upload id activate elc group existing process from validate excel at handler layer elc -> db : (settingUsecase) get logistic insurance setting from table insurance_settings db ---> elc elc -> db : (settingUsecase) get shipment setting from table shipment_settings db --> elc elc --> db : (settingUsecase) get package insurance markup from table package_insurance_markup_settings db --> elc end group elc -> elc : call ValidateExcelCreateOrder() with upload ID elc -> redis : retrive the data from redis redis --> elc group existing method ValidateExcelCreateOrder elc -> eu : call grpc method GetUserByUserId to get user data eu --> elc elc -> elc : KYC validation elc -> db : bulk checking unique reference number is exist db --> elc group loop elc -> gss : find origin location data for courier coverage gss --> elc elc -> gss : find destination location data for courier coverage gss --> elc elc -> elc : validate required field (nama pengirim wajib diisi, etc) elc -> rtsScoring : check RTS score for this route rtsScoring --> elc alt if data is valid elc -> elc : call method GetRateV6() end end group end group elc -> fe : return back the data deactivate elc ``` ## Flow in /v1/public/shipment/validate/excel ```plantuml participant "frontend" as fe participant "everpro-logistic-client" as elc database "popaket_logistic" as db participant "everpro-user" as eu participant "evm-gss" as gss participant "everpro-rts-scoring" as rtsScoring fe -> elc : hit validate excel activate elc elc -> db : (settingUsecase) get logistic insurance setting from table insurance_settings db ---> elc elc -> db : (settingUsecase) get shipment setting from table shipment_settings db --> elc elc --> db : (settingUsecase) get package insurance markup from table package_insurance_markup_settings db --> elc group logisticUsecase ValidateExcelCreateOrder elc -> eu : call grpc method GetUserByUserId to get user data eu --> elc elc -> elc : KYC validation elc -> db : bulk checking unique reference number is exist db --> elc group loop elc -> gss : find origin location data for courier coverage gss --> elc elc -> gss : find destination location data for courier coverage gss --> elc elc -> elc : validate required field (nama pengirim wajib diisi, etc) elc -> rtsScoring : check RTS score for this route rtsScoring --> elc alt if data is valid elc -> elc : call method GetRateV6() end end group end group elc -> fe : return back the data + rate deactivate elc ```