classDiagram
Item *-- Order
Product *-- Item
Product <.. Order
EventChannel *.. Order
OrderRecord <.. Order
Item *-- OrderRecord
Order <.. OrderFactory
Order <.. OrderRepository
class Product{
+int id
+int quantity
}
class Item{
+Product product
}
class Order{
-string id
-DateTime date
-Item[] items
-int customerUserId
-bool accepted
-bool finished
-EventChannel eventChannel
+add(Product product)
+accept()
+remind()
+done()
+Order create(string id, int customerUserId, array products, EventChannel eventChannel)
+OrderRecord toPersistenceRecord()
+Order restore(OrderRecord record, EventChannel eventChannel)
}
class EventChannel{
<<interface>>
+publish()
}
class OrderRecord{
+string id
+DateTime date
+Item[] items
+int customerUserId
+bool accepted
+bool finished
}
class OrderFactory {
<<interface>>
+Order create(int customerUserId, array products)
}
class OrderRepository{
<<interface>>
+save(Order order)
+Order findById(string id)
}
OrderFactory *-- Interactor
OrderRepository *-- Interactor
OrderRecord <.. OrderRepository
Input <.. Interactor
Product *-- Input
class Interactor{
+execute(Input input)
}
class Input{
+Product[] products
+int customerUserId
}