@startuml Manage Restaurant (PUT)

header Restaurant Reservation Sequence Diagram
footer Page %page% of %lastpage%
title "Manage Restaurant (PUT)"

participant "Client" as client
participant "<<javaScript>>\n:server" as server
participant "<<router>>\n:restaurants" as routerRestaurants
participant "<<middleware>>\n:auth" as middlewareAuth
participant "<<controllers>>\n:restaurants" as controllersRestaurants
participant "<<model>>\n:Restaurant" as modelRestaurant
participant "<<model>>\n:User" as modelUser
database "<<MongoDB>>\n:restaurants" as RestaurantsDatabase
database "<<MongoDB>>\n:users" as UsersDatabase

' PUT
client->server ++:req.put('/restaurants/:id')
server->routerRestaurants ++:app.use('/restaurants',restaurants)
routerRestaurants -> middlewareAuth ++:protect()
middlewareAuth -> modelUser ++:findById(decodedToken.id)
modelUser -> UsersDatabase ++:UserSchema
UsersDatabase --> modelUser --:user
modelUser --> middlewareAuth --:user
middlewareAuth -> routerRestaurants --:next()
routerRestaurants -> middlewareAuth ++:authorize("admin")
middlewareAuth -> routerRestaurants --:next()
routerRestaurants -> controllersRestaurants ++:updateRestaurant()
controllersRestaurants -> modelRestaurant ++:findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true })
modelRestaurant -> RestaurantsDatabase ++:restaurantSchema 
RestaurantsDatabase --> modelRestaurant --:restaurant
controllersRestaurants <-- modelRestaurant --:restaurant
controllersRestaurants -> client --:response

@enduml