ProviderController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\ProviderRequest;
  4. use App\Http\Requests\RegisterProviderRequest;
  5. use App\Http\Resources\AuthResource;
  6. use App\Http\Resources\ProviderResource;
  7. use App\Services\ProviderService;
  8. use Illuminate\Http\JsonResponse;
  9. use Illuminate\Http\Request;
  10. class ProviderController extends Controller
  11. {
  12. public function __construct(protected ProviderService $service) {}
  13. public function index(): JsonResponse
  14. {
  15. $items = $this->service->getAll();
  16. return $this->successResponse(
  17. payload: ProviderResource::collection($items),
  18. );
  19. }
  20. public function store(ProviderRequest $request): JsonResponse
  21. {
  22. $item = $this->service->create($request->validated());
  23. return $this->successResponse(
  24. payload: new ProviderResource($item),
  25. message: __('messages.created'),
  26. code: 201,
  27. );
  28. }
  29. public function show(int $id): JsonResponse
  30. {
  31. $item = $this->service->findById($id);
  32. return $this->successResponse(payload: new ProviderResource($item));
  33. }
  34. public function update(ProviderRequest $request, int $id): JsonResponse
  35. {
  36. $item = $this->service->update($id, $request->validated());
  37. return $this->successResponse(
  38. payload: new ProviderResource($item),
  39. message: __('messages.updated'),
  40. );
  41. }
  42. public function destroy(int $id): JsonResponse
  43. {
  44. $this->service->delete($id);
  45. return $this->successResponse(
  46. message: __('messages.deleted'),
  47. code: 204,
  48. );
  49. }
  50. public function pending(Request $request): JsonResponse
  51. {
  52. $page = $request->integer('page', 1);
  53. $perPage = $request->integer('per_page', 10);
  54. $paginated = $this->service->getPending($page, $perPage);
  55. return $this->successResponse(payload: [
  56. 'data' => ProviderResource::collection($paginated->items()),
  57. 'total' => $paginated->total(),
  58. 'from' => $paginated->firstItem() ?? 0,
  59. 'to' => $paginated->lastItem() ?? 0,
  60. ]);
  61. }
  62. public function approve(int $id): JsonResponse
  63. {
  64. $item = $this->service->approve($id);
  65. return $this->successResponse(
  66. payload: new ProviderResource($item),
  67. message: __('messages.provider_approved'),
  68. );
  69. }
  70. public function reject(int $id): JsonResponse
  71. {
  72. $item = $this->service->reject($id);
  73. return $this->successResponse(
  74. payload: new ProviderResource($item),
  75. message: __('messages.provider_rejected'),
  76. );
  77. }
  78. public function register(RegisterProviderRequest $request): JsonResponse
  79. {
  80. $result = $this->service->register($request->validated());
  81. if (! $result) {
  82. return $this->errorResponse(message: __('auth.failed'), code: 401);
  83. }
  84. return $this->successResponse(
  85. payload: new AuthResource([
  86. ...$result['payload'],
  87. 'refresh_token' => $result['refreshToken'],
  88. ]),
  89. message: __('auth.logged_in'),
  90. );
  91. }
  92. }