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
|
|
|
|
|
{
|
2026-08-17 13:30:49 +02:00
|
|
|
$dish = (new CreateDishAction)->execute($request->validated());
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
2026-08-17 13:30:49 +02:00
|
|
|
$dish = (new UpdateDishAction)->execute($dish, $request->validated());
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(['dish' => new DishResource($dish)]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function destroy(Dish $dish): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('delete', $dish);
|
|
|
|
|
|
2026-08-17 13:30:49 +02:00
|
|
|
(new DeleteDishAction)->execute($dish);
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function syncUsers(SyncUsersRequest $request, Dish $dish): JsonResponse
|
|
|
|
|
{
|
2026-08-17 13:30:49 +02:00
|
|
|
(new SyncUsersAction)->execute($dish, Arr::get($request->validated(), 'users', []));
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(['dish' => new DishResource($dish->refresh())]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function addUsers(AddUsersToDishRequest $request, Dish $dish): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('update', $dish);
|
|
|
|
|
|
2026-08-17 13:30:49 +02:00
|
|
|
(new AddUsersToDishAction)->execute($dish, Arr::get($request->validated(), 'users', []));
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(['dish' => new DishResource($dish->refresh())]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function removeUsers(RemoveUsersFromDishRequest $request, Dish $dish): JsonResponse
|
|
|
|
|
{
|
2026-08-17 13:30:49 +02:00
|
|
|
(new RemoveUsersFromDishAction)->execute($dish, Arr::get($request->validated(), 'users', []));
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(['dish' => new DishResource($dish->refresh())]);
|
|
|
|
|
}
|
|
|
|
|
}
|