feat: Token 支持请求日志开关并记录 OpenAPI 请求日志

新增 Token 的 IsEnableLog 字段,贯穿领域、应用与 DTO;在 OpenApiService 中根据 Token 配置异步记录请求日志,包含请求体、模型与接口类型,用于后续审计与分析。
This commit is contained in:
ccnetcore
2026-02-12 17:36:31 +08:00
parent d463053c16
commit d4d89b989c
8 changed files with 160 additions and 3 deletions

View File

@@ -0,0 +1,49 @@
using SqlSugar;
using Volo.Abp.Domain.Entities;
using Yi.Framework.AiHub.Domain.Shared.Enums;
namespace Yi.Framework.AiHub.Domain.Entities.OpenApi;
[SugarTable("Ai_Message_Log")]
public class MessageLogAggregateRoot : Entity<Guid>
{
/// <summary>
/// 请求内容httpbody
/// </summary>
[SugarColumn(ColumnDataType = "text")]
public string? RequestBody { get; set; }
/// <summary>
/// 请求apikey
/// </summary>
[SugarColumn(Length = 255)]
public string ApiKey { get; set; }
/// <summary>
/// 请求apikey名称
/// </summary>
[SugarColumn(Length = 255)]
public string ApiKeyName { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; }
/// <summary>
/// 模型id
/// </summary>
[SugarColumn(Length = 64)]
public string ModelId { get; set; }
/// <summary>
/// api类型
/// </summary>
public ModelApiTypeEnum ApiType { get; set; }
/// <summary>
/// api类型名称
/// </summary>
[SugarColumn(Length = 16)]
public string ApiTypeName { get; set; }
}

View File

@@ -51,6 +51,11 @@ public class TokenAggregateRoot : FullAuditedAggregateRoot<Guid>
/// </summary>
public bool IsDisabled { get; set; }
/// <summary>
/// 是否启用请求日志记录(仅数据库手动修改)
/// </summary>
public bool IsEnableLog { get; set; }
/// <summary>
/// 检查Token是否可用
/// </summary>

View File

@@ -0,0 +1,34 @@
using Volo.Abp.Domain.Services;
using Yi.Framework.AiHub.Domain.Entities.OpenApi;
using Yi.Framework.AiHub.Domain.Shared.Enums;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.AiHub.Domain.Managers;
public class MessageLogManager : DomainService
{
private readonly ISqlSugarRepository<MessageLogAggregateRoot> _repository;
public MessageLogManager(ISqlSugarRepository<MessageLogAggregateRoot> repository)
{
_repository = repository;
}
/// <summary>
/// 创建消息日志
/// </summary>
public async Task CreateAsync(string requestBody, string apiKey, string apiKeyName, string modelId, ModelApiTypeEnum apiType)
{
var entity = new MessageLogAggregateRoot
{
RequestBody = requestBody,
ApiKey = apiKey,
ApiKeyName = apiKeyName,
ModelId = modelId,
ApiType = apiType,
ApiTypeName = apiType.ToString(),
CreationTime = DateTime.Now
};
await _repository.InsertAsync(entity);
}
}

View File

@@ -27,6 +27,16 @@ public class TokenValidationResult
/// token
/// </summary>
public string Token { get; set; }
/// <summary>
/// Token名称
/// </summary>
public string TokenName { get; set; }
/// <summary>
/// 是否启用请求日志记录
/// </summary>
public bool IsEnableLog { get; set; }
}
public class TokenManager : DomainService
@@ -117,7 +127,9 @@ public class TokenManager : DomainService
{
UserId = entity.UserId,
TokenId = entity.Id,
Token = entity.Token
Token = entity.Token,
TokenName = entity.Name,
IsEnableLog = entity.IsEnableLog
};
}