feat: 登录日志独立存储 (#161)

请求日志自动分表
[skip ci]

Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
2024-07-26 17:46:56 +08:00
committed by GitHub
parent e1bea2ec31
commit faaf5aa0fc
74 changed files with 1501 additions and 470 deletions

View File

@@ -50,29 +50,34 @@ public sealed record DynamicFilterInfo : DataAbstraction
}
}
if (d?.Operator != DynamicFilterOperator.DateRange) {
return;
if (new[] { nameof(IFieldCreatedClientIp.CreatedClientIp), nameof(IFieldModifiedClientIp.ModifiedClientIp) }
.Contains(d?.Field, StringComparer.OrdinalIgnoreCase)) {
var val = d!.Value?.ToString();
if (val?.IsIpV4() == true) {
d.Value = val.IpV4ToInt32();
}
}
else if (d?.Operator == DynamicFilterOperator.DateRange) {
var values = ((JsonElement)d.Value).Deserialize<string[]>();
if (!DateTime.TryParse(values[0], CultureInfo.InvariantCulture, out _)) {
var result = values[0]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
values[0] = $"{result:yyyy-MM-dd HH:mm:ss}";
}
var values = ((JsonElement)d.Value).Deserialize<string[]>();
if (!DateTime.TryParse(values[0], CultureInfo.InvariantCulture, out _)) {
var result = values[0]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
values[0] = $"{result:yyyy-MM-dd HH:mm:ss}";
if (!DateTime.TryParse(values[1], CultureInfo.InvariantCulture, out _)) {
var result = values[1]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
values[1] = $"{result:yyyy-MM-dd HH:mm:ss}";
}
d.Value = values;
}
if (!DateTime.TryParse(values[1], CultureInfo.InvariantCulture, out _)) {
var result = values[1]
.ExecuteCSharpCodeAsync<DateTime>([typeof(DateTime).Assembly], nameof(System))
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
values[1] = $"{result:yyyy-MM-dd HH:mm:ss}";
}
d.Value = values;
}
}

View File

@@ -10,26 +10,26 @@ public record ExportApiRsp : QueryApiRsp
public override IEnumerable<QueryApiRsp> Children { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.接口路径))]
public override string Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.请求方式))]
public override string Method { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.接口名称))]
public override string Name { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.接口描述))]
public override string Summary { get; init; }
}

View File

@@ -27,6 +27,10 @@ public record QueryApiRsp : Sys_Api
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ParentId { get; init; }
/// <inheritdoc cref="Sys_Api.PathCrc32" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int PathCrc32 { get; init; }
/// <inheritdoc cref="IFieldSummary.Summary" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Summary { get; init; }

View File

@@ -6,7 +6,7 @@ namespace NetAdmin.Domain.Dto.Sys.Cache;
public sealed record GetAllEntriesReq : DataAbstraction
{
/// <summary>
/// 数据库索引号
/// 关键词
/// </summary>
public int DbIndex { get; init; }
public string Keywords { get; init; }
}

View File

@@ -1,55 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 响应:获取所有缓存项
/// </summary>
public sealed record GetAllEntriesRsp : DataAbstraction
{
/// <summary>
/// Initializes a new instance of the <see cref="GetAllEntriesRsp" /> class.
/// </summary>
public GetAllEntriesRsp() { }
/// <summary>
/// Initializes a new instance of the <see cref="GetAllEntriesRsp" /> class.
/// </summary>
public GetAllEntriesRsp(long absExp, string key, long sldExp, string data)
{
AbsExp = absExp;
Key = key;
SldExp = sldExp;
Data = data;
}
/// <summary>
/// 绝对过期时间
/// </summary>
public DateTime? AbsExpTime => AbsExp == -1 ? null : DateTime.FromBinary(AbsExp).ToLocalTime();
/// <summary>
/// 滑动过期时间
/// </summary>
public DateTime? SldExpTime => SldExp == -1 ? null : DateTime.FromBinary(SldExp).ToLocalTime();
/// <summary>
/// 绝对过期时间
/// </summary>
[JsonInclude]
public long AbsExp { get; init; }
/// <summary>
/// 缓存值
/// </summary>
public string Data { get; init; }
/// <summary>
/// 缓存键
/// </summary>
public string Key { get; init; }
/// <summary>
/// 滑动过期时间
/// </summary>
[JsonInclude]
public long SldExp { get; init; }
}

View File

