@startuml

autonumber

actor User as USR
participant ReviewController as CTRL
participant ReviewService as SRV
participant ReviewRepository as REPO
database BaseDados as DB

USR -> CTRL: POST /products/{sku}/reviews
activate CTRL
CTRL -> SRV: addVoteToReview(reviewID, voteReviewDTO)
activate SRV
SRV-> REPO: review = findById(reviewID)
activate REPO
deactivate REPO
alt voteReviewDTO.getVote().equalsIgnoreCase("upVote")
    SRV -> "review:Review": addUpVote
    activate "review:Review"
    deactivate "review:Review"
    SRV -> REPO: save(review)
    activate REPO
    deactivate REPO
    SRV -> DB: save(review)
    activate DB
    deactivate DB
    SRV --> CTRL:
else voteReviewDTO.getVote().equalsIgnoreCase("downVote")
    SRV -> "review:Review": addDownVote
    activate "review:Review"
    deactivate "review:Review"
    SRV -> REPO: save(review)
    activate REPO
    deactivate REPO
    SRV -> DB: save(review)
    activate DB
    deactivate DB
    SRV --> CTRL:
end
deactivate SRV
CTRL --> USR : Informa do sucesso da operação
deactivate CTRL
 @enduml