---
# System prepended metadata

title: Transaction Management in Brand Dashboard

---

# Transaction Management in Brand Dashboard


```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 Transaction Management - Brand Dashboard

Person(brand_admin, "Brand Admin")
System_Boundary(brand_web_system, "Brand Administration Web Application") {
    Container(browser, "Browser", "Software System", "All supported browser")
    Container(brand_dashboard, "Brand Dashboard", "Nuxt.js", "Provides management functionalities to brand admin via their web browser")
}
System_Boundary(api_endpoint, "API Endpoint") {
    Container(brand_api, "evermos-brand-be API", "PHP", "Provides brand management functionalities via HTTPS / REST / JSON API")

}
ContainerDb(db_evm, "Database", "MySQL", "evm schema")
ContainerDb(db_itr, "Database", "MySQL", "itr schema")


Rel_R(brand_admin, browser, "Register Brand", "Client Device")
Rel_R(browser, brand_dashboard, "Access", "HTTPS")
Rel_R(brand_dashboard, brand_api, "Makes API calls to", "HTTPS / REST / JSON")
Rel_R(brand_api, db_evm, "Reads from & Writes to", "TCP/IP")
Rel(brand_api, db_itr, "Reads from & Writes to", "TCP/IP")


```


### Get Order List

```plantuml
skinparam responseMessageBelowArrow true

title Get Order List - Existing Interaction Diagram

participant "client" as c
participant "evermos-brand-be" as ebb
database "evm" as e
database "itr" as i

c -> ebb : "get order list"
activate ebb


ebb -> e : "get order list"
activate e
return order data


ebb -> i : "get order list"
activate i
return order data

return order data

```

### Update Order

```plantuml
skinparam responseMessageBelowArrow true

title Update Order - Existing Interaction Diagram

participant "client" as c
participant "evermos-brand-be" as ebb
database "evm" as e
database "itr" as i

c -> ebb : "update order"
activate ebb


alt if platform = "Evermos"
    ebb -> e : update order
    e -> ebb : success/error
end


alt if platform = "Berikhtiar"
    ebb -> i : update order
    i -> ebb : success/error
end

return success/error

```


### Generate Waybill

```plantuml
skinparam responseMessageBelowArrow true

title Generate Waybill - Existing Interaction Diagram

participant "client" as c
participant "evermos-brand-be" as ebb
participant "evermos-admin-be" as eab
database "evm" as e
database "itr" as i

c -> ebb : generate waybill
activate ebb

ebb -> eab : generate waybill
activate eab


alt if platform = "Evermos"
    eab -> e : generate waybill
    e -> eab : success/error
end


alt if platform = "Berikhtiar"
    eab -> i : generate waybill
    i -> eab : success/error
end

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
    ...
}

entity "[evm] order" as o {
    *id: bigint(20)
    --
    orderCode: varchar(60)
    status: int(11)
    userId: bigint(20) <<FK>>
    totalPrice: decimal(12, 2)
    totalPayment: decimal(12, 2)
    totalCustomerPrice: decimal(12, 2)
    totalQuantity: int(11)
    totalWeight: int(11)
    ...
}

entity "[evm] order_detail" as od {
    *id: bigint(20)
    --
    orderId: bigint(20) <<FK>>
    orderReceiptId: bigint(20) <<FK>>
    productId: bigint(20) <<FK>>
    normalPrice: decimal(12, 2)
    discountPrice: decimal(12, 2)
    quantity: int(11)
    totalPrice: decimal(12, 2)
    waybill: varchar(100)
    
    ...
}

entity "[evm] order_receipt" as or {
    *id: bigint(20)
    --
    orderId: bigint(20) <<FK>>
    userAddressId: bigint(20) <<FK>>
    orderAddressId: bigint(20) <<FK>>
    orderReceiptCode: varchar(60)
    waybill: varchar(100)
    ...
}

entity "[evm] product" as p {
    *id: bigint(20)
    --
    productModelId: bigint(20) <<FK>>
    name: text
    code: text
    ...
}

entity "[evm] product_model" as pm {
    *id: bigint(20)
    --
    brandId: bigint(20) <<FK>>
    name: text
    code: text
    ...
}

b ||-right|{ pm
pm ||--|{ p
or ||--|{ od
o ||--|{ od
p ||--|{ od
or ||-left|{ o

```


## Architecture Diagram - Proposed Solution

```plantuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml

title Transaction Management - Brand Dashboard

Person(brand_admin, "Brand Admin")
System_Boundary(brand_web_system, "Brand Administration Web Application") {
    Container(browser, "Browser", "Software System", "All supported browser")
    Container(brand_dashboard, "Brand Dashboard", "Nuxt.js", "Provides brand management functionalities to brand admin via their web browser")
}
System_Boundary(api_endpoint, "API Endpoint") {
    Container(evm_brand, "evm-brand API", "Golang", "Provides brand management functionalities via HTTPS / REST / JSON API")
    Container(evm_order, "evm-order API", "Golang", "Provides order management functionalities via HTTPS / REST / JSON API")
    Container(evermos_brand_be, "evermos-brand-be API", "Golang", "Provides brand management functionalities via HTTPS / REST / JSON API")
    Container(gss, "GSS API", "", "Provides transaction data via HTTPS / REST / JSON API")

}
ContainerDb(db_evm, "Database", "MySQL", "evm schema")
ContainerDb(db_itr, "Database", "MySQL", "itr schema")
ContainerDb(db_os, "Database", "GraphQL", "open search")


Rel_R(brand_admin, browser, "Register Brand", "Client Device")
Rel_R(browser, brand_dashboard, "Access", "HTTPS")
Rel(brand_dashboard, evm_brand, "Makes API calls to", "HTTPS / REST / JSON")
Rel(brand_dashboard, evermos_brand_be, "Makes API calls to", "HTTPS / REST / JSON")
Rel_L(evm_brand, evm_order, "Makes API calls to", "HTTPS / REST / JSON")
Rel(evm_order, gss, "Makes API calls to", "HTTPS / REST / JSON")
Rel(gss, db_os, "Reads from & Writes to", "TCP/IP")
Rel(evermos_brand_be, db_evm, "Reads from & Writes to", "TCP/IP")
Rel(evermos_brand_be, db_itr, "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 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
    ...
}

entity "[evm] order" as o {
    *id: bigint(20)
    --
    orderCode: varchar(60)
    status: int(11)
    userId: bigint(20) <<FK>>
    totalPrice: decimal(12, 2)
    totalPayment: decimal(12, 2)
    totalCustomerPrice: decimal(12, 2)
    totalQuantity: int(11)
    totalWeight: int(11)
    ...
}

entity "[evm] order_detail" as od {
    *id: bigint(20)
    --
    orderId: bigint(20) <<FK>>
    orderReceiptId: bigint(20) <<FK>>
    productId: bigint(20) <<FK>>
    brand: bigint(20) <<FK>>
    normalPrice: decimal(12, 2)
    discountPrice: decimal(12, 2)
    quantity: int(11)
    totalPrice: decimal(12, 2)
    waybill: varchar(100) 
    ...
}

entity "[evm] order_receipt" as or {
    *id: bigint(20)
    --
    orderId: bigint(20) <<FK>>
    userAddressId: bigint(20) <<FK>>
    orderAddressId: bigint(20) <<FK>>
    orderReceiptCode: varchar(60)
    waybill: varchar(100)
    ...
}

entity "[evm] product" as p {
    *id: bigint(20)
    --
    productModelId: bigint(20) <<FK>>
    name: text
    code: text
    ...
}

entity "[evm] product_model" as pm {
    *id: bigint(20)
    --
    brandId: bigint(20) <<FK>>
    name: text
    code: text
    ...
}

b ||-right|{ pm
b ||--|{ od
pm ||--|{ p
or ||--|{ od
o ||--|{ od
p ||--|{ od
or ||-left|{ o

```


### Get Order List

```plantuml
skinparam responseMessageBelowArrow true

title Get Order List - Proposed Solution

participant "client" as c
participant "evm-brand" as eb
participant "evm-order" as eo
participant "evm-gss" as eg
database "evm" as e
database "itr" as i
database "open search" as os

c -> eb : "get order list"
activate eb

eb -> eo : "get order list"
activate eo

eo -> eg : "get order list"
activate eg

eg -> os : "get order list"
activate os

return order data

alt if platform = "Evermos"
    eg -> e : get order detail data
    e -> eg : order data
end


alt if platform = "Berikhtiar"
    eg -> i : get order detail data
    i -> eg : order data
end

return order data
return order data
return order data
```

### Update Order

```plantuml
skinparam responseMessageBelowArrow true

title Update Order - Proposed Solution

participant "client" as c
participant "evm-brand" as eb
participant "evm-order" as eo
database "evm" as e
database "itr" as i

c -> eb : "update order"
activate eb

eb -> eo : "update order"
activate eo


alt if platform = "Evermos"
    eo -> e : update order
    e -> eo : success/error
end


alt if platform = "Berikhtiar"
    eo -> i : update order
    i -> eo : success/error
end

return success/error
return success/error

```
