$rawData['nama_program_studi'], 'code' => $rawData['kode_program_studi'], 'level' => $rawData['nama_jenjang_pendidikan'], 'faculty_id' => self::resolveFacultyId($rawData['id_fakultas']), 'external_id' => $rawData['id_prodi'], ]; } public function updateOrCreateDomainState(array $payload, ?Model $existingModel = null): void { /** @var StudyProgram $studyProgram */ $studyProgram = $existingModel; if ($studyProgram) { $this->adjustStudyProgramDetails->execute($studyProgram, new AdjustStudyProgramDTO( level: $payload['level'], status: LifecycleStatus::ACTIVE, )); } else { $this->registerStudyProgram->execute(new RegisterStudyProgramDTO( name: $payload['name'], code: $payload['code'], level: $payload['level'], status: LifecycleStatus::ACTIVE, facultyId: $payload['faculty_id'], externalId: $payload['external_id'], )); } } /** * @return class-string */ public function getModelClass(): string { return StudyProgram::class; } private function resolveFacultyId(string $externalId): int { if (!isset(self::$facultyCache[$externalId])) { self::$facultyCache[$externalId] = Faculty::where('external_id', $externalId)->first()->id; } return self::$facultyCache[$externalId]; } }