Files
Backend-Api/ProgramManager/src/Application/GozareshgirProgramManager.Application/Services/FileManagement/IFileUploadService.cs

70 lines
2.3 KiB
C#

using GozareshgirProgramManager.Domain.FileManagementAgg.Enums;
using Microsoft.AspNetCore.Http;
namespace GozareshgirProgramManager.Application.Services.FileManagement;
/// <summary>
/// سرویس آپلود و مدیریت کامل فایل
/// این سرویس تمام مراحل آپلود، ذخیره، تولید thumbnail و... را انجام می‌دهد
/// </summary>
public interface IFileUploadService
{
/// <summary>
/// آپلود فایل با تمام مراحل پردازش
/// </summary>
/// <param name="file">فایل برای آپلود</param>
/// <param name="category">دسته‌بندی فایل</param>
/// <param name="uploadedByUserId">شناسه کاربر آپلودکننده</param>
/// <param name="maxFileSizeBytes">حداکثر حجم مجاز فایل (پیش‌فرض: 100MB)</param>
/// <returns>شناسه فایل آپلود شده یا null در صورت خطا</returns>
Task<FileUploadResult> UploadFileAsync(
IFormFile file,
FileCategory category,
long uploadedByUserId,
long maxFileSizeBytes = 100 * 1024 * 1024);
/// <summary>
/// آپلود فایل با Stream
/// </summary>
Task<FileUploadResult> UploadFileFromStreamAsync(
Stream fileStream,
string fileName,
string contentType,
FileCategory category,
long uploadedByUserId,
long maxFileSizeBytes = 100 * 1024 * 1024);
}
/// <summary>
/// نتیجه عملیات آپلود فایل
/// </summary>
public class FileUploadResult
{
public bool IsSuccess { get; set; }
public Guid? FileId { get; set; }
public string? ErrorMessage { get; set; }
public string? StorageUrl { get; set; }
public string? ThumbnailUrl { get; set; }
public static FileUploadResult Success(Guid fileId, string storageUrl, string? thumbnailUrl = null)
{
return new FileUploadResult
{
IsSuccess = true,
FileId = fileId,
StorageUrl = storageUrl,
ThumbnailUrl = thumbnailUrl
};
}
public static FileUploadResult Failed(string errorMessage)
{
return new FileUploadResult
{
IsSuccess = false,
ErrorMessage = errorMessage
};
}
}