ProviderController.php 3.5 KB

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