/
DATKAI
/
ITCUP
Обзор
Документация
Войти
/
DATKAI
/
ITCUP
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
app/Models/AssetBackup.php
77 строк
2 KB
ITCUP Admin
feat(assets): менеджер бэкапов конфигураций для категорий оборудования
21 апр 2026, 21:53
21 апр 2026, 21:53
33e5814
Код
Авторство
О чём код?
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\Storage; class AssetBackup extends Model { protected $fillable = [ 'asset_id', 'type', 'status', 'file_path', 'original_filename', 'file_size', 'triggered_by', 'error_message', 'started_at', 'finished_at', ]; protected $casts = [ 'file_size' => 'integer', 'started_at' => 'datetime', 'finished_at' => 'datetime', ]; public const TYPES = [ 'http' => 'HTTP GET', 'sftp' => 'SFTP', 'ssh' => 'SSH (команда)', 'manual' => 'Ручная загрузка', ]; public const STATUSES = [ 'pending' => 'В очереди', 'running' => 'Выполняется', 'success' => 'Успешно', 'failed' => 'Ошибка', ]; public const STATUS_COLORS = [ 'pending' => 'gray', 'running' => 'info', 'success' => 'success', 'failed' => 'danger', ]; protected static function booted(): void { static::deleting(function (AssetBackup $b) { if ($b->file_path && Storage::disk('local')->exists($b->file_path)) { Storage::disk('local')->delete($b->file_path); } }); } public function asset(): BelongsTo { return $this->belongsTo(Asset::class); } public function triggeredBy(): BelongsTo { return $this->belongsTo(User::class, 'triggered_by'); } public function getDurationAttribute(): ?int { if (!$this->started_at || !$this->finished_at) { return null; } return $this->started_at->diffInSeconds($this->finished_at); } }