validOrFail($restaurante_id); $restaurante = Restaurante::findOrFail($restaurante_id); $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' => $restaurante_id], ); $data = $canalesVenta->get() ->skip($paginate['from'] - 1) ->take($paginate['per_page']) ->all(); return response()->json([ 'pagination' => $paginate, 'data' => $data ]); } /** * Obtiene un canal de venta por su id */ public function get(Request $request, $restaurante_id, $id) { app(UuidService::class)->validOrFail($id); app(UuidService::class)->validOrFail($restaurante_id); $restaurante = Restaurante::findOrFail($restaurante_id); $canalVenta = CanalVenta::findOrFail($id); if($canalVenta->restaurante != $restaurante) { throw new ModelNotFoundException("canal_venta", $id); } return response()->json($canalVenta); } /** * Crea un nuevo canal de venta */ public function create(Request $request, $restaurante_id) { $this->validate($request, [ 'nombre' => 'required', 'sector_id' => 'required|exists:sectores,id', 'tipo_canal_id' => 'required|exists:tipos_canal,id' ]); app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($request->input('sector_id')); app(UuidService::class)->validOrFail($request->input('tipo_canal_id')); $restaurante = Restaurante::findOrFail($restaurante_id); $sector = Sector::findOrFail($request->input('sector_id')); $tipo_canal = TipoCanal::findOrFail($request->input('tipo_canal_id')); if($sector->restaurante != $restaurante) { throw new ModelNotFoundException("sector", $id); } $canalVenta = CanalVenta::create([ 'id' => Uuid::uuid4(), 'nombre' => $request->input('nombre'), 'sector_id' => $sector->id, 'tipo_canal_id' => $tipo_canal->id, 'restaurante_id' => $restaurante_id ]); return response()->json($canalVenta, 201); } /** * Actualiza un canal de venta */ public function update(Request $request, $restaurante_id, $id) { $this->validate($request, [ 'nombre' => 'required', 'sector_id' => 'required|exists:sectores,id', 'tipo_canal_id' => 'required|exists:tipos_canal,id' ]); app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($request->input('sector_id')); app(UuidService::class)->validOrFail($request->input('tipo_canal_id')); app(UuidService::class)->validOrFail($id); $restaurante = Restaurante::findOrFail($restaurante_id); $sector = Sector::findOrFail($request->input('sector_id')); $tipo_canal = TipoCanal::findOrFail($request->input('tipo_canal_id')); $canalVenta = CanalVenta::findOrFail($id); if($sector->restaurante != $restaurante) { throw new ModelNotFoundException("sector", $id); } if($canalVenta->restaurante != $restaurante) { throw new ModelNotFoundException("canal_venta", $id); } $canalVenta->nombre = $request->input('nombre'); $canalVenta->sector_id = $request->input('sector_id'); $canalVenta->tipo_canal_id = $request->input('tipo_canal_id'); $canalVenta->save(); return response()->json($canalVenta); } /** * Elimina un canal de venta */ public function delete(Request $request, $restaurante_id, $id) { app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($id); $restaurante = Restaurante::findOrFail($restaurante_id); $canalVenta = CanalVenta::findOrFail($id); if($canalVenta->restaurante != $restaurante) { throw new ModelNotFoundException("canal_venta", $id); } $canalVenta->delete(); return response()->json([], 204); } }