service->getAll(); return $this->successResponse(payload: AppointmentResource::collection($items)); } public function myAppointments(): JsonResponse { $items = $this->service->getAllByUser(Auth::id()); return $this->successResponse(payload: AppointmentResource::collection($items)); } public function store(AppointmentRequest $request): JsonResponse { $item = $this->service->create($request->validated()); return $this->successResponse( payload: new AppointmentResource($item), message: __('messages.created'), code: 201, ); } public function show(int $id): JsonResponse { $item = $this->service->findById($id); return $this->successResponse(payload: new AppointmentResource($item)); } public function update(AppointmentRequest $request, int $id): JsonResponse { $item = $this->service->update($id, $request->validated()); return $this->successResponse( payload: new AppointmentResource($item), message: __('messages.updated'), ); } public function destroy(int $id): JsonResponse { $this->service->delete($id); return $this->successResponse(message: __('messages.deleted'), code: 204); } public function getAdminCounters(): JsonResponse { return $this->successResponse(payload: $this->service->getAdminCounters()); } public function getAdminAppointmentsPaginated(Request $request): JsonResponse { $filters = $request->only(['status', 'search']); $perPage = (int) $request->input('per_page', 10); $paginator = $this->service->getAllPaginated($filters, $perPage); $items = collect($paginator->items())->map(fn($a) => [ 'id' => $a->id, 'order_number' => $a->order_number, 'registration' => $a->user?->registration, 'user_name' => $a->user?->name, 'partner_name' => $a->partnerAgreement?->trade_name ?? $a->partnerAgreement?->company_name, 'service_name' => $a->partnerAgreementService?->name, 'requested_at' => $a->requested_at?->format('d/m/Y'), 'status' => $a->status?->value, ]); return $this->successResponse(payload: [ 'data' => $items, 'total' => $paginator->total(), 'per_page' => $paginator->perPage(), 'current_page' => $paginator->currentPage(), 'from' => $paginator->firstItem(), 'to' => $paginator->lastItem(), ]); } public function approve(int $id): JsonResponse { $item = $this->service->approve($id); return $this->successResponse(payload: new AppointmentResource($item), message: __('messages.updated')); } public function reject(int $id): JsonResponse { $item = $this->service->reject($id); return $this->successResponse(payload: new AppointmentResource($item), message: __('messages.updated')); } }