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
|
||||
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
|
||||
si el frontend tiene solamente acceso al ID entregado por Auth0.
|
||||
puede ser el UUID del usuario o el ID entregado por Auth0.
|
||||
|
||||
Los usuarios eliminados podrán ser recuperados localmente, pero en auth0 serán
|
||||
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
|
||||
cualquier error, principalmente proviniendo desde Auth0, se utilizará el cuerpo
|
||||
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"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -25,14 +25,14 @@ class UsuariosController extends Controller {
|
||||
$paginate['links'] = [
|
||||
'first' => route('users.all', ['page' => 1, 'per_page' => $paginate['per_page']]),
|
||||
'prev' => $paginate['current_page'] - 1 >= 1 ? route('users.all', ['page' => $paginate['current_page'] - 1, 'per_page' => $paginate['per_page']]) : null,
|
||||
'current' => route('users.all', ['page' =>$paginate['current_page'], 'per_page' => $paginate['per_page']]),
|
||||
'next' => $paginate['current_page']+ 1 <= $paginate['last_page'] ? route('users.all', ['page' => $paginate['current_page'] + 1, 'per_page' => $paginate['per_page']]) : null,
|
||||
'current' => route('users.all', ['page' => $paginate['current_page'], 'per_page' => $paginate['per_page']]),
|
||||
'next' => $paginate['current_page'] + 1 <= $paginate['last_page'] ? route('users.all', ['page' => $paginate['current_page'] + 1, 'per_page' => $paginate['per_page']]) : null,
|
||||
'last' => route('users.all', ['page' => $paginate['last_page'], 'per_page' => $paginate['per_page']]),
|
||||
];
|
||||
|
||||
return response()->json([
|
||||
'pagination' => $paginate,
|
||||
'data' => array_values(Usuario::with('restaurantes')->skip($paginate['from'] - 1 )->take($paginate['per_page'])->get()->all())
|
||||
'data' => array_values(Usuario::with('restaurantes')->skip($paginate['from'] - 1)->take($paginate['per_page'])->get()->all())
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -229,4 +229,111 @@ class UsuariosController extends Controller {
|
||||
|
||||
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']);
|
||||
|
||||
// Rutas de acciones
|
||||
$router->put('/{id}/restaurantes', ['as' => 'users.add_restaurante', 'uses' => 'UsuariosController@addRestaurante']);
|
||||
$router->delete('/{id}/restaurantes', ['as' => 'users.remove_restaurante', 'uses' => 'UsuariosController@removeRestaurante']);
|
||||
$router->put('/{id}/restaurantes/{restaurant}', ['as' => 'users.add_to_restaurant', 'uses' => 'UsuariosController@addToRestaurant']);
|
||||
$router->delete('/{id}/restaurantes/{restaurant}', ['as' => 'users.remove_from_restaurant', 'uses' => 'UsuariosController@removeFromRestaurant']);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user