dishplanner/src/DishPlanner/Dish/Controllers/DishController.php

87 lines
2.7 KiB
PHP
Raw Normal View History

2025-10-13 14:57:11 +02:00
<?php
namespace DishPlanner\Dish\Controllers;
use App\Http\Controllers\Api\ApiController;
use App\Models\Dish;
use DishPlanner\Dish\Actions\AddUsersToDishAction;
use DishPlanner\Dish\Actions\CreateDishAction;
use DishPlanner\Dish\Actions\DeleteDishAction;
use DishPlanner\Dish\Actions\RemoveUsersFromDishAction;
use DishPlanner\Dish\Actions\SyncUsersAction;
use DishPlanner\Dish\Actions\UpdateDishAction;
use DishPlanner\Dish\Requests\AddUsersToDishRequest;
use DishPlanner\Dish\Requests\RemoveUsersFromDishRequest;
use DishPlanner\Dish\Requests\StoreDishRequest;
use DishPlanner\Dish\Requests\SyncUsersRequest;
use DishPlanner\Dish\Requests\UpdateDishRequest;
use DishPlanner\Dish\Resources\DishResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
class DishController extends ApiController
{
public function index(): JsonResponse
{
Gate::authorize('viewAny', Dish::class);
return $this->success(['dishes' => DishResource::collection(Dish::all())]);
}
public function store(StoreDishRequest $request): JsonResponse
{
$dish = (new CreateDishAction())->execute($request->validated());
return $this->success(['dish' => new DishResource($dish)]);
}
public function show(Dish $dish): JsonResponse
{
Gate::authorize('view', $dish);
return $this->success(['dish' => new DishResource($dish)]);
}
public function update(UpdateDishRequest $request, Dish $dish): JsonResponse
{
Gate::authorize('update', $dish);
$dish = (new UpdateDishAction())->execute($dish, $request->validated());
return $this->success(['dish' => new DishResource($dish)]);
}
public function destroy(Dish $dish): JsonResponse
{
Gate::authorize('delete', $dish);
(new DeleteDishAction())->execute($dish);
return $this->success(null);
}
public function syncUsers(SyncUsersRequest $request, Dish $dish): JsonResponse
{
(new SyncUsersAction())->execute($dish, Arr::get($request->validated(), 'users', []));
return $this->success(['dish' => new DishResource($dish->refresh())]);
}
public function addUsers(AddUsersToDishRequest $request, Dish $dish): JsonResponse
{
Gate::authorize('update', $dish);
(new AddUsersToDishAction())->execute($dish, Arr::get($request->validated(), 'users', []));
return $this->success(['dish' => new DishResource($dish->refresh())]);
}
public function removeUsers(RemoveUsersFromDishRequest $request, Dish $dish): JsonResponse
{
(new RemoveUsersFromDishAction())->execute($dish, Arr::get($request->validated(), 'users', []));
return $this->success(['dish' => new DishResource($dish->refresh())]);
}
}