From b3e4fe20cfc9f3b08463f6ceb47bd6b830e8f137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Cort=C3=A9s?= Date: Wed, 9 Jun 2021 18:15:08 -0400 Subject: [PATCH] Comienzo de api de canales de venta --- .../Controllers/CanalesVentaController.php | 184 ++++++++++++++++++ .../Controllers/RestaurantesController.php | 21 ++ .../Http/Controllers/UsuariosController.php | 50 +++++ backend/app/Models/CanalVenta.php | 9 + backend/app/Models/Restaurante.php | 5 + backend/app/Providers/AppServiceProvider.php | 4 + backend/app/Services/UuidService.php | 12 ++ backend/routes/web.php | 24 ++- 8 files changed, 300 insertions(+), 9 deletions(-) create mode 100644 backend/app/Http/Controllers/CanalesVentaController.php create mode 100644 backend/app/Services/UuidService.php diff --git a/backend/app/Http/Controllers/CanalesVentaController.php b/backend/app/Http/Controllers/CanalesVentaController.php new file mode 100644 index 0000000..ac20ee7 --- /dev/null +++ b/backend/app/Http/Controllers/CanalesVentaController.php @@ -0,0 +1,184 @@ +is_valid($restaurante_id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $restaurante_id . ' no es un UUID valido' + ], 404); + } + + $restaurante = Restaurante::findOrNull($restaurante_id); + + if (!$restaurante) { + return response()->json([ + 'error' => 'restaurant_not_found', + 'message' => 'El restaurant con id ' . $restaurante_id . ' no existe' + ], 404); + } + + $canalesVenta = $restaurante->canalesVenta(); + + $paginate = app(PaginatorService::class)->paginate( + perPage: $request->input('per_page', 15), + page: $request->input('page', 1), + total: $canalesVenta->count(), + route: 'canales-venta.all', + data: [$restaurante_id], + ); + + return response()->json([ + 'pagination' => $paginate, + 'data' => array_values($canalesVenta->get()->skip($paginate['from'] - 1)->take($paginate['per_page'])->all()) + ]); + + } + + /** + * Obtiene un canal de venta por su id + * @param $restaurante_id + * @param $id + * @return JsonResponse + */ + public function get($restaurante_id, $id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + + if (!app(UuidService::class)->is_valid($restaurante_id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $restaurante_id . ' no es un UUID valido' + ], 404); + } + + $restaurante = Restaurante::findOrNull($restaurante_id); + + if (!$restaurante) { + return response()->json([ + 'error' => 'restaurant_not_found', + 'message' => 'El restaurant con id ' . $restaurante_id . ' no existe' + ], 404); + } + + $canalVenta = CanalVenta::findOrNull($id); + if (!$canalVenta) { + return response()->json([ + 'error' => 'canal_venta_not_found', + 'message' => 'El canal de venta con id ' . $id . ' no existe' + ], 404); + } + + return response()->json($canalVenta); + } + + ///** + // * Crea un nuevo restaurant + // * @param Request $request + // * @return JsonResponse + // * @throws ValidationException + // */ + //public function create(Request $request) { + // $this->validate($request, [ + // 'nombre' => 'required' + // ]); + + // if (!$request->user->canManageRestaurants()) { + // return response()->json([ + // 'error' => 'cant_manage_restaurants', + // 'message' => 'El usuario ' . $request->user->id . ' no tiene permisos para manipular restaurantes' + // ], 403); + // } + + // $restaurant = Restaurante::create([ + // 'id' => Uuid::uuid4(), + // 'nombre' => $request->input('nombre') + // ]); + + // return response()->json($restaurant, 201); + //} + + ///** + // * Actualiza un restaurante + // * @param Request $request + // * @param $id + // * @return JsonResponse + // * @throws ValidationException + // */ + //public function update(Request $request, $id) { + // $this->validate($request, [ + // 'nombre' => 'required' + // ]); + + // if (!$request->user->canManageRestaurants()) { + // return response()->json([ + // 'error' => 'cant_manage_restaurants', + // 'message' => 'El usuario ' . $request->user->id . ' no tiene permisos para manipular restaurantes' + // ], 403); + // } + + // $restaurant = Restaurante::findOrNull($id); + // if(!$restaurant) { + // return response()->json([ + // 'error' => 'not_found', + // 'message' => 'El restaurante con id ' . $id . ' no existe' + // ], 404); + // } + + // $restaurant->nombre = $request->input('nombre'); + // $restaurant->save(); + + // return response()->json($restaurant); + //} + + ///** + // * Elimina un restaurante + // * @param Request $request + // * @param $id + // * @return JsonResponse + // * @throws ValidationException + // */ + //public function delete(Request $request, $id) { + // if (!$request->user->canManageRestaurants()) { + // return response()->json([ + // 'error' => 'cant_manage_restaurants', + // 'message' => 'El usuario ' . $request->user->id . ' no tiene permisos para manipular restaurantes' + // ], 403); + // } + + // $restaurant = Restaurante::findOrNull($id); + // if(!$restaurant) { + // return response()->json([ + // 'error' => 'not_found', + // 'message' => 'El restaurante con id ' . $id . ' no existe' + // ], 404); + // } + + // $restaurant->delete(); + + // return response()->json($restaurant); + //} +} diff --git a/backend/app/Http/Controllers/RestaurantesController.php b/backend/app/Http/Controllers/RestaurantesController.php index f716fe8..84e2bc2 100644 --- a/backend/app/Http/Controllers/RestaurantesController.php +++ b/backend/app/Http/Controllers/RestaurantesController.php @@ -36,6 +36,13 @@ class RestaurantesController extends Controller { * @return JsonResponse */ public function get($id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + $restaurante = Restaurante::findOrNull($id); if (!$restaurante) { @@ -82,6 +89,13 @@ class RestaurantesController extends Controller { * @throws ValidationException */ public function update(Request $request, $id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + $this->validate($request, [ 'nombre' => 'required' ]); @@ -115,6 +129,13 @@ class RestaurantesController extends Controller { * @throws ValidationException */ public function delete(Request $request, $id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + if (!$request->user->canManageRestaurants()) { return response()->json([ 'error' => 'cant_manage_restaurants', diff --git a/backend/app/Http/Controllers/UsuariosController.php b/backend/app/Http/Controllers/UsuariosController.php index 8668951..49bc14a 100644 --- a/backend/app/Http/Controllers/UsuariosController.php +++ b/backend/app/Http/Controllers/UsuariosController.php @@ -39,6 +39,13 @@ class UsuariosController extends Controller { * @return JsonResponse */ public function get($id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + $usuario = Usuario::findByIdOrAuth0Id($id); if (!$usuario) { @@ -108,6 +115,13 @@ class UsuariosController extends Controller { * @throws ValidationException */ public function update(Request $request, $id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + $this->validate($request, [ 'nombre' => 'sometimes', 'email' => 'sometimes|email', @@ -163,6 +177,13 @@ class UsuariosController extends Controller { * @return JsonResponse */ public function delete(Request $request, $id) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + /** @var Usuario $logged_user */ $logged_user = $request->user; $usuario = Usuario::findByIdOrAuth0Id($id); @@ -202,6 +223,20 @@ class UsuariosController extends Controller { * @return JsonResponse */ public function addToRestaurant(Request $request, $id, $restaurant) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + + if (!app(UuidService::class)->is_valid($restaurant)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $restaurant. ' no es un UUID valido' + ], 404); + } + /** @var Usuario $logged_user */ $logged_user = $request->user; @@ -213,6 +248,7 @@ class UsuariosController extends Controller { ], 404); } + $restaurant = Restaurante::findOrNull($restaurant); if (!$restaurant) { return response()->json([ @@ -247,6 +283,20 @@ class UsuariosController extends Controller { * @return JsonResponse */ public function removeFromRestaurant(Request $request, $id, $restaurant) { + if (!app(UuidService::class)->is_valid($id)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $id . ' no es un UUID valido' + ], 404); + } + + if (!app(UuidService::class)->is_valid($restaurant)) { + return response()->json([ + 'error' => 'invalid_id', + 'message' => 'El id ' . $restaurant. ' no es un UUID valido' + ], 404); + } + $usuario = Usuario::findByIdOrAuth0Id($id); if (!$usuario) { diff --git a/backend/app/Models/CanalVenta.php b/backend/app/Models/CanalVenta.php index 39491dc..600219d 100644 --- a/backend/app/Models/CanalVenta.php +++ b/backend/app/Models/CanalVenta.php @@ -11,6 +11,15 @@ class CanalVenta extends Model { protected $table = 'canales_venta'; + public static function findOrNull($id) { + try { + return CanalVenta::find($id); + } catch (QueryException $ex) { + Log::warning('Se intento obtener un canal de venta con un id invalido', ['id' => $id]); + return null; + } + } + public function tipoCanal() { return $this->belongsTo(TipoCanal::class); } diff --git a/backend/app/Models/Restaurante.php b/backend/app/Models/Restaurante.php index 7a44380..39e5db6 100644 --- a/backend/app/Models/Restaurante.php +++ b/backend/app/Models/Restaurante.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Models\CanalVenta; use App\Traits\UuidPrimaryKey; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; @@ -32,4 +33,8 @@ class Restaurante extends Model { public function usuarios() { return $this->belongsToMany(Usuario::class, 'usuarios_restaurantes', 'restaurante_id', 'usuario_id'); } + + public function canalesVenta() { + return $this->hasMany(CanalVenta::class, 'restaurante_id'); + } } diff --git a/backend/app/Providers/AppServiceProvider.php b/backend/app/Providers/AppServiceProvider.php index 2fa710e..a06b950 100644 --- a/backend/app/Providers/AppServiceProvider.php +++ b/backend/app/Providers/AppServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; use App\Services\Auth0Service; use App\Services\PaginatorService; +use App\Services\UuidService; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { @@ -14,5 +15,8 @@ class AppServiceProvider extends ServiceProvider { $this->app->singleton(PaginatorService::class, function($app) { return new PaginatorService($app); }); + $this->app->singleton(UuidService::class, function($app) { + return new UuidService($app); + }); } } diff --git a/backend/app/Services/UuidService.php b/backend/app/Services/UuidService.php new file mode 100644 index 0000000..5f3f8b3 --- /dev/null +++ b/backend/app/Services/UuidService.php @@ -0,0 +1,12 @@ +group(['prefix' => '/restaurantes'], function () use ($router) { // Rutas del recurso - $router->get('/', ['as' => 'restaurant.all', 'uses' => 'RestaurantesController@all']); - $router->get('/{id}', ['as' => 'restaurant.get', 'uses' => 'RestaurantesController@get']); - $router->post('/', ['as' => 'restaurant.create', 'uses' => 'RestaurantesController@create']); - $router->put('/{id}', ['as' => 'restaurant.update', 'uses' => 'RestaurantesController@update']); + $router->get( '/', ['as' => 'restaurant.all', 'uses' => 'RestaurantesController@all']); + $router->get( '/{id}', ['as' => 'restaurant.get', 'uses' => 'RestaurantesController@get']); + $router->post( '/', ['as' => 'restaurant.create', 'uses' => 'RestaurantesController@create']); + $router->put( '/{id}', ['as' => 'restaurant.update', 'uses' => 'RestaurantesController@update']); $router->delete('/{id}', ['as' => 'restaurant.delete', 'uses' => 'RestaurantesController@delete']); + + $router->get( '/{restaurante_id}/canales-venta', ['as' => 'canales-venta.all', 'uses' => 'CanalesVentaController@all']); + $router->get( '/{restaurante_id}/canales-venta/{id}', ['as' => 'canales-venta.get', 'uses' => 'CanalesVentaController@get']); + $router->post( '/{restaurante_id}/canales-venta', ['as' => 'canales-venta.create', 'uses' => 'CanalesVentaController@create']); + $router->put( '/{restaurante_id}/canales-venta/{id}', ['as' => 'canales-venta.update', 'uses' => 'CanalesVentaController@update']); + $router->delete('/{restaurante_id}/canales-venta/{id}', ['as' => 'canales-venta.delete', 'uses' => 'CanalesVentaController@delete']); }); } function registerUserApi($router) { $router->group(['prefix' => '/users'], function () use ($router) { // Rutas del recurso - $router->get('/', ['as' => 'users.all', 'uses' => 'UsuariosController@all']); - $router->get('/{id}', ['as' => 'users.get', 'uses' => 'UsuariosController@get']); - $router->post('/', ['as' => 'users.create', 'uses' => 'UsuariosController@create']); - $router->put('/{id}', ['as' => 'users.update', 'uses' => 'UsuariosController@update']); + $router->get( '/', ['as' => 'users.all', 'uses' => 'UsuariosController@all']); + $router->get( '/{id}', ['as' => 'users.get', 'uses' => 'UsuariosController@get']); + $router->post( '/', ['as' => 'users.create', 'uses' => 'UsuariosController@create']); + $router->put( '/{id}', ['as' => 'users.update', 'uses' => 'UsuariosController@update']); $router->delete('/{id}', ['as' => 'users.delete', 'uses' => 'UsuariosController@delete']); // Rutas de acciones - $router->put('/{id}/restaurantes/{restaurant}', ['as' => 'users.add_to_restaurant', 'uses' => 'UsuariosController@addToRestaurant']); + $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']); }); }