@startuml
'https://plantuml.com/class-diagram

skinparam classAttributeIconSize 0
hide empty attributes
skinparam classBackgroundColor beige
skinparam ArrowColor #222222

package "<<aggregate>> Order"{
    entity Order
    entity OrderItem
    class TotalPrice
    class Status
    class TotalVolume
    class TotalWeight
}

entity Order <<entity>> <<root>> {
- numericIdentifier
- dateOfOrder
- shipmentMethod
- paymentMethod

}

entity OrderItem <<entity>> {

}

class TotalPrice <<(V,#FF8B40) value object>> {}
class Status <<(V,#FF8B40) value object>> {}
class TotalVolume <<(V,#FF8B40) value object>> {}
class TotalWeight <<(V,#FF8B40) value object>> {}

package "<<aggregate>> Client" {
    entity Client
    class PostalAddresses
}

entity Client <<entity>> <<root>> {

}
class PostalAddresses <<(V,#FF8B40) value object>> {}

entity Client <<entity>> <<root>> {

}
package "<<aggregate>> ShopCar"{
    entity ShopCar
    entity Item
}

entity ShopCar <<entity>> <<root>>{

}
entity Item <<entity>> {
    -productQuantity

}
package "<<aggregate>> Product"{
     entity Product
     class Price

}

entity Product <<entity>> <<root>> {

}

class Price <<(V,#FF8B40) value object>> {
    - withoutVAT
    - withVAT
    }

package "<<aggregate>> Employee" {
    entity Employee
}

entity Employee <<entity>> <<root>> {
    -identifier
}

Client -----> "1" ShopCar : associated
Order ----> "1" Client : associated
Client -> "1..*" PostalAddresses: associated with an
ShopCar ...> "1" Order : is transformed
Product -> "1" Price : characterized by
Item --> "1" Product : composed by
Order -> "1" TotalPrice : is marked
ShopCar -> "1..*" Item : composed by
Order ---> "0..1" Employee : associated with
Order --> "1" Status : is in
Order --> "1" TotalVolume : associated with
Order --> "1" TotalWeight : associated with
Order -> "1..*" OrderItem : composed by


@enduml
