@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 EventType { EVENT_CATERING RENT_A_COOK BREAKFAST_SERVICE PARTY_SERVICE } 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 + invoice(model : Model, userAccount : UserAccount, order : Order) : String } class ProductForm OrderController ---> OrderManager : "-orderManager" OrderController ---> Cart : "-cart" OrderController ..> Model OrderController ...> UserAccount OrderController ...> OrderStatus OrderController ...> Cash OrderController ...> Quantity OrderController ...> CustomOrder CustomOrder o--- "1" EventType : -eventType OrderController ...> ProductForm N1 ..> EventType } OrderController ...> Salespoint.Product CustomOrder --|> Salespoint.Order CustomOrder ...> time.LocalDateTime CustomOrder ...> time.DateTimeFormatter OrderController .....> catering.orderCatalog.OrderCatalogEntry package time { class LocalDateTime class DateTimeFormatter } @enduml