# evm-3pl-aggregator Integration ## Existing Everpro ### Postpaid #### Generate AWB ```plantuml participant "everpro-order" as eo participant "NSQ" as nsq participant "everpro-3pl-aggregator" as 3plAgg participant "3pl" as 3pl database "popaket_order" as db2 activate eo eo -> eo note left ... existing generate awb logic ... end note eo -> eo : prepare generate awb data eo -> nsq : publish generate awb note left topic `create-logistic-order-*3pl_name` end note deactivate eo nsq -> 3plAgg: consume genarate awb activate 3plAgg 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg -> nsq : publish update awb number note left topic `create-order-data` end note deactivate 3plAgg nsq -> eo : consume update awb number activate eo eo -> db2 : update status and awb ``` #### Tracking via API ```plantuml actor "User External" as ua participant "everpro-client-gateway" as ecg participant "everpro-order" as eo participant "everpro-3pl-aggregator" as 3plAgg participant 3pl ua -> ecg: request tracking activate ecg ecg -> eo: send grpc GetTracking() activate eo eo -> eo note left ... existing flow - get order to db - get origin location to everpro-logistic-openapi service ... end note eo -> eo : prepare tracking data eo -> 3plAgg : send grpc Tracking() activate 3plAgg 3plAgg -> 3pl : send request tracking to 3pl 3pl --> 3plAgg : return response 3plAgg -> 3plAgg : mapping order status 3plAgg --> eo : return tracking data deactivate 3plAgg eo -> eo note left ... existing flow - update last tracking status - send last mile callback *if any* - update order status *if logistic include in whitelist* ... end note eo --> ecg : return tracking response deactivate eo ecg --> ua: return tracking response deactivate ecg ``` #### Tracking via CMS ```plantuml actor "User External" as ua participant cms participant "everpro-client-dashboard" as ecd participant "everpro-order" as eo participant "everpro-3pl-aggregator" as 3plAgg participant 3pl ua -> cms : click `Lacak` activate cms cms -> ecd : send request tracking activate ecd ecd -> eo : send grpc GetOrderDetail() activate eo eo -> eo note right ... existing flow - get order to db - get origin location to everpro-logistic-openapi service ... end note eo -> eo : prepare tracking data eo -> 3plAgg : send grpc Tracking() activate 3plAgg 3plAgg -> 3pl : send request tracking to 3pl 3pl --> 3plAgg : return response 3plAgg -> 3plAgg : mapping order status 3plAgg --> eo : return tracking data deactivate 3plAgg eo -> eo note right ... existing flow - update last tracking status - send last mile callback *if any* - update order status *if logistic include in whitelist* ... end note eo --> ecd : return tracking response deactivate eo ecd --> cms: return tracking response deactivate ecd cms -> ua : show tracking order deactivate cms ``` ### Prepaid #### Generate AWB Prepaid ```plantuml participant "everpro-logistic-client" as elc participant "everpro-logistic" as el participant "everpro-3pl-aggregator" as 3plAgg participant "3pl" as 3pl database "popaket_logistic" as db1 activate elc elc -> elc note left ... existing generate awb logic ... end note elc -> elc: prepare generate awb data alt new generate awb elc -> 3plAgg: send grpc generate awb activate 3plAgg 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg --> elc: return awb data response deactivate 3plAgg else elc -> el : send http generate awb activate el el -> 3pl: generate awb to 3pl 3pl --> el: return awb data el --> elc: return awb data response deactivate el end elc -> db1: update status and awb elc -> elc note left ... existing generate awb logic ... end note ``` ## Purpose Solution ### Generate Token ```plantuml participant "everpro-logistic-client/order" as evp participant "evm-3pl-client-gateway" as evm database "cache" as db evp -> db : get token to redis db --> evp : return alt redis not found evp -> evm : send request generate token evm --> evp : return response evp -> db : store token to redis end evp -> evp: return token ``` ### Postpaid #### Generate AWB ```plantuml participant "everpro-order" as eo participant "NSQ" as nsq participant "evm-3pl-client-gateway" as evm participant "everpro-3pl-aggregator" as 3plAgg participant "3pl" as 3pl database "popaket_order" as db2 activate eo eo -> eo note left ... existing generate awb logic ... end note eo -> eo : prepare generate awb data alt new generate awb eo -> nsq : publish new generate awb note left topic `new-create-logistic-order-*3pl_name` end note nsq -> eo : cosume new generate awb eo -> eo : generate token eo -> evm: send http generate awb activate evm evm-> 3pl : generate awb to 3pl 3pl--> evm: return awb data evm --> eo: return awb data deactivate evm else eo -> nsq : publish generate awb note left topic `create-logistic-order-*3pl_name` end note deactivate eo nsq -> 3plAgg: consume genarate awb activate 3plAgg 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg -> nsq : publish update awb number note left topic `create-order-data` end note deactivate 3plAgg nsq -> eo : consume update awb number end eo -> db2 : update status and awb ``` #### Tracking via API ```plantuml actor "User External" as ua participant "everpro-client-gateway" as ecg participant "everpro-order" as eo participant "evm-3pl-client-gateway" as evm participant "everpro-3pl-aggregator" as 3plAgg participant 3pl ua -> ecg: request tracking activate ecg ecg -> eo: send grpc GetTracking() activate eo eo -> eo note left ... existing flow - get order to db - get origin location to everpro-logistic-openapi service ... end note eo -> eo : prepare tracking data alt logistic include in whitelist tracking to evm-3pl-aggregator eo -> evm: send http tracking activate evm evm -> 3pl : send request tracking to 3pl 3pl --> evm : return response evm --> eo: return tracking reponse deactivate evm eo -> eo : mapping order status else eo -> 3plAgg : send grpc Tracking() activate 3plAgg 3plAgg -> 3pl : send request tracking to 3pl 3pl --> 3plAgg : return response 3plAgg -> 3plAgg : mapping order status 3plAgg --> eo : return tracking data deactivate 3plAgg end eo -> eo note left ... existing flow - update last tracking status - send last mile callback *if any* - update order status *if logistic include in whitelist* ... end note eo --> ecg : return tracking response deactivate eo ecg --> ua: return tracking response deactivate ecg ``` #### Tracking via CMS ```plantuml actor "User External" as ua participant cms participant "everpro-client-dashboard" as ecd participant "everpro-order" as eo participant "everpro-3pl-aggregator" as 3plAgg participant 3pl ua -> cms : click `Lacak` activate cms cms -> ecd : send request tracking activate ecd ecd -> eo : send grpc GetOrderDetail() activate eo eo -> eo note right ... existing flow - get order to db - get origin location to everpro-logistic-openapi service ... end note eo -> eo : prepare tracking data alt logistic include in whitelist tracking to evm-3pl-aggregator eo -> evm: send http tracking activate evm evm -> 3pl : send request tracking to 3pl 3pl --> evm : return response evm --> eo: return tracking reponse deactivate evm eo -> eo : mapping order status else eo -> 3plAgg : send grpc Tracking() activate 3plAgg 3plAgg -> 3pl : send request tracking to 3pl 3pl --> 3plAgg : return response 3plAgg -> 3plAgg : mapping order status 3plAgg --> eo : return tracking data deactivate 3plAgg end eo -> eo note right ... existing flow - update last tracking status - send last mile callback *if any* - update order status *if logistic include in whitelist* ... end note eo --> ecd : return tracking response deactivate eo ecd --> cms: return tracking response deactivate ecd cms -> ua : show tracking order deactivate cms ``` ### Prepaid #### Generate AWB ```plantuml participant "everpro-logistic-client" as elc participant "everpro-logistic" as el participant "everpro-3pl-aggregator" as 3plAgg participant "evm-3pl-client-gateway" as evm participant "3pl" as 3pl database "popaket_logistic" as db1 activate elc elc -> elc note left ... existing generate awb logic ... end note elc -> elc: prepare generate awb data alt new generate awb to new logistic aggregator elc -> elc : generate token elc -> evm : send http generate awb activate evm evm -> 3pl : generate awb to 3pl 3pl --> evm : return awb data evm --> elc : return awb data response deactivate evm else new generate awb to existing 3pl-aggregator elc -> 3plAgg: send grpc generate awb activate 3plAgg 3plAgg -> 3pl: generate awb to 3pl 3pl --> 3plAgg: return awb data 3plAgg --> elc: return awb data response deactivate 3plAgg else elc -> el : send http generate awb activate el el -> 3pl: generate awb to 3pl 3pl --> el: return awb data el --> elc: return awb data response deactivate el end elc -> db1: update status and awb elc -> elc note left ... existing generate awb logic ... end note ```