'datetime', 'upload_end_at' => 'datetime', 'is_active' => 'boolean', 'require_password' => 'boolean', 'allowed_extensions' => 'array', ]; } public function getAllowedExtensionsAttribute($value): array { $decoded = $value ? json_decode($value, true) : null; return is_array($decoded) ? $decoded : ['mp4', 'mov', 'avi', 'mkv', 'webm']; } public function getHasPasswordAttribute(): bool { return ! empty($this->attributes['upload_password'] ?? null); } public function setUploadPasswordAttribute(?string $value): void { $this->attributes['upload_password'] = $value ? Hash::make($value) : null; } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function uploads(): HasMany { return $this->hasMany(Upload::class); } }