using PnvPanel.Domain.Common; namespace PnvPanel.Domain.Media; /// /// Картинка, загруженная админом для вставки в markdown (инструкции, новости). StoredFileName — /// серверное имя на диске (GUID-based), FileName — оригинальное имя только для отображения /// (не участвует в построении пути — не доверяем пользовательскому вводу для файловой системы). /// Отдаётся анонимно по непрозрачному Id: markdown рендерится обычным <img>, который не шлёт JWT. /// public sealed class MediaImage : Entity { public string FileName { get; private set; } = string.Empty; public string StoredFileName { get; private set; } = string.Empty; public string ContentType { get; private set; } = string.Empty; public long SizeBytes { get; private set; } public Guid UploadedBy { get; private set; } public DateTimeOffset CreatedAt { get; private set; } private MediaImage() { } public static MediaImage Create( string fileName, string storedFileName, string contentType, long sizeBytes, Guid uploadedBy ) { return new MediaImage { Id = Guid.NewGuid(), FileName = fileName, StoredFileName = storedFileName, ContentType = contentType, SizeBytes = sizeBytes, UploadedBy = uploadedBy, CreatedAt = DateTimeOffset.UtcNow, }; } }