@startuml
'https://plantuml.com/class-diagram
skinparam classAttributeIconSize 0
skinparam CircledCharacterFontSize 0
skinparam CircledCharacterRadius 0

class AddCommand
class BuyCommand
class Parser
class Transaction
class TransactionList
class TransactionStorage
class Ui

AddCommand <|- BuyCommand
Transaction <.. BuyCommand
Ui <.. BuyCommand
TransactionList <.. BuyCommand
BuyCommand <.. Parser
TransactionStorage <.. BuyCommand
TransactionList <.. TransactionStorage

class AddCommand {
    #name:String
    #quantity:int
    #newItem:Item
    +AddCommand()
    #executeWithoutUi():void
    +execute():void
    +isQuit():boolean
}

class BuyCommand {
    -price:double
    -currentDate:LocalDate
    +BuyCommand()
    +execute():void
}

class Transaction {
    +Transaction()
}

class TransactionList {
    {static}+add(transaction:Transaction):void
}

class Ui {
    {static}+buyCommandSuccess():void
}

class Parser {
    {static}-parseBuyCommand(input:String):BuyCommand
}

class TransactionStorage {
    {static}+saveTransaction(transaction:Transaction):void
}

note "Some parameters and methods \nomitted for brevity" as n1

@enduml

@startuml
hide footbox
participant "SuperTracker" as SuperTracker <<class>> #f5e3a9
participant ":BuyCommand" as BuyCommand #cbf7f4
participant "TransactionStorage" as TransactionStorage <<class>> #bcf7cf
participant "TransactionList" as TransactionList <<class>> #d5eac2
participant "Ui" as Ui <<class>> #e5c2ea
participant ":Transaction" as Transaction #fbffb2

SuperTracker -> BuyCommand : execute()
activate BuyCommand #cbf7f4

ref over BuyCommand : execute add command without Ui

BuyCommand -> Transaction ** : new Transaction(parameters omitted for brevity)
activate Transaction #fbffb2
Transaction --> BuyCommand : transaction:Transaction
deactivate Transaction

BuyCommand -> TransactionList : add(transaction:Transaction)
activate TransactionList #d5eac2
TransactionList --> BuyCommand
deactivate TransactionList

BuyCommand -> Ui : buyCommandSuccess(newItem:Item, transaction:Transaction)
activate Ui #e5c2ea
Ui --> BuyCommand
deactivate Ui

BuyCommand -> TransactionStorage : saveTransaction(transaction:Transaction)
activate TransactionStorage #bcf7cf
TransactionStorage --> BuyCommand
deactivate TransactionStorage

BuyCommand --> SuperTracker
deactivate BuyCommand
@enduml