@@ -0,0 +1,12 @@
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 请求:获取缓存项
/// </summary>
public sealed record GetEntriesReq : DataAbstraction
{
/// <summary>
/// 缓存键
/// </summary>
public string Key { get; init; }
}

View File

@@ -0,0 +1,34 @@
using StackExchange.Redis;
namespace NetAdmin.Domain.Dto.Sys.Cache;
/// <summary>
/// 响应:获取所有缓存项
/// </summary>
public sealed record GetEntryRsp : DataAbstraction
{
/// <summary>
/// Initializes a new instance of the <see cref="GetEntryRsp" /> class.
/// </summary>
public GetEntryRsp() { }
/// <summary>
/// 缓存值
/// </summary>
public string Data { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime? ExpireTime { get; init; }
/// <summary>
/// 缓存键
/// </summary>
public string Key { get; init; }
/// <summary>
/// 数据类型
/// </summary>
public RedisType Type { get; init; }
}

View File

@@ -9,20 +9,20 @@ namespace NetAdmin.Domain.Dto.Sys.Config;
public record ExportConfigRsp : QueryConfigRsp, IRegister
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.是否启用))]
public override bool Enabled { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.人工审核))]
public override bool UserRegisterConfirm { get; init; }
@@ -33,8 +33,8 @@ public record ExportConfigRsp : QueryConfigRsp, IRegister
/// <summary>
/// 默认部门
/// </summary>
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.默认部门))]
public string UserRegisterDeptName { get; init; }
@@ -45,8 +45,8 @@ public record ExportConfigRsp : QueryConfigRsp, IRegister
/// <summary>
/// 默认角色
/// </summary>
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.默认角色))]
public string UserRegisterRoleName { get; init; }

View File

@@ -10,38 +10,38 @@ public record ExportDeptRsp : QueryDeptRsp
public override IEnumerable<QueryDeptRsp> Children { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.是否启用))]
public override bool Enabled { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.部门名称))]
public override string Name { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.排序))]
public override long Sort { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.备注))]
public override string Summary { get; init; }
}

View File

@@ -6,20 +6,20 @@ namespace NetAdmin.Domain.Dto.Sys.Dic.Content;
public record ExportDicContentRsp : QueryDicContentRsp
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.项名))]
public override string Key { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.项值))]
public override string Value { get; init; }
}

View File

@@ -10,68 +10,68 @@ namespace NetAdmin.Domain.Dto.Sys.Job;
public record ExportJobRsp : QueryJobRsp
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.上次执行状态))]
public override string LastStatusCode => base.LastStatusCode;
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(10)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(9)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.是否启用))]
public override bool Enabled { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.执行计划))]
public override string ExecutionCron { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.请求方式))]
public override HttpMethods HttpMethod { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.作业名称))]
public override string JobName { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(7)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.上次执行耗时))]
public override long? LastDuration { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.上次执行时间))]
public override DateTime? LastExecTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(8)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.下次执行时间))]
public override DateTime? NextExecTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.作业状态))]
public override JobStatues Status { get; init; }

View File

@@ -8,26 +8,26 @@ namespace NetAdmin.Domain.Dto.Sys.JobRecord;
public record ExportJobRecordRsp : QueryJobRecordRsp, IRegister
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.响应状态码))]
public override string HttpStatusCode => base.HttpStatusCode;
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.执行耗时))]
public override long Duration { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
@@ -38,14 +38,14 @@ public record ExportJobRecordRsp : QueryJobRecordRsp, IRegister
/// <summary>
/// 作业名称
/// </summary>
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.作业名称))]
public string JobName { get; set; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.响应体))]
public override string ResponseBody { get; init; }

View File

@@ -0,0 +1,50 @@
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.Dto.Sys.RequestLog;
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.LoginLog;
/// <summary>
/// 请求:创建登录日志
/// </summary>
public record CreateLoginLogReq : Sys_LoginLog, IRegister
{
/// <inheritdoc />
public void Register(TypeAdapterConfig config)
{
_ = config.ForType<CreateRequestLogReq, CreateLoginLogReq>().MapWith(x => Convert(x));
}
private static CreateLoginLogReq Convert(CreateRequestLogReq s)
{
var body = s.Detail.ResponseBody.ToObject<RestfulInfo<LoginRsp>>();
ContextUserToken userToken = null;
if (body.Data?.AccessToken != null) {
try {
userToken = ContextUserToken.Create(body.Data.AccessToken);
}
catch {
// ignored
}
}
return new CreateLoginLogReq {
Id = s.Id
, CreatedClientIp = s.CreatedClientIp
, CreatedTime = s.CreatedTime
, Duration = s.Duration
, HttpStatusCode = s.HttpStatusCode
, ErrorCode = s.Detail.ErrorCode
, RequestBody = s.Detail.RequestBody
, RequestHeaders = s.Detail.RequestHeaders
, RequestUrl = s.Detail.RequestUrl
, ResponseBody = s.Detail.ResponseBody
, ResponseHeaders = s.Detail.ResponseHeaders
, ServerIp = s.Detail.ServerIp
, CreatedUserAgent = s.Detail.CreatedUserAgent
, OwnerId = userToken?.Id
, OwnerDeptId = userToken?.DeptId
, LoginUserName = s.Detail.RequestBody?.ToObject<LoginByPwdReq>()?.Account
};
}
}

