require(); $hours = $business->hours()->get()->keyBy('dayOfWeek'); return view('owner.hours', ['business' => $business, 'hours' => $hours, 'days' => self::DAYS]); } public function update(Request $request, TenantContext $tenant): RedirectResponse { $business = $tenant->require(); foreach (self::DAYS as $day) { $prefix = strtolower($day); $closed = $request->boolean("{$prefix}_closed"); $open = $closed ? null : $this->minutes($request->input("{$prefix}_open")); $close = $closed ? null : $this->minutes($request->input("{$prefix}_close")); if (! $closed && ($open === null || $close === null || $close <= $open)) return back()->withErrors(['hours' => "Enter valid opening hours for {$day}."])->withInput(); BusinessHours::updateOrCreate(['businessId' => $business->id, 'dayOfWeek' => $day], ['isClosed' => $closed, 'opensAtMinutes' => $open, 'closesAtMinutes' => $close]); } return back()->with('status', 'Opening hours saved.'); } private function minutes(?string $value): ?int { if (! $value || ! preg_match('/^(\d{2}):(\d{2})$/', $value, $matches)) return null; $minutes = ((int) $matches[1] * 60) + (int) $matches[2]; return $minutes >= 0 && $minutes <= 1439 ? $minutes : null; } }