# Buka Tutup Toko ```plantuml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml ``` ## Architecture Diagram - Existing ```plantuml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml title Brand Activation - Mimin Person(mimin, "Mimin") System_Boundary(admin_web_system, "Evermos Administration Web Application") { Container(browser, "Browser", "Software System", "All supported browser") Container(admin_web_app, "Admin Dashboard", "Nuxt.js", "Provides management functionalities to admin via their web browser") } System_Boundary(api_endpoint, "API Endpoint") { Container(admin_api, "evermos-admin-be API", "PHP", "Provides admin management functionalities via HTTPS / REST / JSON API") } ContainerDb(db_evm, "Database", "MySQL", "evm schema") Rel_R(mimin, browser, "Register Brand", "Client Device") Rel_R(browser, admin_web_app, "Access", "HTTPS") Rel_R(admin_web_app, admin_api, "Makes API calls to", "HTTPS / REST / JSON") Rel_R(admin_api, db_evm, "Reads from & Writes to", "TCP/IP") ``` ### Brand Activation ```plantuml skinparam responseMessageBelowArrow true title Brand Activation - Existing Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab database "evm" as e c -> eab : "activate/inactivate brand" activate eab eab -> e : check client token activate e return user data eab -> e : "activate/inactivate brand" activate e return success/error return success/error ``` ## Database Design - Existing System ```plantuml hide circle 'skinparam linetype ortho skinparam class { ArrowColor #FF7878 BackgroundColor #FFF89A BorderColor #694E4E } title EVM Database Schema entity "[evm] brand" as b { *id: bigint(20) -- brandParentId: bigint(20) <<FK>> warehouseShelfId: bigint(20) <<FK>> warehouseZoneId: bigint(20) <<FK>> partnershipId: bigint(20) <<FK>> code: varchar(20) slug: text name: varchar(100) type: enum logoUrl: text coverImageUrl: text commissionPercentage: float commissionPrice: float vendorCommissionPercentage: float vendorCommissionPrice: float courierFee: bigint(20) picName: varchar(255) picPhone: varchar(255) picAddress: varchar(255) stockLocation: int(11) ... createdTime: datetime updatedTime: datetime updatedBy: bigint(20) isActive: boolean isRemoved: boolean removedTime: datetime createdBy: bigint(20) removedBy: bigint(20) officeAddress: varchar(200) warehouseAddress: varchar(200) companyName: varchar(100) brandLevelId: int(11) brandType: enum brandResellerType: enum } entity "[evm] stock_location" as sl { *id: int(10) -- label: varchar(255) districtId: int(11) districtName: varchar(255) subdistrictId: int(11) subdistrictName: varchar(255) urbanId: int(11) urbanName: varchar(255) shipperAreaId: int(11) shipperAgentId: int(11) shipperPickupTime: varchar(255) address: varchar(255) brandId: bigint(20) ... createdTime: datetime createdBy: bigint(20) updatedTime: datetime updatedBy: bigint(20) isActive: tinyint(1) isRemoved: tinyint(1) removedTime: datetime removedBy: bigint(20) } sl ||-left|{ b b ||--|{ sl ``` ## Architecture Diagram - Proposed Solution ```plantuml !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml title Brand Activation - Mimin Person(mimin, "Mimin") System_Boundary(admin_web_system, "Evermos Administration Web Application") { Container(browser, "Browser", "Software System", "All supported browser") Container(admin_web_app, "Admin Dashboard", "Nuxt.js", "Provides management functionalities to admin via their web browser") } System_Boundary(api_endpoint, "API Endpoint") { Container(admin_api, "evermos-admin-be API", "PHP", "Provides admin management functionalities via HTTPS / REST / JSON API") Container(inventory_api, "evm-inventory API", "Golang", "Provides inventory management functionalities via HTTPS / REST / JSON API") } ContainerDb(db_evm, "Database", "MySQL", "evm schema") ContainerDb(db_inv, "Database", "MySQL", "inv schema") Rel_R(mimin, browser, "Register Brand", "Client Device") Rel_R(browser, admin_web_app, "Access", "HTTPS") Rel_R(admin_web_app, admin_api, "Makes API calls to", "HTTPS / REST / JSON") Rel(admin_api, inventory_api, "Makes API calls to", "HTTPS / REST / JSON") Rel_R(admin_api, db_evm, "Reads from & Writes to", "TCP/IP") Rel_R(inventory_api, db_inv, "Reads from & Writes to", "TCP/IP") ``` ## Database Design - Proposed Solution ```plantuml hide circle 'skinparam linetype ortho skinparam class { ArrowColor #FF7878 BackgroundColor #FFF89A BorderColor #694E4E } title INV Database Schema entity "[inv] brand_stock_location_mapping" as bslm { *id: char(36) -- brand_id: varchar(36) stock_location_id: varchar(36) is_default: boolean partnership_type: enum(dropship, consignment) selling_status: boolean is_removed: boolean created_at: datetime created_by: bigint(20) updated_at: datetime updated_by: bigint(20) removed_at: datetime removed_by: bigint(20) } ``` ### Get Brand Stock Location List ```plantuml skinparam responseMessageBelowArrow true title Get Brand Stock Location List - Proposed Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab participant "evm-inventory" as ei database "evm" as e database "inv" as inv c -> eab : get brand stock location list activate eab eab -> e : check client token activate e alt if client unauthorized e -> eab : error unauthorized eab -> c : error unauthorized end return user data eab -> ei : get brand stock location list activate ei ei -> inv : get brand stock location list activate inv return brand stock location list return brand stock location list return brand stock location list ``` ### Get Stock Location List ```plantuml skinparam responseMessageBelowArrow true title Get Stock Location List - Proposed Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab database "evm" as e c -> eab : get brand stock location list activate eab eab -> e : get brand stock location list activate e return stock location list ``` ### Create Brand Stock Location Mapping ```plantuml skinparam responseMessageBelowArrow true title Create Brand Stock Location Mapping - Proposed Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab participant "evm-inventory" as ei database "evm" as e database "inv" as inv c -> eab : create brand stock location mapping activate eab eab -> e : check client token activate e alt if client unauthorized e -> eab : error unauthorized eab -> c : error unauthorized end return user data eab -> ei : create brand stock location mapping activate ei ei -> inv : create brand stock location mapping activate inv return brand stock location data return brand stock location data return brand stock location data ``` ### Update Brand Stock Location Selling Status ```plantuml skinparam responseMessageBelowArrow true title Update Brand Stock Location Selling Status - Proposed Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab participant "evm-inventory" as ei database "evm" as e database "inv" as inv c -> eab : update selling status activate eab eab -> e : check client token activate e alt if client unauthorized e -> eab : error unauthorized eab -> c : error unauthorized end return user data eab -> ei : update selling status activate ei ei -> inv : update selling status activate inv return success/error return success/error return success/error ``` ### Set Default Stock Location ```plantuml skinparam responseMessageBelowArrow true title Set Default Stock Location - Proposed Interaction Diagram participant "client" as c participant "evermos-admin-be" as eab participant "evm-inventory" as ei database "evm" as e database "inv" as inv c -> eab : update wh is_default activate eab eab -> e : check client token activate e alt if client unauthorized e -> eab : error unauthorized eab -> c : error unauthorized end return user data eab -> ei : update wh is_default activate ei ei -> inv : update wh is_default activate inv return success/error return success/error return success/error ```