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); } }