46 خطوط
1.6 KiB
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');
|
|
}
|
|
}
|