New_Micro_Learning/backend/app/Modules/LearningPaths/Domain/LearningPathVersion.php

46 خطوط
1.6 KiB
PHP

<?php
namespace App\Modules\LearningPaths\Domain;
use App\Modules\Courses\Domain\Enums\CourseVersionStatus;
use DomainException;
use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class LearningPathVersion extends Model
{
use HasUlids;
protected $fillable = ['organization_id', 'learning_path_id', 'source_version_id', 'version_number', 'status', 'title', 'description', 'settings', 'review_submitted_at', 'published_at', 'scheduled_publish_at', 'scheduled_unpublish_at', 'unpublished_at'];
protected function casts(): array
{
return [
'status' => CourseVersionStatus::class, 'settings' => 'array',
'review_submitted_at' => 'immutable_datetime', 'published_at' => 'immutable_datetime',
'scheduled_publish_at' => 'immutable_datetime', 'scheduled_unpublish_at' => 'immutable_datetime', 'unpublished_at' => 'immutable_datetime',
];
}
protected static function booted(): void
{
static::updating(function (self $version) {
if ($version->getOriginal('status') === CourseVersionStatus::Published->value) {
throw new DomainException('Published learning path versions are immutable.');
}
});
}
public function path(): BelongsTo
{
return $this->belongsTo(LearningPath::class, 'learning_path_id');
}
public function items(): HasMany
{
return $this->hasMany(LearningPathItem::class)->orderBy('position');
}
}