| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Requests\AppointmentRequest;
- use App\Http\Resources\AppointmentResource;
- use App\Services\AppointmentService;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- class AppointmentController extends Controller
- {
- public function __construct(protected AppointmentService $service) {}
- public function index(): JsonResponse
- {
- $items = $this->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'));
- }
- }
|