StoreItemController.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\StoreItemRequest;
  4. use App\Http\Resources\StoreItemResource;
  5. use App\Services\StoreItemService;
  6. use Illuminate\Http\JsonResponse;
  7. class StoreItemController extends Controller
  8. {
  9. public function __construct(protected StoreItemService $service) {}
  10. public function index(): JsonResponse
  11. {
  12. $items = $this->service->getAll();
  13. return $this->successResponse(payload: StoreItemResource::collection($items));
  14. }
  15. public function store(StoreItemRequest $request): JsonResponse
  16. {
  17. $item = $this->service->create($request->validated());
  18. return $this->successResponse(
  19. payload: new StoreItemResource($item),
  20. message: __('messages.created'),
  21. code: 201,
  22. );
  23. }
  24. public function show(int $id): JsonResponse
  25. {
  26. $item = $this->service->findById($id);
  27. return $this->successResponse(payload: new StoreItemResource($item));
  28. }
  29. public function update(StoreItemRequest $request, int $id): JsonResponse
  30. {
  31. $item = $this->service->update($id, $request->validated());
  32. return $this->successResponse(
  33. payload: new StoreItemResource($item),
  34. message: __('messages.updated'),
  35. );
  36. }
  37. public function destroy(int $id): JsonResponse
  38. {
  39. $this->service->delete($id);
  40. return $this->successResponse(message: __('messages.deleted'), code: 204);
  41. }
  42. public function myInterests(): JsonResponse
  43. {
  44. $items = $this->service->getMyInterests();
  45. return $this->successResponse(payload: StoreItemResource::collection($items));
  46. }
  47. public function toggleInterest(int $id): JsonResponse
  48. {
  49. $result = $this->service->toggleInterest($id);
  50. return $this->successResponse(
  51. payload: $result,
  52. message: __('messages.updated'),
  53. );
  54. }
  55. }