@startuml skinparam linetype ortho skinparam groupInheritance 2 package Spring { interface Model class Sort } package Salespoint { 'https://st.inf.tu-dresden.de/SalesPoint/api//org/salespointframework/catalog/Catalog.html' interface Catalog << T > Product >> { findByAnyCategory(categories : String) : Streamable findByAllCategories(categories : String) : Streamable } interface DataInitializer interface Inventory << T > InventoryItem >> class Product { + Product(name : String, price : javax.money.MonetaryAmount, [Metric : metric]) + getID() : Product.Identifier '+ addCategory(category : String) : boolean' #TODO: for class Inventory '+ removeCategory(category : String) : boolean' #TODO: for class Inventory '+ supports(quantity : Quantity) : boolean' #TODO: for class Cart + getCategories() : Streamable + getName() : String + getPrice() : @NonNull javax.money.MonetaryAmount } class Quantity { + getAmount() : @NotNull BigDecimal } } package catering.catalog { interface CateringCatalog { + DEFAULT_SORT : Sort } CateringCatalog --o CatalogController : "-catalog" CateringCatalog ..> Catalog : " Product" class CatalogController { + CatalogController() + CatalogByEventategory(model : Model, form : Form) : String } CatalogController --> Inventory : "- inventory" CatalogController ..> Model : "use" CatalogController .> CatalogForm : "use" class CatalogForm { - query + getQuery() : String } class Consumable { - wholesalePrice : javax.money.MonetaryAmount - retailPrice : javax.money.MonetaryAmount - promotionPrice : javax.money.MonetaryAmount + getWholesalePrice() : javax.money.MonetaryAmount + getPrice() : javax.money.MonetaryAmount } Consumable --|> Product class Rentable { - pricePerHour : javax.money.MonetaryAmount - Events : Streamable + getPrice() : javax.money.MonetaryAmount } Rentable --|> Product } '#TODO: to determine which Products of a Category to offer I need to retrieve information about availability of e.g. Cooks and ServicePersonel from the Users or Rentables from the Inventory' @enduml