@startuml skinparam linetype ortho skinparam groupInheritance 2 package Spring { interface Model } package Salespoint { interface OrderManager class Cart class Cash class Order class Quantity class UserAccount class Product enum OrderStatus note "Uses Rentable and Consumable from package Catalog" as N2 Product .. N2 } package catering.order { class CustomOrder { - start : LocalDateTime - finish : LocalDateTime } enum OrderType { EVENT_CATERIN RENT_A_COOK BREAKFAST_SERVICE SOMETHING_ELSE } note "This could be extended, too" as N1 class OrderController { + OrderController() + initializeCart() : Cart + planEvent(model : Model) : String + addProduct(productForm : ProductForm, model : Model) : String + removeProduct(product : Product, model : Model) : String + checkout(userAccount : UserAccount, model : Model) : String + getOrders(model : Model) : String + removeOrder(order : Order) : boolean } class ProductForm OrderController ---> OrderManager : "-orderManager" OrderController ---> Cart : "-cart" OrderController ..> Model OrderController ...> UserAccount OrderController ...> OrderStatus OrderController ...> Cash OrderController ...> Quantity OrderController ...> CustomOrder CustomOrder o--- "1" OrderType : -orderType OrderController ...> ProductForm N1 ..> OrderType } OrderController ...> Salespoint.Product CustomOrder ---|> Salespoint.Order CustomOrder ...> time.LocalDateTime CustomOrder ...> time.DateTimeFormatter package time { class LocalDateTime class DateTimeFormatter } @enduml