View File

@@ -0,0 +1,55 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.LoginLog;
/// <summary>
/// 响应:导出登录日志
/// </summary>
public sealed record ExportLoginLogRsp : QueryLoginLogRsp
{
/// <inheritdoc />
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.客户端IP))]
public override string CreatedClientIp => base.CreatedClientIp;
/// <inheritdoc />
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.操作系统))]
public override string Os => base.Os;
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.用户代理))]
public override string CreatedUserAgent { get; init; }
/// <inheritdoc />
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.响应状态码))]
public override int HttpStatusCode { get; init; }
/// <inheritdoc />
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvName(nameof(Ln.登录名))]
public override string LoginUserName { get; init; }
/// <inheritdoc />
[CsvIgnore]
public override QueryUserRsp Owner { get; init; }
}

View File

@@ -0,0 +1,11 @@
namespace NetAdmin.Domain.Dto.Sys.LoginLog;
/// <summary>
/// 请求:查询登录日志
/// </summary>
public sealed record QueryLoginLogReq : Sys_LoginLog
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@@ -0,0 +1,77 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.LoginLog;
/// <summary>
/// 响应:查询登录日志
/// </summary>
public record QueryLoginLogRsp : Sys_LoginLog
{
/// <summary>
/// 创建者客户端IP
/// </summary>
[JsonInclude]
public new virtual string CreatedClientIp => base.CreatedClientIp?.ToIpV4();
/// <summary>
/// 操作系统
/// </summary>
[JsonInclude]
public virtual string Os => UserAgentParser.Create(CreatedUserAgent)?.Platform;
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc cref="IFieldCreatedClientUserAgent.CreatedUserAgent" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string CreatedUserAgent { get; init; }
/// <inheritdoc cref="Sys_LoginLog.Duration" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int Duration { get; init; }
/// <inheritdoc cref="Sys_LoginLog.ErrorCode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override ErrorCodes ErrorCode { get; init; }
/// <inheritdoc cref="Sys_LoginLog.HttpStatusCode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int HttpStatusCode { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="Sys_LoginLog.LoginUserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string LoginUserName { get; init; }
/// <inheritdoc cref="Sys_LoginLog.Owner" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="Sys_LoginLog.RequestBody" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RequestBody { get; init; }
/// <inheritdoc cref="Sys_LoginLog.RequestHeaders" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RequestHeaders { get; init; }
/// <inheritdoc cref="Sys_LoginLog.RequestUrl" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RequestUrl { get; init; }
/// <inheritdoc cref="Sys_LoginLog.ResponseBody" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ResponseBody { get; init; }
/// <inheritdoc cref="Sys_LoginLog.ResponseHeaders" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ResponseHeaders { get; init; }
/// <inheritdoc cref="Sys_LoginLog.ServerIp" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override int? ServerIp { get; init; }
}

View File

