filled('lote')) { $query->where('lot', 'LIKE', '%' . $request->lote . '%'); } if ($request->filled('caja')) { $query->where('box_number', 'LIKE', '%' . $request->caja . '%'); } $query->with('tags')->orderBy('id', 'ASC'); $perPage = $request->input('per_page', 20); $packages = $query->paginate($perPage); return ApiResponse::OK->response([ 'packages' => $packages->map(fn($item) => [ 'id' => $item->id, 'lot' => $item->lot, 'box_number' => $item->box_number, 'starting_page' => $item->starting_page, 'ending_page' => $item->ending_page, 'module' => $item->module ? [ 'id' => $item->module->id, 'name' => $item->module->name, ] : null, 'tags' => $item->tags->map(fn($tag) => [ 'id' => $tag->id, 'folio' => $tag->folio, 'vehicle_id' => $tag->vehicle_id, 'status' => $tag->status ?? null, ]), 'tags_count' => $item->tags->count(), 'created_at' => $item->created_at->format('Y-m-d H:i:s'), ]), 'pagination' => [ 'total' => $packages->total(), 'per_page' => $packages->perPage(), 'current_page' => $packages->currentPage(), 'last_page' => $packages->lastPage(), 'from' => $packages->firstItem(), 'to' => $packages->lastItem(), ], ]); } catch (\Exception $e) { return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al obtener los paquetes', 'error' => $e->getMessage(), ]); } } public function store(PackageStoreRequest $request) { try { DB::beginTransaction(); $package = Package::create([ 'lot' => $request->input('lot'), 'box_number' => $request->input('box_number'), 'starting_page' => $request->input('starting_page'), 'ending_page' => $request->input('ending_page'), 'module_id' => $request->input('module_id'), ]); DB::commit(); return ApiResponse::CREATED->response([ 'message' => 'Paquete creado exitosamente', 'package' => [ 'id' => $package->id, 'lot' => $package->lot, 'box_number' => $package->box_number, 'starting_page' => $package->starting_page, 'ending_page' => $package->ending_page, 'module_id' => $package->module_id, 'created_at' => $package->created_at->format('Y-m-d H:i:s'), ], ]); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al crear el paquete', 'error' => $e->getMessage(), ]); } } public function update(PackageUpdateRequest $request, $id) { try { $package = Package::findOrFail($id); DB::beginTransaction(); $package->update($request->validated()); DB::commit(); return ApiResponse::OK->response([ 'message' => 'Paquete actualizado exitosamente', 'package' => [ 'id' => $package->id, 'lot' => $package->lot, 'box_number' => $package->box_number, 'starting_page' => $package->starting_page, 'ending_page' => $package->ending_page, 'module_id' => $package->module_id, 'updated_at' => $package->updated_at->format('Y-m-d H:i:s'), ], ]); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al actualizar el paquete', 'error' => $e->getMessage(), ]); } } public function destroy($id) { try { DB::beginTransaction(); $package = Package::findOrFail($id); $package->delete(); DB::commit(); return ApiResponse::OK->response([ 'message' => 'Paquete eliminado exitosamente.', ]); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al eliminar el paquete.', 'error' => $e->getMessage(), ]); } } }