SupportRequestController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\SupportRequestRequest;
  4. use App\Http\Resources\SupportRequestResource;
  5. use App\Services\SupportRequestService;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class SupportRequestController extends Controller
  10. {
  11. public function __construct(
  12. protected SupportRequestService $service,
  13. ) {}
  14. public function index(Request $request): JsonResponse
  15. {
  16. $paginated = $this->service->paginate(
  17. status: $request->input('status'),
  18. search: $request->input('filter'),
  19. page: $request->integer('page', 1),
  20. perPage: $request->integer('per_page', 10),
  21. );
  22. return $this->successResponse(payload: [
  23. 'data' => SupportRequestResource::collection($paginated->items()),
  24. 'total' => $paginated->total(),
  25. 'from' => $paginated->firstItem() ?? 0,
  26. 'to' => $paginated->lastItem() ?? 0,
  27. ]);
  28. }
  29. public function show(int $id): JsonResponse
  30. {
  31. $item = $this->service->findById($id);
  32. if (! $item) {
  33. return $this->errorResponse(message: __('messages.not_found'));
  34. }
  35. return $this->successResponse(payload: new SupportRequestResource($item));
  36. }
  37. public function store(SupportRequestRequest $request): JsonResponse
  38. {
  39. $user = Auth::user();
  40. $data = array_merge($request->validated(), [
  41. 'user_id' => $user?->id,
  42. 'user_type' => $user?->type?->value,
  43. 'name' => $request->input('name', $user?->name),
  44. 'email' => $request->input('email', $user?->email),
  45. 'phone' => $request->input('phone', $user?->phone),
  46. ]);
  47. $item = $this->service->create($data);
  48. return $this->successResponse(payload: new SupportRequestResource($item), message: __('messages.created'), code: 201);
  49. }
  50. public function update(SupportRequestRequest $request, int $id): JsonResponse
  51. {
  52. $item = $this->service->updateStatus($id, $request->validated()['status'], Auth::id());
  53. if (! $item) {
  54. return $this->errorResponse(message: __('messages.not_found'));
  55. }
  56. return $this->successResponse(payload: new SupportRequestResource($item), message: __('messages.updated'));
  57. }
  58. }