Agregar y eliminar de un restaurante
This commit is contained in:
@@ -248,8 +248,7 @@ la [documentación de Auth0](https://auth0.com/docs/api/management/v2#!/Users/pa
|
|||||||
|
|
||||||
Para eliminar a un usuario hay que enviar un `DELETE` a la
|
Para eliminar a un usuario hay que enviar un `DELETE` a la
|
||||||
ruta `/api/v1/user/{id}` donde `{id}` es el ID del usuario a buscar, este ID
|
ruta `/api/v1/user/{id}` donde `{id}` es el ID del usuario a buscar, este ID
|
||||||
puede ser el UUID del usuario o el ID entregado por Auth0, esto puede ser util
|
puede ser el UUID del usuario o el ID entregado por Auth0.
|
||||||
si el frontend tiene solamente acceso al ID entregado por Auth0.
|
|
||||||
|
|
||||||
Los usuarios eliminados podrán ser recuperados localmente, pero en auth0 serán
|
Los usuarios eliminados podrán ser recuperados localmente, pero en auth0 serán
|
||||||
eliminados permanentemente y su asociación con restaurantes se perderá.
|
eliminados permanentemente y su asociación con restaurantes se perderá.
|
||||||
@@ -257,3 +256,92 @@ eliminados permanentemente y su asociación con restaurantes se perderá.
|
|||||||
La respuesta de la API al eliminar será un código `204` sin cuerpo, pero ante
|
La respuesta de la API al eliminar será un código `204` sin cuerpo, pero ante
|
||||||
cualquier error, principalmente proviniendo desde Auth0, se utilizará el cuerpo
|
cualquier error, principalmente proviniendo desde Auth0, se utilizará el cuerpo
|
||||||
de error definido al inicio.
|
de error definido al inicio.
|
||||||
|
|
||||||
|
### Agregar a un restaurant
|
||||||
|
|
||||||
|
El usuario puede ser agregado a distintos restaurantes, para esto se envía
|
||||||
|
un `PUT` a la ruta `/api/v1/user/{id}/restaurantes/{restaurante_id}`
|
||||||
|
donde `{id}` es el ID del usuario a buscar, este ID puede ser el UUID del
|
||||||
|
usuario o el ID entregado por Auth0, y `{restaurante_id}` es el ID del
|
||||||
|
restaurante al que se va a agregar al usuario.
|
||||||
|
|
||||||
|
La API responderá con el modelo del usuario actualizado, como en el siguiente
|
||||||
|
ejemplo, donde se agregó al restaurante `4e47a419-9398-47ff-82e9-b78851e71226`
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "340c8e54-9a15-4bd2-9b59-108f267d5872",
|
||||||
|
"auth0_id": "auth0|608ca16fcfc3df0068fea6a4",
|
||||||
|
"nombre": "Jhon 2",
|
||||||
|
"created_at": "2021-04-30T18:31:44.000000Z",
|
||||||
|
"updated_at": "2021-04-30T18:31:52.000000Z",
|
||||||
|
"deleted_at": null,
|
||||||
|
"roles": [
|
||||||
|
"admin",
|
||||||
|
"recaudador"
|
||||||
|
],
|
||||||
|
"restaurantes": [
|
||||||
|
{
|
||||||
|
"id": "63f62e17-e011-4f6f-8c15-5eb65a5014be",
|
||||||
|
"nombre": "Todo Rico Restaurant",
|
||||||
|
"created_at": "2021-04-26T16:37:59.181869Z",
|
||||||
|
"updated_at": "2021-04-26T16:37:59.181869Z",
|
||||||
|
"deleted_at": null,
|
||||||
|
"pivot": {
|
||||||
|
"usuario_id": "340c8e54-9a15-4bd2-9b59-108f267d5872",
|
||||||
|
"restaurante_id": "63f62e17-e011-4f6f-8c15-5eb65a5014be"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4e47a419-9398-47ff-82e9-b78851e71226",
|
||||||
|
"nombre": "Otro Restaurant",
|
||||||
|
"created_at": "2021-05-01T02:40:10.047257Z",
|
||||||
|
"updated_at": "2021-05-01T02:40:10.047257Z",
|
||||||
|
"deleted_at": null,
|
||||||
|
"pivot": {
|
||||||
|
"usuario_id": "340c8e54-9a15-4bd2-9b59-108f267d5872",
|
||||||
|
"restaurante_id": "4e47a419-9398-47ff-82e9-b78851e71226"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Eliminar de un restaurant
|
||||||
|
|
||||||
|
Si es necesario eliminar a un usuario de un restaurant, se debe enviar
|
||||||
|
un `DELETE` a la ruta `/api/v1/user/{id}/restaurantes/{restaurante_id}`
|
||||||
|
donde `{id}` es el ID del usuario a buscar, este ID puede ser el UUID del
|
||||||
|
usuario o el ID entregado por Auth0, y `{restaurante_id}` es el ID del
|
||||||
|
restaurante al que se va a agregar al usuario.
|
||||||
|
|
||||||
|
La API responderá con el modelo del usuario actualizado, como en el siguiente
|
||||||
|
ejemplo, donde se eliminó del restaurante `4e47a419-9398-47ff-82e9-b78851e71226`
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "340c8e54-9a15-4bd2-9b59-108f267d5872",
|
||||||
|
"auth0_id": "auth0|608ca16fcfc3df0068fea6a4",
|
||||||
|
"nombre": "Jhon 2",
|
||||||
|
"created_at": "2021-04-30T18:31:44.000000Z",
|
||||||
|
"updated_at": "2021-04-30T18:31:52.000000Z",
|
||||||
|
"deleted_at": null,
|
||||||
|
"roles": [
|
||||||
|
"admin",
|
||||||
|
"recaudador"
|
||||||
|
],
|
||||||
|
"restaurantes": [
|
||||||
|
{
|
||||||
|
"id": "63f62e17-e011-4f6f-8c15-5eb65a5014be",
|
||||||
|
"nombre": "Todo Rico Restaurant",
|
||||||
|
"created_at": "2021-04-26T16:37:59.181869Z",
|
||||||
|
"updated_at": "2021-04-26T16:37:59.181869Z",
|
||||||
|
"deleted_at": null,
|
||||||
|
"pivot": {
|
||||||
|
"usuario_id": "340c8e54-9a15-4bd2-9b59-108f267d5872",
|
||||||
|
"restaurante_id": "63f62e17-e011-4f6f-8c15-5eb65a5014be"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
@@ -229,4 +229,111 @@ class UsuariosController extends Controller {
|
|||||||
|
|
||||||
return response()->json([], 204);
|
return response()->json([], 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Agrega usuario a un restaurant
|
||||||
|
* @param Request $request
|
||||||
|
* @param $id
|
||||||
|
* @param $restaurant
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function addToRestaurant(Request $request, $id, $restaurant) {
|
||||||
|
/** @var Usuario $logged_user */
|
||||||
|
$logged_user = $request->user;
|
||||||
|
|
||||||
|
$usuario = Usuario::findByIdOrAuth0Id($id);
|
||||||
|
if (!$usuario) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'not_found',
|
||||||
|
'message' => 'El usuario con id ' . $id . ' no existe'
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$restaurant = Restaurante::find($restaurant);
|
||||||
|
if (!$restaurant) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'not_found',
|
||||||
|
'message' => 'El restaurante con id ' . $id . ' no existe'
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$logged_user->canManageUsers()) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'cant_manage_users',
|
||||||
|
'message' => 'El usuario ' . $logged_user->id . ' no tiene permisos para modificar usuarios'
|
||||||
|
], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$logged_user->hasPermissionsOnRestaurant($restaurant)) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'cant_manage_user_of_another_restaurant',
|
||||||
|
'message' => 'El usuario ' . $logged_user->id . ' no puede agregar un usuario al restaurant ' . $restaurant->id . ' porque que no pertenece a el'
|
||||||
|
], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($usuario->restaurantes->contains($restaurant)) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'already_on_restaurant',
|
||||||
|
'message' => 'El usuario ' . $usuario->id . ' ya se encuentra en el restaurante ' . $restaurant->id
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$restaurant->usuarios()->attach($usuario);
|
||||||
|
|
||||||
|
return response()->json($usuario->fresh(['restaurantes']));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saca a un usuario de un restaurant
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @param $id
|
||||||
|
* @param $restaurant
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function removeFromRestaurant(Request $request, $id, $restaurant) {
|
||||||
|
/** @var Usuario $logged_user */
|
||||||
|
$logged_user = $request->user;
|
||||||
|
|
||||||
|
$usuario = Usuario::findByIdOrAuth0Id($id);
|
||||||
|
if (!$usuario) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'not_found',
|
||||||
|
'message' => 'El usuario con id ' . $id . ' no existe'
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$restaurant = Restaurante::find($restaurant);
|
||||||
|
if (!$restaurant) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'not_found',
|
||||||
|
'message' => 'El restaurante con id ' . $id . ' no existe'
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$logged_user->canManageUsers()) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'cant_manage_users',
|
||||||
|
'message' => 'El usuario ' . $logged_user->id . ' no tiene permisos para modificar usuarios'
|
||||||
|
], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$logged_user->hasPermissionsOnRestaurant($restaurant)) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'cant_manage_user_of_another_restaurant',
|
||||||
|
'message' => 'El usuario ' . $logged_user->id . ' no puede agregar un usuario al restaurant ' . $restaurant->id . ' porque que no pertenece a el'
|
||||||
|
], 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$usuario->restaurantes->contains($restaurant)) {
|
||||||
|
return response()->json([
|
||||||
|
'error' => 'already_not_on_restaurant',
|
||||||
|
'message' => 'El usuario ' . $usuario->id . ' no encuentra en el restaurante ' . $restaurant->id
|
||||||
|
], 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
$restaurant->usuarios()->detach($usuario);
|
||||||
|
|
||||||
|
return response()->json($usuario->fresh(['restaurantes']));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ function register_user_api($router) {
|
|||||||
$router->delete('/{id}', ['as' => 'users.delete', 'uses' => 'UsuariosController@delete']);
|
$router->delete('/{id}', ['as' => 'users.delete', 'uses' => 'UsuariosController@delete']);
|
||||||
|
|
||||||
// Rutas de acciones
|
// Rutas de acciones
|
||||||
$router->put('/{id}/restaurantes', ['as' => 'users.add_restaurante', 'uses' => 'UsuariosController@addRestaurante']);
|
$router->put('/{id}/restaurantes/{restaurant}', ['as' => 'users.add_to_restaurant', 'uses' => 'UsuariosController@addToRestaurant']);
|
||||||
$router->delete('/{id}/restaurantes', ['as' => 'users.remove_restaurante', 'uses' => 'UsuariosController@removeRestaurante']);
|
$router->delete('/{id}/restaurantes/{restaurant}', ['as' => 'users.remove_from_restaurant', 'uses' => 'UsuariosController@removeFromRestaurant']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user