orderBy('date', 'desc') ->get(); } public function getAllByUser(int $userId): Collection { return Appointment::with(['partnerAgreement', 'partnerAgreementService']) ->where('user_id', $userId) ->orderBy('date', 'desc') ->get(); } public function findById(int $id): ?Appointment { return Appointment::with(['user', 'partnerAgreement', 'partnerAgreementService'])->find($id); } public function create(array $data): Appointment { $data['order_number'] = $this->generateOrderNumber(); $data['requested_at'] = now(); return Appointment::create($data); } public function update(int $id, array $data): ?Appointment { $model = Appointment::find($id); if (!$model) { return null; } $model->update($data); return $model->fresh(['user', 'partnerAgreement', 'partnerAgreementService']); } public function delete(int $id): bool { $model = Appointment::find($id); if (!$model) { return false; } return $model->delete(); } private function generateOrderNumber(): string { do { $number = 'AGD-' . strtoupper(Str::random(8)); } while (Appointment::where('order_number', $number)->exists()); return $number; } }