ClientController.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\ClientRequest;
  4. use App\Http\Requests\RegisterClientRequest;
  5. use App\Http\Resources\AuthResource;
  6. use App\Http\Resources\ClientResource;
  7. use App\Services\ClientService;
  8. use Illuminate\Http\JsonResponse;
  9. class ClientController extends Controller
  10. {
  11. public function __construct(protected ClientService $service) {}
  12. public function index(): JsonResponse
  13. {
  14. $items = $this->service->getAll();
  15. return $this->successResponse(
  16. payload: ClientResource::collection($items),
  17. );
  18. }
  19. public function store(ClientRequest $request): JsonResponse
  20. {
  21. $item = $this->service->create($request->validated());
  22. return $this->successResponse(
  23. payload: new ClientResource($item),
  24. message: __('messages.created'),
  25. code: 201,
  26. );
  27. }
  28. public function show(int $id): JsonResponse
  29. {
  30. $item = $this->service->findById($id);
  31. return $this->successResponse(payload: new ClientResource($item));
  32. }
  33. public function update(ClientRequest $request, int $id): JsonResponse
  34. {
  35. $item = $this->service->update($request->validated(), $id);
  36. return $this->successResponse(
  37. payload: new ClientResource($item),
  38. message: __('messages.updated'),
  39. );
  40. }
  41. public function destroy(int $id): JsonResponse
  42. {
  43. $this->service->delete($id);
  44. return $this->successResponse(
  45. message: __('messages.deleted'),
  46. code: 204,
  47. );
  48. }
  49. public function register(RegisterClientRequest $request): JsonResponse
  50. {
  51. $result = $this->service->register($request->validated());
  52. if (! $result) {
  53. return $this->errorResponse(message: __('auth.failed'), code: 401);
  54. }
  55. return $this->successResponse(
  56. payload: new AuthResource([
  57. ...$result['payload'],
  58. 'refresh_token' => $result['refreshToken'],
  59. ]),
  60. message: __('auth.logged_in'),
  61. );
  62. }
  63. }