@startuml

autonumber
actor CampusManager as u
participant FloorRoute as rt 
participant FloorController as ctrl
participant FloorService as svc
participant FloorRepo as repf
participant FloorMap as map
participant FloorDTO as dto 
participant Floor as f

activate u
u -> rt : PUT: floors/update (jsonBody)
activate rt
rt -> ctrl : updateFloor(jsonBody, ..., ...)
activate ctrl
create dto
ctrl --> dto : create(jsonBody)
ctrl -> svc : updateFloor(floorDTO)
activate svc 
note left of svc : floor's building cannot be updated (the floor's map should be updated in US230)
svc -> repf : findByDomainId(floorDTO.floorId)
activate repf
repf --> svc : floor
deactivate repf
alt if floor not found
svc --> ctrl : floor with that id not found
end
note left of svc : num and description were created as value objects \nusing floorDTO attributes, this is not described to simplify the diagram
svc -> f : floor.setNum(num)
activate f
svc -> f : floor.setDescription(description)
deactivate f
svc -> repf : save(floor)
activate repf
deactivate repf
svc -> map : toDTO(floor)
activate map
create dto
map --> dto : create(floor)
map --> svc : floorDTO
deactivate map
svc --> ctrl : floorDTO
deactivate svc 
alt if updateFloor() returned error
ctrl --> rt : sends error response with HTTP code 402 
end
ctrl --> rt : sends response containing floorDTO with HTTP code 201
deactivate ctrl
rt --> u : sends response
deactivate rt
deactivate u

@enduml