2025-10-13 14:57:11 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace DishPlanner\ScheduledUserDish\Controllers;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Api\ApiController;
|
|
|
|
|
use App\Http\Resources\ScheduledUserDishResource;
|
|
|
|
|
use App\Models\Planner;
|
|
|
|
|
use App\Models\ScheduledUserDish;
|
|
|
|
|
use App\Models\UserDish;
|
|
|
|
|
use Carbon\Carbon;
|
|
|
|
|
use DishPlanner\Auth\Exceptions\InvalidPlannerException;
|
|
|
|
|
use DishPlanner\Schedule\Repositories\ScheduleRepository;
|
|
|
|
|
use DishPlanner\Schedule\Requests\CreateScheduleRequest;
|
|
|
|
|
use DishPlanner\ScheduledUserDish\Actions\CreateScheduledUserDishAction;
|
|
|
|
|
use DishPlanner\ScheduledUserDish\Actions\DeleteScheduledUserDishAction;
|
|
|
|
|
use DishPlanner\ScheduledUserDish\Actions\UpdateScheduledUserDishAction;
|
|
|
|
|
use DishPlanner\ScheduledUserDish\Requests\UpdateScheduledUserDishRequest;
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
|
|
|
|
|
|
class ScheduledUserDishController extends ApiController
|
|
|
|
|
{
|
|
|
|
|
public function create(CreateScheduleRequest $request): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('create', ScheduledUserDish::class);
|
|
|
|
|
|
|
|
|
|
$userDish = UserDish::findOrFail($request->user_dish_id);
|
|
|
|
|
|
|
|
|
|
Gate::authorize('assign', $userDish);
|
|
|
|
|
|
|
|
|
|
$date = Carbon::createFromFormat('Y-m-d', $request->date);
|
|
|
|
|
|
|
|
|
|
/** @var Planner $planner */
|
|
|
|
|
$planner = auth()->user();
|
|
|
|
|
|
|
|
|
|
$schedule = resolve(ScheduleRepository::class)->findOrCreate($planner, $date);
|
|
|
|
|
|
|
|
|
|
try {
|
2026-08-17 13:30:49 +02:00
|
|
|
$scheduledUserDish = (new CreateScheduledUserDishAction)->execute(
|
2025-10-13 14:57:11 +02:00
|
|
|
planner: $planner,
|
|
|
|
|
schedule: $schedule,
|
|
|
|
|
userDish: $userDish,
|
|
|
|
|
);
|
|
|
|
|
} catch (InvalidPlannerException $e) {
|
|
|
|
|
return $this->error($e->getMessage(), 404);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
2026-08-17 13:30:49 +02:00
|
|
|
'scheduled_user_dish' => new ScheduledUserDishResource($scheduledUserDish),
|
2025-10-13 14:57:11 +02:00
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function read(ScheduledUserDish $scheduledUserDish): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('view', $scheduledUserDish);
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
|
|
|
|
'scheduled_user_dish' => new ScheduledUserDishResource($scheduledUserDish->refresh()),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function update(UpdateScheduledUserDishRequest $request, ScheduledUserDish $scheduledUserDish): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('update', $scheduledUserDish);
|
|
|
|
|
|
2026-08-17 13:30:49 +02:00
|
|
|
(new UpdateScheduledUserDishAction)->execute(
|
2025-10-13 14:57:11 +02:00
|
|
|
scheduledUserDish: $scheduledUserDish,
|
|
|
|
|
userDish: UserDish::find($request->user_dish_id),
|
|
|
|
|
isSkipped: $request->is_skipped ?? null,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return $this->success([
|
|
|
|
|
'scheduled_user_dish' => new ScheduledUserDishResource($scheduledUserDish->refresh()),
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function delete(ScheduledUserDish $scheduledUserDish): JsonResponse
|
|
|
|
|
{
|
|
|
|
|
Gate::authorize('delete', $scheduledUserDish);
|
|
|
|
|
|
2026-08-17 13:30:49 +02:00
|
|
|
(new DeleteScheduledUserDishAction)->execute($scheduledUserDish);
|
2025-10-13 14:57:11 +02:00
|
|
|
|
|
|
|
|
return $this->success(null);
|
|
|
|
|
}
|
|
|
|
|
}
|