where('partner_agreement_id', $partnerAgreementId) ->orderBy('name') ->get(); } public function findById(int $id): ?PartnerAgreementService { return PartnerAgreementService::with(['partnerAgreement', 'category', 'media'])->find($id); } public function create(array $data): PartnerAgreementService { $data = $this->enforceSchedulingRule($data); return PartnerAgreementService::create($data); } public function update(int $id, array $data): ?PartnerAgreementService { $model = PartnerAgreementService::find($id); if (!$model) { return null; } $data = $this->enforceSchedulingRule($data, $model->partner_agreement_id); $model->update($data); return $model->fresh(['category', 'media']); } private function enforceSchedulingRule(array $data, ?int $partnerAgreementId = null): array { $paId = $partnerAgreementId ?? ($data['partner_agreement_id'] ?? null); if ($paId) { $type = PartnerAgreement::where('id', $paId)->value('type'); if ($type === PartnerAgreementTypeEnum::PARTNER->value || $type === 'partner') { $data['requires_scheduling'] = false; } } return $data; } public function delete(int $id): bool { $model = PartnerAgreementService::find($id); if (!$model) { return false; } return $model->delete(); } }