namespace CMSMicroservice.Application.Common.FileManager; /// /// سرویس مدیریت فایل — ذخیره روی دیسک، مسیر نسبی در دیتابیس /// موقع واکشی: خواندن از دیسک و تبدیل به base64 data-URI /// public interface IFileManager { /// /// آپلود یک فایل خام به دیسک /// /// نتیجه آپلود شامل مسیر نسبی فایل /// در صورت خطای آپلود Task UploadAsync( string directory, byte[] fileBytes, string mime, string? fileName = null, CancellationToken ct = default); /// /// آپلود تصویر با بهینه‌سازی خودکار + ساخت بندانگشتی /// /// نتیجه آپلود شامل تصویر اصلی و بندانگشتی (مسیرهای نسبی) /// در صورت خطای آپلود Task UploadImageAsync( string directory, byte[] fileBytes, string mime, string? fileName = null, CancellationToken ct = default); /// /// حذف فایل از دیسک /// Task DeleteAsync(long fileId, CancellationToken ct = default); /// /// خواندن فایل از دیسک و تبدیل به base64 data-URI /// اگر مسیر از قبل data: باشد، همان را برمی‌گرداند /// اگر فایل وجود نداشته باشد، رشته خالی برمی‌گرداند /// string ResolveImageUrl(string? path); } /// /// نتیجه آپلود فایل /// /// شناسه فایل در FMS /// مسیر فایل ذخیره‌شده (مثلاً /Images/Products/abc.jpg) public sealed record UploadedFile(long Id, string Path); /// /// نتیجه آپلود تصویر — شامل تصویر اصلی و بندانگشتی /// /// تصویر اصلی بهینه‌شده /// تصویر بندانگشتی public sealed record UploadedImage(UploadedFile Main, UploadedFile Thumbnail); /// /// خطای آپلود فایل /// public class FileUploadException : Exception { public FileUploadException(string message) : base(message) { } public FileUploadException(string message, Exception inner) : base(message, inner) { } }