using System.Text.Json;
using Yitter.IdGenerator;
namespace Admin.NET.Plugin.AiDOP.Supply;
///
/// S3 业务操作日志写入(复用 Admin.NET sys_log_op)。
///
public class S3OperationLogService : ITransient
{
private readonly SqlSugarRepository _logOpRep;
private readonly UserManager _userManager;
public S3OperationLogService(SqlSugarRepository logOpRep, UserManager userManager)
{
_logOpRep = logOpRep;
_userManager = userManager;
}
///
/// 写入 S3 操作日志;失败不影响主业务流程。
///
public async Task WriteAsync(S3OperationLogDto dto)
{
try
{
await _logOpRep.InsertAsync(new SysLogOp
{
Id = YitIdHelper.NextId(),
DisplayTitle = dto.DisplayTitle,
ControllerName = "S3",
ActionName = dto.Action,
Message = dto.Message,
RequestParam = dto.Request == null ? null : JsonSerializer.Serialize(dto.Request),
ReturnResult = dto.Result == null ? null : JsonSerializer.Serialize(dto.Result),
Exception = dto.Exception,
LogDateTime = DateTime.Now,
Account = _userManager.Account,
RealName = _userManager.RealName,
CreateUserId = _userManager.UserId,
TenantId = _userManager.TenantId,
Status = dto.Success ? "200" : "500",
LogLevel = dto.Success ? Microsoft.Extensions.Logging.LogLevel.Information : Microsoft.Extensions.Logging.LogLevel.Error,
});
}
catch
{
// 日志失败不应影响 S3 业务动作。
}
}
}
public sealed class S3OperationLogDto
{
public string Action { get; set; } = string.Empty;
public string DisplayTitle { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
public object? Request { get; set; }
public object? Result { get; set; }
public string? Exception { get; set; }
public bool Success { get; set; } = true;
}