ProviderController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. //
  51. public function pending(Request $request): JsonResponse
  52. {
  53. $page = $request->integer('page', 1);
  54. $perPage = $request->integer('per_page', 10);
  55. $paginated = $this->service->getPending($page, $perPage);
  56. return $this->successResponse(payload: [
  57. 'data' => ProviderResource::collection($paginated->items()),
  58. 'total' => $paginated->total(),
  59. 'from' => $paginated->firstItem() ?? 0,
  60. 'to' => $paginated->lastItem() ?? 0,
  61. ]);
  62. }
  63. public function approve(int $id): JsonResponse
  64. {
  65. $item = $this->service->approve($id);
  66. return $this->successResponse(
  67. payload: new ProviderResource($item),
  68. message: __('messages.provider_approved'),
  69. );
  70. }
  71. public function reject(int $id): JsonResponse
  72. {
  73. $item = $this->service->reject($id);
  74. return $this->successResponse(
  75. payload: new ProviderResource($item),
  76. message: __('messages.provider_rejected'),
  77. );
  78. }
  79. //
  80. public function register(RegisterProviderRequest $request): JsonResponse
  81. {
  82. $result = $this->service->register($request->validated());
  83. if (! $result) {
  84. return $this->errorResponse(message: __('auth.failed'), code: 401);
  85. }
  86. return $this->successResponse(
  87. payload: new AuthResource([
  88. ...data_get($result, 'payload'),
  89. 'refresh_token' => data_get($result, 'refreshToken'),
  90. ]),
  91. message: __('messages.provider_registered_pending'),
  92. code: 201,
  93. );
  94. }
  95. public function dailyPriceMin(): JsonResponse
  96. {
  97. return $this->successResponse(payload: [
  98. 'daily_price_min' => (float) config('provider.daily_price_min'),
  99. ]);
  100. }
  101. }