@@ -14,13 +14,13 @@ public record ExportRequestLogRsp : QueryRequestLogRsp
/// 接口路径
/// </summary>
[CsvIndex(2)]
[CsvName(nameof(Ln.接口路径))]
[JsonInclude]
[CsvName(nameof(Ln.接口路径))]
public string ApiId => Api.Id;
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.客户端IP))]
public override string CreatedClientIp => base.CreatedClientIp;
@@ -28,8 +28,8 @@ public record ExportRequestLogRsp : QueryRequestLogRsp
/// 用户名
/// </summary>
[CsvIndex(5)]
[CsvName(nameof(Ln.用户名))]
[JsonInclude]
[CsvName(nameof(Ln.用户名))]
public string UserName => Owner?.UserName;
/// <inheritdoc />
@@ -37,7 +37,9 @@ public record ExportRequestLogRsp : QueryRequestLogRsp
public override QueryApiRsp Api { get; init; }
/// <inheritdoc />
[CsvIgnore]
[CsvIgnore(false)]
[CsvIndex(8)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
@@ -45,38 +47,36 @@ public record ExportRequestLogRsp : QueryRequestLogRsp
public override QueryRequestLogDetailRsp Detail { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.执行耗时))]
public override int Duration { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.请求方式))]
public override HttpMethods HttpMethod { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.响应状态码))]
public override int HttpStatusCode { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore]
public override QueryUserLiteRsp Owner { get; init; }
public override QueryUserRsp Owner { get; init; }
/// <inheritdoc />
[CsvIgnore]
public override long? OwnerDeptId { get; init; }
/// <inheritdoc />
[CsvIgnore]
public override long? OwnerId { get; init; }
[CsvIndex(7)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.跟踪标识))]
public override Guid TraceId { get; init; }
}

View File

@@ -3,4 +3,9 @@ namespace NetAdmin.Domain.Dto.Sys.RequestLog;
/// <summary>
/// 请求:查询请求日志
/// </summary>
public sealed record QueryRequestLogReq : Sys_RequestLog;
public sealed record QueryRequestLogReq : Sys_RequestLog
{
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
}

View File

@@ -46,9 +46,13 @@ public record QueryRequestLogRsp : Sys_RequestLog
/// <inheritdoc cref="Sys_RequestLog.Owner" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public new virtual QueryUserLiteRsp Owner { get; init; }
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerId { get; init; }
/// <inheritdoc cref="Sys_RequestLog.TraceId" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Guid TraceId { get; init; }
}

View File

@@ -66,8 +66,4 @@ public sealed record QueryRequestLogDetailRsp : Sys_RequestLogDetail
/// <inheritdoc cref="Sys_RequestLogDetail.ServerIp" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override int? ServerIp { get; init; }
/// <inheritdoc cref="Sys_RequestLogDetail.TraceId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string TraceId { get; init; }
}

View File

@@ -8,50 +8,50 @@ namespace NetAdmin.Domain.Dto.Sys.Role;
public sealed record ExportRoleRsp : QueryRoleRsp
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(7)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.数据范围))]
public override DataScopes DataScope { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.显示仪表板))]
public override bool DisplayDashboard { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.是否启用))]
public override bool Enabled { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.无限权限))]
public override bool IgnorePermissionControl { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.角色名称))]
public override string Name { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.排序))]
public override long Sort { get; init; }
}

View File

@@ -11,14 +11,14 @@ namespace NetAdmin.Domain.Dto.Sys.SiteMsg;
public record ExportSiteMsgRsp : QuerySiteMsgRsp
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(5)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.用户名))]
public override string CreatedUserName { get; init; }
@@ -27,14 +27,14 @@ public record ExportSiteMsgRsp : QuerySiteMsgRsp
public override IEnumerable<QueryDeptRsp> Depts { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.消息类型))]
public override SiteMsgTypes MsgType { get; init; }
@@ -43,14 +43,14 @@ public record ExportSiteMsgRsp : QuerySiteMsgRsp
public override IEnumerable<QueryRoleRsp> Roles { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(4)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.消息摘要))]
public override string Summary { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.消息主题))]
public override string Title { get; init; }

View File

@@ -9,8 +9,8 @@ namespace NetAdmin.Domain.Dto.Sys.User;
public record ExportUserRsp : QueryUserRsp
{
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(7)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.创建时间))]
public override DateTime CreatedTime { get; init; }
@@ -26,26 +26,26 @@ public record ExportUserRsp : QueryUserRsp
public string DeptName { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(3)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.邮箱号))]
public override string Email { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(6)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.是否启用))]
public override bool Enabled { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(0)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.唯一编码))]
public override long Id { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(2)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.手机号))]
public override string Mobile { get; init; }
@@ -61,8 +61,8 @@ public record ExportUserRsp : QueryUserRsp
public override IEnumerable<QueryRoleRsp> Roles { get; init; }
/// <inheritdoc />
[CsvIgnore(false)]
[CsvIndex(1)]
[CsvIgnore(false)]
[CsvName(nameof(Ln.用户名))]
public override string UserName { get; init; }

View File

@@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.User;
/// <summary>
/// 响应:查询用户精简版
/// </summary>
public record QueryUserLiteRsp : Sys_User
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="Sys_User.UserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string UserName { get; init; }
}