MappableType::class, 'mapping_type' => MappingType::class, 'source' => MappingSource::class, 'confirmation_status' => MappingConfirmationStatus::class, 'weight' => 'decimal:4', 'confidence' => 'decimal:4', 'confirmed_at' => 'immutable_datetime', ]; } protected static function booted(): void { $assertDraftVersion = function (self $mapping): void { $version = CourseVersion::query()->findOrFail($mapping->course_version_id); if ($version->status === CourseVersionStatus::Published) { throw new DomainException('Mappings for published course versions are immutable.'); } }; static::updating($assertDraftVersion); static::deleting($assertDraftVersion); } public function courseVersion(): BelongsTo { return $this->belongsTo(CourseVersion::class); } public function taxonomyNode(): BelongsTo { return $this->belongsTo(TaxonomyNode::class); } }