validOrFail($restaurante_id); $restaurante = Restaurante::findOrFail($restaurante_id); $proveedores = $restaurante->proveedores(); $paginate = app(PaginatorService::class)->paginate( perPage: $request->input('per_page', 15), page: $request->input('page', 1), total: $proveedores->count(), route: 'restaurant.all', data: ['restaurante_id' => $restaurante_id] ); $data = $proveedores->get() ->skip($paginate['from'] - 1) ->take($paginate['per_page']) ->all(); return response()->json([ 'pagination' => $paginate, 'data' => $data ]); } /** * Obtiene un proveedor por su id */ public function get(Request $request, $restaurante_id, $id) { app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($id); $restaurante = Restaurante::findOrFail($restaurante_id); $proveedor = Proveedor::findOrFail($id); if($proveedor->restaurante != $restaurante) { throw new ModelNotFoundException("proveedor", $id); } return response()->json($proveedor); } /** * Crea un nuevo proveedor */ public function create(Request $request, $restaurante_id) { app(UuidService::class)->validOrFail($restaurante_id); $restaurante = Restaurante::findOrFail($restaurante_id); $this->validate($request, [ 'rut' => 'required', 'nombre' => 'required', 'descripcion' => 'required', 'direccion' => 'sometimes|required', 'telefono' => 'sometimes|required' ]); $proveedor = Proveedor::create([ 'id' => Uuid::uuid4(), 'rut' => $request->input('rut'), 'nombre' => $request->input('nombre'), 'descripcion' => $request->input('descripcion'), 'direccion' => $request->input('direccion', ''), 'telefono' => $request->input('telefono', ''), 'restaurante_id' => $restaurante->id ]); return response()->json($proveedor, 201); } /** * Actualiza un proveedor */ public function update(Request $request, $restaurante_id, $id) { app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($id); $this->validate($request, [ 'rut' => 'required', 'nombre' => 'required', 'descripcion' => 'required', 'direccion' => 'sometimes|required', 'telefono' => 'sometimes|required' ]); $restaurante = Restaurante::findOrFail($restaurante_id); $proveedor = Proveedor::findOrFail($id); if($proveedor->restaurante != $restaurante) { throw new ModelNotFoundException("proveedor", $id); } $proveedor->rut = $request->input('rut'); $proveedor->nombre = $request->input('nombre'); $proveedor->descripcion = $request->input('descripcion'); $proveedor->direccion = $request->input('direccion'); $proveedor->telefono = $request->input('telefono'); $proveedor->save(); return response()->json($proveedor); } /** * Elimina un proveedor */ public function delete(Request $request, $restaurante_id, $id) { app(UuidService::class)->validOrFail($restaurante_id); app(UuidService::class)->validOrFail($id); $restaurante = Restaurante::findOrFail($restaurante_id); $proveedor = Proveedor::findOrFail($id); if($proveedor->restaurante != $restaurante) { throw new ModelNotFoundException("proveedor", $id); } $proveedor->delete(); return response()->json([], 204); } }