88 lines
2.8 KiB
PHP
88 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace DishPlanner\Schedule\Controllers;
|
|
|
|
use App\Http\Controllers\Api\ApiController;
|
|
use App\Models\Planner;
|
|
use App\Models\Schedule;
|
|
use DishPlanner\Schedule\Actions\GenerateScheduleForPeriodAction;
|
|
use DishPlanner\Schedule\Actions\UpdateScheduleAction;
|
|
use DishPlanner\Schedule\Repositories\ScheduleRepository;
|
|
use DishPlanner\Schedule\Requests\GenerateScheduleRequest;
|
|
use DishPlanner\Schedule\Requests\UpdateScheduleRequest;
|
|
use DishPlanner\Schedule\Resources\ScheduleResource;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
class ScheduleController extends ApiController
|
|
{
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
Gate::authorize('viewAny', Schedule::class);
|
|
|
|
/** @var Planner $planner */
|
|
$planner = auth()->user();
|
|
|
|
$startDate = $request->get('start', now()->format('Y-m-d'));
|
|
$endDate = $request->get('end', now()->addWeeks(2)->format('Y-m-d'));
|
|
|
|
$schedule = Schedule::query()
|
|
->where('planner_id', $planner->id)
|
|
->where('date', '>=', $startDate)
|
|
->where('date', '<=', $endDate)
|
|
->orderBy('date', 'asc')->get()->values();
|
|
|
|
return $this->success([
|
|
'schedule' => ScheduleResource::collection($schedule),
|
|
]);
|
|
}
|
|
|
|
public function show(Carbon $date): JsonResponse
|
|
{
|
|
/** @var Planner $planner */
|
|
$planner = auth()->user();
|
|
|
|
/** @var ScheduleRepository $scheduleRepository */
|
|
$scheduleRepository = resolve(ScheduleRepository::class);
|
|
$schedule = $scheduleRepository->findOrCreate($planner, $date);
|
|
|
|
Gate::authorize('view', $schedule);
|
|
|
|
return $this->success([
|
|
'schedule' => new ScheduleResource($schedule),
|
|
]);
|
|
}
|
|
|
|
public function update(UpdateScheduleRequest $request, Carbon $date): JsonResponse
|
|
{
|
|
/** @var Planner $planner */
|
|
$planner = auth()->user();
|
|
|
|
/** @var ScheduleRepository $scheduleRepository */
|
|
$scheduleRepository = resolve(ScheduleRepository::class);
|
|
$schedule = $scheduleRepository->findOrCreate($planner, $date);
|
|
|
|
Gate::authorize('update', $schedule);
|
|
|
|
resolve(UpdateScheduleAction::class)->execute(
|
|
schedule: $schedule,
|
|
isSkipped: $request->is_skipped
|
|
);
|
|
|
|
return $this->success([
|
|
'schedule' => new ScheduleResource($schedule->refresh()),
|
|
]);
|
|
}
|
|
|
|
public function generate(GenerateScheduleRequest $request): JsonResponse
|
|
{
|
|
/** @var Planner $planner */
|
|
$planner = auth()->user();
|
|
|
|
(new GenerateScheduleForPeriodAction)->execute($planner, $request->get('overwrite', false));
|
|
|
|
return $this->success(null);
|
|
}
|
|
}
|