@startuml
!include style.puml

participant ":AddCommand" as AddCommand SCRAPER_COLOR
participant ":ModelManager" as ModelManager SCRAPER_COLOR
participant ":AddressBook" as AddressBook SCRAPER_COLOR
participant ":CommandException" as CommandException SCRAPER_COLOR
participant ":CommandResult" as CommandResult SCRAPER_COLOR

[-> AddCommand : execute(model)

AddCommand -> ModelManager : hasTodo(Todo)
ModelManager --> AddCommand : boolean

alt !boolean, duplicate object

    create CommandException
    AddCommand -> CommandException : new CommandException(MESSAGE_DUPLICATE_TASK)
    activate CommandException
    CommandException --> AddCommand : commandException
    deactivate CommandException

else boolean, unique object

    AddCommand -> ModelManager : addTodo(Todo)
    ModelManager -> AddressBook : addTodo(Todo)

    create CommandResult
    AddCommand -> CommandResult : new CommandResult(MESSAGE_SUCCESS)
    activate CommandResult
    CommandResult --> AddCommand : commandResult
    deactivate CommandResult

end

[<-- AddCommand : result / exception

@enduml
