ExistSubSchedule()->orderBy('name')->paginate(10)); $filters = [ 'search' => request()->input('search'), ]; return Inertia::render('AdminPanel/Schedules/Index', compact('schedules', 'filters')); } public function create() { $faculties = FacultyResource::collection(Faculty::all()); return Inertia::render('AdminPanel/Schedules/Create', compact('faculties')); } public function store(StoreRequest $request) { $data = $request->validated(); $this->storeSchedules($request->file('files'), $data); return redirect()->route('admin.index'); } public function show(Schedule $schedule) { $schedule = new ScheduleResource($schedule); return Inertia::render('AdminPanel/Schedules/Show', compact('schedule')); } public function destroy(Schedule $schedule) { $schedule->delete(); } private function storeSchedules($files, $data) { foreach ($files as $file) { $scheduleTitle = $this->generateScheduleTitle($file); $schedule = $this->storeSchedule($scheduleTitle, $data); $this->storeSubSchedule($file, $schedule); } } private function generateScheduleTitle($file) { $str = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME); $words = explode(' ', $str); return implode(' ', array_slice($words, 0, 2)); } private function storeSchedule($title, $data) { return Schedule::firstOrCreate([ 'name' => $title, 'faculty_id' => $data['faculty_id'], 'is_fullTime' => $data['is_fullTime'], ]); } private function storeSubSchedule($file, $schedule) { $path = Storage::disk('public')->putFileAs('/schedules', $file, $file->getClientOriginalName()); SubSchedule::updateOrCreate([ 'name' => pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME), 'path_file' => '/storage/'.$path, 'schedule_id' => $schedule->id, ]); } }