diff --git a/.editorconfig b/.editorconfig index b4329669..5d072eb1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,56 +1,58 @@ +# 此文件为 EditorConfig 配置文件,用于设置跨编辑器的代码格式化规则。 +# root = true 表示此文件是根配置文件。 root = true [*] -charset = utf-8 -end_of_line = lf -ij_xml_attribute_wrap = off -ij_xml_text_wrap = off -indent_size = 4 -indent_style = space -insert_final_newline = false -trim_trailing_whitespace = true +charset = utf-8 # 文件字符集为 UTF-8 +end_of_line = lf # 行结束符为 LF +ij_xml_attribute_wrap = off # IntelliJ IDEA 中 XML 属性不换行 +ij_xml_text_wrap = off # IntelliJ IDEA 中 XML 文本不换行 +indent_size = 4 # 缩进大小为 4 个空格 +indent_style = space # 使用空格进行缩进 +insert_final_newline = false # 不在文件末尾插入空行 +trim_trailing_whitespace = true # 删除行尾的空格 [{*.json,*.yml}] -indent_size = 2 +indent_size = 2 # 对于 JSON 和 YAML 文件,缩进大小为 2 个空格 [*.cs] -dotnet_analyzer_diagnostic.severity = warning +dotnet_analyzer_diagnostic.severity = warning # 设置 C# 文件中所有 dotnet_analyzer_diagnostic 的严重性级别为 warning # ReSharper properties -resharper_align_linq_query = true -resharper_align_multiline_argument = true -resharper_align_multiline_array_and_object_initializer = true -resharper_align_multiline_binary_patterns = true -resharper_align_multiline_calls_chain = true -resharper_align_multiline_extends_list = true -resharper_align_multiline_parameter = true -resharper_align_multiline_property_pattern = true -resharper_align_multiline_switch_expression = true -resharper_align_multiple_declaration = true -resharper_align_multline_type_parameter_constrains = true -resharper_align_multline_type_parameter_list = true -resharper_align_tuple_components = true -resharper_allow_comment_after_lbrace = true -resharper_blank_lines_before_single_line_comment = 1 -resharper_csharp_empty_block_style = together_same_line -resharper_csharp_outdent_commas = true -resharper_csharp_place_type_constraints_on_same_line = false -resharper_csharp_stick_comment = false -resharper_csharp_wrap_before_comma = true -resharper_indent_nested_for_stmt = true -resharper_indent_nested_foreach_stmt = true -resharper_indent_nested_while_stmt = true -resharper_indent_preprocessor_if = usual_indent -resharper_indent_preprocessor_other = usual_indent -resharper_int_align = true -resharper_keep_existing_arrangement = false -resharper_place_linq_into_on_new_line = false -resharper_place_simple_embedded_statement_on_same_line = false -resharper_place_simple_switch_expression_on_single_line = true -resharper_wrap_before_eq = true -resharper_wrap_chained_method_calls = chop_if_long -resharper_wrap_switch_expression = chop_if_long +resharper_align_linq_query = true # 启用对LINQ查询的对齐 +resharper_align_multiline_argument = true # 启用多行参数的对齐 +resharper_align_multiline_array_and_object_initializer = true # 启用多行数组和对象初始化器的对齐 +resharper_align_multiline_binary_patterns = true # 启用多行二元模式的对齐 +resharper_align_multiline_calls_chain = true # 启用多行调用链的对齐 +resharper_align_multiline_extends_list = true # 启用多行扩展列表的对齐 +resharper_align_multiline_parameter = true # 启用多行参数的对齐 +resharper_align_multiline_property_pattern = true # 启用多行属性模式的对齐 +resharper_align_multiline_switch_expression = true # 启用多行切换表达式的对齐 +resharper_align_multiple_declaration = true # 启用多个声明的对齐 +resharper_align_multline_type_parameter_constrains = true # 启用多行类型参数约束的对齐 +resharper_align_multline_type_parameter_list = true # 启用多行类型参数列表的对齐 +resharper_align_tuple_components = true # 启用元组组件的对齐 +resharper_allow_comment_after_lbrace = true # 允许在大括号前添加注释 +resharper_blank_lines_before_single_line_comment = 1 # 在单行注释前添加空行 +resharper_csharp_empty_block_style = together_same_line # 设置空块的样式为“在一起,在同一行” +resharper_csharp_outdent_commas = true # 是否将逗号后的代码退缩 +resharper_csharp_place_type_constraints_on_same_line = false # 在类型约束上是否保持在同一行 +resharper_csharp_stick_comment = false # 是否将注释粘贴在代码行的末尾 +resharper_csharp_wrap_before_comma = true # 在逗号前是否添加换行 +resharper_indent_nested_for_stmt = true # 是否对嵌套的for语句进行缩进 +resharper_indent_nested_foreach_stmt = true # 是否对嵌套的foreach语句进行缩进 +resharper_indent_nested_while_stmt = true # 是否对嵌套的while语句进行缩进 +resharper_indent_preprocessor_if = usual_indent # 设置预处理器指令`if`的缩进方式 +resharper_indent_preprocessor_other = usual_indent # 设置其他预处理器指令的缩进方式 +resharper_int_align = true # 启用整数对齐 +resharper_keep_existing_arrangement = false # 在重新排列时是否保留现有的布局 +resharper_place_linq_into_on_new_line = false # 是否将LINQ表达式放在新行 +resharper_place_simple_embedded_statement_on_same_line = false # 是否将简单的嵌入式语句放在同一行 +resharper_place_simple_switch_expression_on_single_line = true # 是否将简单的切换表达式放在单行 +resharper_wrap_before_eq = true # 在等号前是否添加换行 +resharper_wrap_chained_method_calls = chop_if_long # 是否拆分链式方法调用 +resharper_wrap_switch_expression = chop_if_long # 是否拆分切换表达式 # Microsoft .NET properties -csharp_indent_braces = false -csharp_new_line_before_open_brace = local_functions, methods, types \ No newline at end of file +csharp_indent_braces = false # 设置为false表示花括号不跟随代码行缩进 +csharp_new_line_before_open_brace = local_functions, methods, types # 这里设置为local_functions, methods, types,表示在局部函数、方法和类型定义的开放花括号前应换行 \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 8909a44b..19a99788 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -25,7 +25,7 @@ $(AssemblyName) - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Dockerfile b/Dockerfile index 7c41d763..bb674d9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/aspnet:9.0.0-preview.1 AS base +FROM mcr.microsoft.com/dotnet/aspnet:9.0.0-preview.3 AS base WORKDIR /app EXPOSE 8080 RUN apt update diff --git a/NetAdmin.sln.DotSettings b/NetAdmin.sln.DotSettings index e6e49ef0..7463056f 100644 --- a/NetAdmin.sln.DotSettings +++ b/NetAdmin.sln.DotSettings @@ -5,6 +5,7 @@ True True True + True True True True @@ -19,10 +20,15 @@ True True True + True + True True True True True + True + True + True True True True @@ -71,12 +77,14 @@ Required Required NEVER - <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> - <Policy Inspect="True" Prefix="_" Suffix="" Style="AA_BB" /> - <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> - <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /> - + NEVER + NEVER + NEVER + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="_" Suffix="" Style="AA_BB" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Types and namespaces"><ElementKinds><Kind Name="NAMESPACE" /><Kind Name="CLASS" /><Kind Name="STRUCT" /><Kind Name="ENUM" /><Kind Name="DELEGATE" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb_AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Static readonly fields (not private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> <?xml version="1.0" encoding="utf-16"?> <Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> diff --git a/assets/res/Enums.ln b/assets/res/Enums.ln index 4d729f2b..c1fc3a55 100644 --- a/assets/res/Enums.ln +++ b/assets/res/Enums.ln @@ -84,5 +84,6 @@ 閲嶈瀵嗙爜 閾炬帴 閿欒 +闅忔満鎺掑簭 椤哄簭鎺掑簭 楂樹腑 \ No newline at end of file diff --git a/package.json b/package.json index 33d0be0f..0e5d456a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "version": "1.0.0", "devDependencies": { - "cz-git": "^1.8.0", + "cz-git": "^1.9.1", "commitizen": "^4.3.0", "prettier": "^3.2.5", "standard-version": "^9.5.0" diff --git a/scripts/2.git.release.ps1 b/scripts/2.git.release.ps1 index d437a134..b354d715 100644 --- a/scripts/2.git.release.ps1 +++ b/scripts/2.git.release.ps1 @@ -10,6 +10,7 @@ while ($null -eq $types[$prefix]) $prefix = Read-Host "璇烽夋嫨鐗堟湰绫诲瀷`n" $( & { param($i) $i | ForEach-Object { "$_ : $( $types[$_][0] )锛$( $types[$_][1] )锛塦n" } } $types.Keys | Sort-Object ) } git checkout main +git pull git branch -D release git checkout -b release ./node_modules/.bin/standard-version -r $types[$prefix][0] diff --git a/scripts/switcher.freesql.json b/scripts/switcher.freesql.json index 1218c50e..57304cfb 100644 --- a/scripts/switcher.freesql.json +++ b/scripts/switcher.freesql.json @@ -10,11 +10,11 @@ "packages": [ { "packageName": "FreeSql.NS", - "version": "3.2.802-preview20231010-ns1" + "version": "3.2.821-ns1" }, { "packageName": "FreeSql.DbContext.NS", - "version": "3.2.802-preview20231010-ns1" + "version": "3.2.821-ns1" } ] } diff --git a/scripts/switcher.furion.json b/scripts/switcher.furion.json index 5fefbbf6..b550ac82 100644 --- a/scripts/switcher.furion.json +++ b/scripts/switcher.furion.json @@ -9,7 +9,7 @@ "packages": [ { "packageName": "Furion.Pure.NS", - "version": "4.9.1.31-ns2" + "version": "4.9.2.19-ns3" } ] } diff --git a/src/backend/NetAdmin.Application/Modules/ICrudModule.cs b/src/backend/NetAdmin.Application/Modules/ICrudModule.cs index f093de83..4879b347 100644 --- a/src/backend/NetAdmin.Application/Modules/ICrudModule.cs +++ b/src/backend/NetAdmin.Application/Modules/ICrudModule.cs @@ -27,6 +27,11 @@ public interface ICrudModule Task BulkDeleteAsync(BulkReq req); + /// + /// 瀹炰綋璁℃暟 + /// + Task CountAsync(QueryReq req); + /// /// 鍒涘缓瀹炰綋 /// diff --git a/src/backend/NetAdmin.Application/Repositories/DefaultRepository.cs b/src/backend/NetAdmin.Application/Repositories/DefaultRepository.cs index 5448e130..ed65ea05 100644 --- a/src/backend/NetAdmin.Application/Repositories/DefaultRepository.cs +++ b/src/backend/NetAdmin.Application/Repositories/DefaultRepository.cs @@ -6,10 +6,7 @@ namespace NetAdmin.Application.Repositories; /// /// 榛樿浠撳偍 /// -public sealed class DefaultRepository( - IFreeSql fSql // - , UnitOfWorkManager uowManger // - , ContextUserToken userToken) // +public sealed class DefaultRepository(IFreeSql fSql, UnitOfWorkManager uowManger, ContextUserToken userToken) : DefaultRepository(fSql, uowManger) where TEntity : EntityBase { diff --git a/src/backend/NetAdmin.BizServer.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.BizServer.Host/Extensions/ServiceCollectionExtensions.cs index 11b78fe9..0ce88ece 100644 --- a/src/backend/NetAdmin.BizServer.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/NetAdmin.BizServer.Host/Extensions/ServiceCollectionExtensions.cs @@ -22,7 +22,7 @@ public static class ServiceCollectionExtensions (Startup.Args.InsertSeedData ? FreeSqlInitMethods.InsertSeedData : FreeSqlInitMethods.None), freeSql => { // 鏁版嵁鏉冮檺杩囨护鍣 _ = freeSql.GlobalFilter.ApplyOnlyIf( // - Chars.FLG_GLOBAL_FILTER_DATA + Chars.FLG_FREE_SQL_GLOBAL_FILTER_DATA , () => ContextUserInfo.Create()?.Roles.All(x => x.DataScope == DataScopes.Self) ?? false , a => a.OwnerId == ContextUserInfo.Create().Id); }); diff --git a/src/backend/NetAdmin.BizServer.Host/Startup.cs b/src/backend/NetAdmin.BizServer.Host/Startup.cs index 0d48aeb9..c677f9ae 100644 --- a/src/backend/NetAdmin.BizServer.Host/Startup.cs +++ b/src/backend/NetAdmin.BizServer.Host/Startup.cs @@ -26,17 +26,17 @@ namespace NetAdmin.BizServer.Host /// /// 閰嶇疆搴旂敤绋嬪簭涓棿浠 /// - public void Configure(IApplicationBuilder app) + public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifeTime) { - _ = app // - .UseRealIp() // 浣跨敤RealIp涓棿浠讹紝鐢ㄤ簬鑾峰彇鐪熷疄瀹㈡埛绔疘P鍦板潃 - .EnableBuffering() // 鍚敤璇锋眰浣撶紦鍐诧紝鍏佽澶氭璇诲彇璇锋眰浣 - .UseMiddleware() // 浣跨敤RequestAuditMiddleware涓棿浠讹紝鎵ц璇锋眰瀹¤ + _ = app // + .UseMiddleware() // 瀹夊叏鍋滄満涓棿浠 + .EnableBuffering() // 鍚敤璇锋眰浣撶紦鍐诧紝鍏佽澶氭璇诲彇璇锋眰浣 + .UseMiddleware() // 浣跨敤RequestAuditMiddleware涓棿浠讹紝鎵ц璇锋眰瀹¤ #if DEBUG .UseOpenApiSkin() // 浣跨敤OpenApiSkin涓棿浠讹紙浠呭湪璋冭瘯妯″紡涓嬶級锛屾彁渚汼wagger UI鐨偆 #else - .UseVueAdmin() // 鎵樼绠$悊鍚庡彴锛屼粎鍦ㄩ潪璋冭瘯妯″紡涓 - .UseHttpMetrics() // 浣跨敤HttpMetrics涓棿浠讹紝鍚敤HTTP鎬ц兘鐩戞帶 + .UseVueAdmin() // 鎵樼绠$悊鍚庡彴锛屼粎鍦ㄩ潪璋冭瘯妯″紡涓 + .UseHttpMetrics() // 浣跨敤HttpMetrics涓棿浠讹紝鍚敤HTTP鎬ц兘鐩戞帶 #endif .UseInject(string.Empty) // 浣跨敤Inject涓棿浠讹紝Furion鑴氭墜鏋剁殑渚濊禆娉ㄥ叆鏀寔 .UseUnifyResultStatusCodes() // 浣跨敤UnifyResultStatusCodes涓棿浠讹紝鐢ㄤ簬缁熶竴澶勭悊缁撴灉鐘舵佺爜 @@ -46,6 +46,7 @@ namespace NetAdmin.BizServer.Host .UseAuthorization() // 浣跨敤Authorization涓棿浠讹紝鍚敤鎺堟潈 .UseMiddleware() // 浣跨敤RemoveNullNodeMiddleware涓棿浠讹紝鍒犻櫎JSON涓殑绌鸿妭鐐 .UseEndpoints(); // 閰嶇疆绔偣浠ュ鐞嗚姹 + _ = lifeTime.ApplicationStopping.Register(SafetyShopHostMiddleware.OnStopping); } /// diff --git a/src/backend/NetAdmin.BizServer.Tests/AllTests.cs b/src/backend/NetAdmin.BizServer.Tests/AllTests.cs index 00e0ec5a..e7937639 100644 --- a/src/backend/NetAdmin.BizServer.Tests/AllTests.cs +++ b/src/backend/NetAdmin.BizServer.Tests/AllTests.cs @@ -19,8 +19,8 @@ namespace NetAdmin.BizServer.Tests; /// 鎵鏈夋祴璇 /// [SuppressMessage("Usage", "xUnit1028:Test method must have valid return type")] -public class AllTests(WebApplicationFactory factory, ITestOutputHelper testOutputHelper) : - WebApiTestBase(factory, testOutputHelper), IToolsModule, ICacheModule, IApiModule, IConfigModule +public class AllTests(WebApplicationFactory factory, ITestOutputHelper testOutputHelper) + : WebApiTestBase(factory, testOutputHelper), IToolsModule, ICacheModule, IApiModule, IConfigModule { /// @@ -38,6 +38,18 @@ public class AllTests(WebApplicationFactory factory, ITestOutputHelper return default; } + /// + public Task CountAsync(QueryReq req) + { + throw new NotImplementedException(); + } + + /// + public Task CountAsync(QueryReq req) + { + throw new NotImplementedException(); + } + /// public Task CreateAsync(CreateConfigReq req) { diff --git a/src/backend/NetAdmin.Cache/DistributedCache.cs b/src/backend/NetAdmin.Cache/DistributedCache.cs index d8ef1709..14bbb27d 100644 --- a/src/backend/NetAdmin.Cache/DistributedCache.cs +++ b/src/backend/NetAdmin.Cache/DistributedCache.cs @@ -41,7 +41,12 @@ public abstract class DistributedCache(IDistributedCache cache, TServi protected async Task GetAsync(string key) { var cacheRead = await Cache.GetStringAsync(key).ConfigureAwait(false); - return cacheRead != null ? cacheRead.ToObject() : default; + try { + return cacheRead != null ? cacheRead.ToObject() : default; + } + catch (JsonException) { + return default; + } } /// diff --git a/src/backend/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs b/src/backend/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs index e9474ec3..c1609be0 100644 --- a/src/backend/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs +++ b/src/backend/NetAdmin.Domain/Attributes/DataValidation/ChineseNameAttribute.cs @@ -10,7 +10,7 @@ public sealed class ChineseNameAttribute : RegexAttribute /// Initializes a new instance of the class. /// public ChineseNameAttribute() // - : base(Chars.RGX_CHINESE_NAME) + : base(Chars.RGXL_CHINESE_NAME) { ErrorMessageResourceName = nameof(Ln.涓枃濮撳悕); ErrorMessageResourceType = typeof(Ln); diff --git a/src/backend/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs b/src/backend/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs index e59b9a9b..38d40ca5 100644 --- a/src/backend/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs +++ b/src/backend/NetAdmin.Domain/Attributes/DataValidation/CronAttribute.cs @@ -10,7 +10,7 @@ public sealed class CronAttribute : RegexAttribute /// Initializes a new instance of the class. /// public CronAttribute() // - : base(Chars.RGX_CRON) + : base(Chars.RGXL_CRON) { ErrorMessageResourceName = nameof(Ln.鏃堕棿琛ㄨ揪寮); ErrorMessageResourceType = typeof(Ln); diff --git a/src/backend/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs b/src/backend/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs index 6717b8f6..0573aaa2 100644 --- a/src/backend/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs +++ b/src/backend/NetAdmin.Domain/Attributes/DataValidation/EmailAttribute.cs @@ -10,7 +10,7 @@ public sealed class EmailAttribute : RegexAttribute /// Initializes a new instance of the class. /// public EmailAttribute() // - : base(Chars.RGX_EMAIL) + : base(Chars.RGXL_EMAIL) { ErrorMessageResourceName = nameof(Ln.鐢靛瓙閭); ErrorMessageResourceType = typeof(Ln); diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs index 543f24c1..8ad0062d 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Api.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// Api鎺ュ彛琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Api))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Api))] public record Sys_Api : ImmutableEntity, IFieldSummary { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs index 35cc7384..a8ca3806 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Config.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 閰嶇疆琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Config))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))] public record Sys_Config : VersionEntity, IFieldEnabled { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs index 8226cef9..240dfd0a 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Dept.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 閮ㄩ棬琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Dept))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Dept))] public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs index ee326b1d..3ddeb475 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicCatalog.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瀛楀吀鐩綍琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_DicCatalog))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DicCatalog))] [Index($"idx_{{tablename}}_{nameof(Code)}", nameof(Code), true)] public record Sys_DicCatalog : VersionEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs index bfc0a2aa..bab4f2ce 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_DicContent.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瀛楀吀鍐呭琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_DicContent))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DicContent))] [Index($"idx_{{tablename}}_{nameof(CatalogId)}_{nameof(Key)}", $"{nameof(CatalogId)},{nameof(Key)}", true)] [Index($"idx_{{tablename}}_{nameof(CatalogId)}_{nameof(Value)}", $"{nameof(CatalogId)},{nameof(Value)}", true)] public record Sys_DicContent : VersionEntity diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs index 8c13c89f..76c25096 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Job.cs @@ -8,7 +8,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 璁″垝浣滀笟琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Job))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Job))] public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs index ebea51e3..ce21c0c3 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_JobRecord.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 璁″垝浣滀笟鎵ц璁板綍琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_JobRecord))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_JobRecord))] [Index($"idx_{{tablename}}_{nameof(JobId)}_{nameof(TimeId)}", $"{nameof(JobId)},{nameof(TimeId)}", true)] public record Sys_JobRecord : LiteImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs index 62eecdfa..a82961ec 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Menu.cs @@ -7,7 +7,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 鑿滃崟琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Menu))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Menu))] [Index($"idx_{{tablename}}_{nameof(Name)}", nameof(Name), true)] public record Sys_Menu : VersionEntity, IFieldSort { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs index 86118c79..ea3ce17a 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RequestLog.cs @@ -6,7 +6,9 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 璇锋眰鏃ュ織琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_RequestLog))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_RequestLog))] +[Index($"idx_{{tablename}}_{nameof(ApiId)}", nameof(ApiId), false)] +[Index($"idx_{{tablename}}_{nameof(CreatedTime)}", nameof(CreatedTime), false)] public record Sys_RequestLog : ImmutableEntity, IFieldCreatedClient { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs index da9fd550..e88eeaad 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_Role.cs @@ -8,7 +8,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瑙掕壊琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_Role))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Role))] [Index("idx_{tablename}_01", nameof(Name), true)] public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary, IRegister { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs index ce459f2c..7aa7be29 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleApi.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瑙掕壊-鎺ュ彛鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_RoleApi))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_RoleApi))] public record Sys_RoleApi : ImmutableEntity { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs index e8492bb7..96da168a 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleDept.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瑙掕壊-閮ㄩ棬鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_RoleDept))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_RoleDept))] [Index($"idx_{{tablename}}_{nameof(RoleId)}_{nameof(DeptId)}", $"{nameof(RoleId)},{nameof(DeptId)}", true)] public record Sys_RoleDept : ImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs index 8e90d6ad..a1edcb93 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_RoleMenu.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 瑙掕壊-鑿滃崟鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_RoleMenu))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_RoleMenu))] [Index($"idx_{{tablename}}_{nameof(RoleId)}_{nameof(MenuId)}", $"{nameof(RoleId)},{nameof(MenuId)}", true)] public record Sys_RoleMenu : ImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs index 6c8a455c..05dcae71 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsg.cs @@ -8,7 +8,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 绔欏唴淇¤〃 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_SiteMsg))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_SiteMsg))] public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs index 7de03179..65940933 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgDept.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 绔欏唴淇-閮ㄩ棬鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgDept))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgDept))] [Index($"idx_{{tablename}}_{nameof(DeptId)}_{nameof(SiteMsgId)}", $"{nameof(DeptId)},{nameof(SiteMsgId)}", true)] public record Sys_SiteMsgDept : ImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs index 1eb710fa..a41deec6 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgFlag.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 绔欏唴淇℃爣璁拌〃 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgFlag))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgFlag))] [Index($"idx_{{tablename}}_{nameof(SiteMsgId)}_{nameof(UserId)}", $"{nameof(SiteMsgId)},{nameof(UserId)}", true)] public record Sys_SiteMsgFlag : MutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs index 797f7393..4a7f2c07 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgRole.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 绔欏唴淇-瑙掕壊鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgRole))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgRole))] [Index($"idx_{{tablename}}_{nameof(RoleId)}_{nameof(SiteMsgId)}", $"{nameof(RoleId)},{nameof(SiteMsgId)}", true)] public record Sys_SiteMsgRole : ImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs index 54bf6a8f..a714eb41 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_SiteMsgUser.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 绔欏唴淇-鐢ㄦ埛鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgUser))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_SiteMsgUser))] [Index($"idx_{{tablename}}_{nameof(UserId)}_{nameof(SiteMsgId)}", $"{nameof(UserId)},{nameof(SiteMsgId)}", true)] public record Sys_SiteMsgUser : ImmutableEntity { diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs index f09abb4f..1d776c08 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_User.cs @@ -7,7 +7,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 鐢ㄦ埛鍩烘湰淇℃伅琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_User))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_User))] [Index($"idx_{{tablename}}_{nameof(UserName)}", nameof(UserName), true)] [Index($"idx_{{tablename}}_{nameof(Mobile)}", nameof(Mobile), true)] [Index($"idx_{{tablename}}_{nameof(Email)}", nameof(Email), true)] diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs index 0afb46e4..3bab847c 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserProfile.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 鐢ㄦ埛妗f琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_UserProfile))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserProfile))] public record Sys_UserProfile : VersionEntity, IRegister { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs index e5d83758..1a58b4c2 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_UserRole.cs @@ -5,7 +5,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 鐢ㄦ埛-瑙掕壊鏄犲皠琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_UserRole))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserRole))] public record Sys_UserRole : VersionEntity { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs index bd4a864e..fa141557 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Sys/Sys_VerifyCode.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Domain.DbMaps.Sys; /// /// 楠岃瘉鐮佽〃 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Sys_VerifyCode))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_VerifyCode))] public record Sys_VerifyCode : VersionEntity { /// diff --git a/src/backend/NetAdmin.Domain/DbMaps/Tpl/Tpl_Example.cs b/src/backend/NetAdmin.Domain/DbMaps/Tpl/Tpl_Example.cs index 421c1f79..fdd06be0 100644 --- a/src/backend/NetAdmin.Domain/DbMaps/Tpl/Tpl_Example.cs +++ b/src/backend/NetAdmin.Domain/DbMaps/Tpl/Tpl_Example.cs @@ -5,5 +5,5 @@ namespace NetAdmin.Domain.DbMaps.Tpl; /// /// 绀轰緥琛 /// -[Table(Name = Chars.FLG_TABLE_NAME_PREFIX + nameof(Tpl_Example))] +[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Tpl_Example))] public record Tpl_Example : VersionEntity; \ No newline at end of file diff --git a/src/backend/NetAdmin.Domain/Dto/Dependency/BulkReq.cs b/src/backend/NetAdmin.Domain/Dto/Dependency/BulkReq.cs index 122ea06c..85dfee3b 100644 --- a/src/backend/NetAdmin.Domain/Dto/Dependency/BulkReq.cs +++ b/src/backend/NetAdmin.Domain/Dto/Dependency/BulkReq.cs @@ -11,6 +11,6 @@ public sealed record BulkReq : DataAbstraction /// [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.璇锋眰瀵硅薄涓嶈兘涓虹┖))] [MinLength(1)] - [MaxLength(Numbers.BULK_REQ_LIMIT)] + [MaxLength(Numbers.MAX_LIMIT_BULK_REQ)] public IEnumerable Items { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Domain/Dto/Dependency/PagedQueryReq.cs b/src/backend/NetAdmin.Domain/Dto/Dependency/PagedQueryReq.cs index 0f4a3a4a..71e55d33 100644 --- a/src/backend/NetAdmin.Domain/Dto/Dependency/PagedQueryReq.cs +++ b/src/backend/NetAdmin.Domain/Dto/Dependency/PagedQueryReq.cs @@ -7,10 +7,10 @@ public sealed record PagedQueryReq : QueryReq, IPagedInfo where T : DataAbstraction, new() { /// - [Range(1, Numbers.QUERY_MAX_PAGE_NO)] + [Range(1, Numbers.MAX_LIMIT_QUERY_PAGE_NO)] public int Page { get; init; } = 1; /// - [Range(1, Numbers.QUERY_MAX_PAGE_SIZE)] - public int PageSize { get; init; } = Numbers.QUERY_DEF_PAGE_SIZE; + [Range(1, Numbers.MAX_LIMIT_QUERY_PAGE_SIZE)] + public int PageSize { get; init; } = Numbers.DEF_PAGE_SIZE_QUERY; } \ No newline at end of file diff --git a/src/backend/NetAdmin.Domain/Dto/Dependency/QueryReq.cs b/src/backend/NetAdmin.Domain/Dto/Dependency/QueryReq.cs index 4bf2a645..cc06091e 100644 --- a/src/backend/NetAdmin.Domain/Dto/Dependency/QueryReq.cs +++ b/src/backend/NetAdmin.Domain/Dto/Dependency/QueryReq.cs @@ -9,8 +9,8 @@ public record QueryReq : DataAbstraction /// /// 鍙栧墠n鏉 /// - [Range(1, Numbers.QUERY_LIMIT)] - public int Count { get; init; } = Numbers.QUERY_LIMIT; + [Range(1, Numbers.MAX_LIMIT_QUERY)] + public int Count { get; init; } = Numbers.MAX_LIMIT_QUERY; /// /// 鍔ㄦ佹煡璇㈡潯浠 diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/Cache/GetAllEntriesRsp.cs b/src/backend/NetAdmin.Domain/Dto/Sys/Cache/GetAllEntriesRsp.cs index fd386241..5d6e3396 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/Cache/GetAllEntriesRsp.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/Cache/GetAllEntriesRsp.cs @@ -21,6 +21,16 @@ public sealed record GetAllEntriesRsp : DataAbstraction Data = data; } + /// + /// 缁濆杩囨湡鏃堕棿 + /// + public DateTime? AbsExpTime => AbsExp == -1 ? null : DateTime.FromBinary(AbsExp).ToLocalTime(); + + /// + /// 婊戝姩杩囨湡鏃堕棿 + /// + public DateTime? SldExpTime => SldExp == -1 ? null : DateTime.FromBinary(SldExp).ToLocalTime(); + /// /// 缁濆杩囨湡鏃堕棿 /// diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/Config/QueryConfigRsp.cs b/src/backend/NetAdmin.Domain/Dto/Sys/Config/QueryConfigRsp.cs index 95476be2..4d2aaf20 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/Config/QueryConfigRsp.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/Config/QueryConfigRsp.cs @@ -10,6 +10,10 @@ namespace NetAdmin.Domain.Dto.Sys.Config; /// public sealed record QueryConfigRsp : Sys_Config { + /// + [JsonIgnore(Condition = JsonIgnoreCondition.Never)] + public override DateTime CreatedTime { get; init; } + /// [JsonIgnore(Condition = JsonIgnoreCondition.Never)] public override bool Enabled { get; init; } diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/CreateSiteMsgReq.cs b/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/CreateSiteMsgReq.cs index 3c49004f..620b9275 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/CreateSiteMsgReq.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/CreateSiteMsgReq.cs @@ -17,7 +17,7 @@ public record CreateSiteMsgReq : Sys_SiteMsg /// 閮ㄩ棬缂栧彿鍒楄〃 /// [MinLength(1)] - [MaxLength(Numbers.BULK_REQ_LIMIT)] + [MaxLength(Numbers.MAX_LIMIT_BULK_REQ)] public IReadOnlyCollection DeptIds { get; init; } /// @@ -30,7 +30,7 @@ public record CreateSiteMsgReq : Sys_SiteMsg /// 瑙掕壊缂栧彿鍒楄〃 /// [MinLength(1)] - [MaxLength(Numbers.BULK_REQ_LIMIT)] + [MaxLength(Numbers.MAX_LIMIT_BULK_REQ)] public IReadOnlyCollection RoleIds { get; init; } /// @@ -42,6 +42,6 @@ public record CreateSiteMsgReq : Sys_SiteMsg /// 鐢ㄦ埛缂栧彿鍒楄〃 /// [MinLength(1)] - [MaxLength(Numbers.BULK_REQ_LIMIT)] + [MaxLength(Numbers.MAX_LIMIT_BULK_REQ)] public IReadOnlyCollection UserIds { get; init; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/QuerySiteMsgRsp.cs b/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/QuerySiteMsgRsp.cs index 5ad9307f..073968b0 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/QuerySiteMsgRsp.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/SiteMsg/QuerySiteMsgRsp.cs @@ -21,6 +21,10 @@ public sealed record QuerySiteMsgRsp : Sys_SiteMsg [JsonIgnore(Condition = JsonIgnoreCondition.Never)] public override DateTime CreatedTime { get; init; } + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public override string CreatedUserName { get; init; } + /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public new IEnumerable Depts { get; init; } diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/User/CreateUpdateUserReq.cs b/src/backend/NetAdmin.Domain/Dto/Sys/User/CreateUpdateUserReq.cs index 740428bf..5cb6ae08 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/User/CreateUpdateUserReq.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/User/CreateUpdateUserReq.cs @@ -43,7 +43,7 @@ public abstract record CreateUpdateUserReq : Sys_User /// [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.瑙掕壊缂栧彿鍒楄〃涓嶈兘涓虹┖))] [MinLength(1)] - [MaxLength(Numbers.BULK_REQ_LIMIT)] + [MaxLength(Numbers.MAX_LIMIT_BULK_REQ)] public IReadOnlyCollection RoleIds { get; init; } /// diff --git a/src/backend/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs b/src/backend/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs index 6940e522..c0dec41a 100644 --- a/src/backend/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs +++ b/src/backend/NetAdmin.Domain/Dto/Sys/User/LoginRsp.cs @@ -21,7 +21,7 @@ public sealed record LoginRsp : DataAbstraction public void SetToRspHeader() { // 璁剧疆鍝嶅簲鎶ユ枃澶 - App.HttpContext.Response.Headers[Chars.FLG_ACCESS_TOKEN] = AccessToken; - App.HttpContext.Response.Headers[Chars.FLG_X_ACCESS_TOKEN] = RefreshToken; + App.HttpContext.Response.Headers[Chars.FLG_HTTP_HEADER_VALUE_ACCESS_TOKEN] = AccessToken; + App.HttpContext.Response.Headers[Chars.FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN] = RefreshToken; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs b/src/backend/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs index dbf65f6a..a494807d 100644 --- a/src/backend/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs +++ b/src/backend/NetAdmin.Domain/Events/SqlCommandAfterEvent.cs @@ -24,6 +24,7 @@ public sealed record SqlCommandAfterEvent : SqlCommandBeforeEvent /// public override string ToString() { - return string.Format(CultureInfo.InvariantCulture, "SQL-{0}: {2} ms {1}", Id, Sql, ElapsedMicroseconds / 1000); + return string.Format(CultureInfo.InvariantCulture, "SQL-{0}: {2} ms {1}", Id + , Sql?.Sub(0, Numbers.MAX_LIMIT_PRINT_LEN_SQL), ElapsedMicroseconds / 1000); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs b/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs index 0fddaeb2..4f1d8d04 100644 --- a/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs +++ b/src/backend/NetAdmin.Host/BackgroundRunning/WorkBase.cs @@ -40,9 +40,9 @@ public abstract class WorkBase /// protected Task GetLockerAsync(string lockId) { - return _redLocker.RedLockFactory.CreateLockAsync(lockId, TimeSpan.FromSeconds(Numbers.RED_LOCK_EXPIRY_TIME_SECS) - , TimeSpan.FromSeconds(Numbers.RED_LOCK_WAIT_TIME_SECS) - , TimeSpan.FromSeconds(Numbers.RED_LOCK_RETRY_TIME_SECS)); + return _redLocker.RedLockFactory.CreateLockAsync(lockId, TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_EXPIRY) + , TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_WAIT) + , TimeSpan.FromSeconds(Numbers.SECS_RED_LOCK_RETRY)); } /// diff --git a/src/backend/NetAdmin.Host/Controllers/ControllerBase.cs b/src/backend/NetAdmin.Host/Controllers/ControllerBase.cs index c32cd34a..fe7bce0e 100644 --- a/src/backend/NetAdmin.Host/Controllers/ControllerBase.cs +++ b/src/backend/NetAdmin.Host/Controllers/ControllerBase.cs @@ -6,7 +6,7 @@ namespace NetAdmin.Host.Controllers; /// /// 鎺у埗鍣ㄥ熀绫 /// -public abstract class ControllerBase(TCache cache) : IDynamicApiController +public abstract class ControllerBase(TCache cache = default) : IDynamicApiController where TCache : ICache // where TService : IService { diff --git a/src/backend/NetAdmin.Host/Controllers/HealthController.cs b/src/backend/NetAdmin.Host/Controllers/HealthController.cs deleted file mode 100644 index 25600fa6..00000000 --- a/src/backend/NetAdmin.Host/Controllers/HealthController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using NetAdmin.Application.Services; -using NetAdmin.Cache; - -namespace NetAdmin.Host.Controllers; - -/// -/// 鍋ュ悍鎺у埗鍣 -/// -[ApiDescriptionSettings("Health")] -public sealed class HealthController(ICache cache) - : ControllerBase, IService>(cache) -{ - /// - /// 鍋ュ悍妫鏌 - /// - [AllowAnonymous] - [HttpGet] - #pragma warning disable CA1822, S3400 - public string Check() - #pragma warning restore S3400, CA1822 - { - return GlobalStatic.ProductVersion; - } -} \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Controllers/ProbeController.cs b/src/backend/NetAdmin.Host/Controllers/ProbeController.cs new file mode 100644 index 00000000..bec7ae29 --- /dev/null +++ b/src/backend/NetAdmin.Host/Controllers/ProbeController.cs @@ -0,0 +1,28 @@ +using NetAdmin.Application.Services; +using NetAdmin.Cache; +using NetAdmin.Host.Middlewares; + +namespace NetAdmin.Host.Controllers; + +/// +/// 鎺㈤拡缁勪欢 +/// +[ApiDescriptionSettings("Probe")] +public sealed class ProbeController : ControllerBase, IService> +{ + /// + /// 鍋ュ悍妫鏌 + /// + [AllowAnonymous] + [HttpGet] + #pragma warning disable CA1822, S3400 + public object HealthCheck() + #pragma warning restore S3400, CA1822 + { + return new { + HostName = Environment.MachineName + , CurrentConnections = SafetyShopHostMiddleware.Connections + , GlobalStatic.ProductVersion + }; + } +} \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs b/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs index 7b618cbc..1cff45e1 100644 --- a/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/HttpContextExtensions.cs @@ -13,7 +13,7 @@ public static class HttpContextExtensions public static async Task RemoveJsonNodeWithNullValueAsync(this HttpContext me) { // 闈瀓son鏍煎紡锛岄鍑 - if (!(me.Response.ContentType?.Contains(Chars.FLG_APPLICATION_JSON) ?? false)) { + if (!(me.Response.ContentType?.Contains(Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_JSON) ?? false)) { return; } diff --git a/src/backend/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs b/src/backend/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs index 9dd279db..133a8a46 100644 --- a/src/backend/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/IApplicationBuilderExtensions.cs @@ -1,4 +1,3 @@ -using Microsoft.AspNetCore.HttpOverrides; #if DEBUG using IGeekFan.AspNetCore.Knife4jUI; @@ -42,16 +41,4 @@ public static class IApplicationBuilderExtensions }); } #endif - - /// - /// 鑾峰彇瀹㈡埛绔湡瀹濱p - /// - public static IApplicationBuilder UseRealIp(this IApplicationBuilder me) - { - return me.UseForwardedHeaders(new ForwardedHeadersOptions // - { - ForwardedHeaders = ForwardedHeaders.XForwardedFor | - ForwardedHeaders.XForwardedProto - }); - } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs index 1cc1f2d3..a1669723 100644 --- a/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs +++ b/src/backend/NetAdmin.Host/Extensions/ServiceCollectionExtensions.cs @@ -105,8 +105,7 @@ public static class ServiceCollectionExtensions public static IServiceCollection AddConsoleFormatter(this IServiceCollection me) { return me.AddConsoleFormatter(options => { - var logLevels = Enum.GetValues() - .ToDictionary(x => x, x => x.GetDisplay()); + var logLevels = Enum.GetValues().ToDictionary(x => x, x => x.GetDisplay()); #if DEBUG options.WriteHandler = (message, _, _, _, _) => { @@ -242,11 +241,6 @@ public static class ServiceCollectionExtensions , LogMessage message // , Dictionary logLevels) { - // 鏃ュ織杩囬暱 - if (msg.Length > Numbers.CONSOLE_LINE_LEN_LIMIT) { - msg = $"{Ln.鏃ュ織闀垮害瓒呰繃闄愬埗} {Numbers.CONSOLE_LINE_LEN_LIMIT}"; - } - msg = _consoleColors.Aggregate( // msg, (current, regex) => regex.Key.Replace(current, regex.Value)); msg = msg.ReplaceLineEndings(string.Empty); diff --git a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs index aecf5a99..2aa3f57c 100644 --- a/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs +++ b/src/backend/NetAdmin.Host/Filters/ApiResultHandler.cs @@ -23,12 +23,12 @@ public abstract class ApiResultHandler /// public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { - var lineException = context.Exception switch { NetAdminException ex => ex, _ => null }; - var errorCode = lineException?.Code ?? ErrorCodes.Unhandled; + var naException = context.Exception switch { NetAdminException ex => ex, _ => null }; + var errorCode = naException?.Code ?? ErrorCodes.Unhandled; var result = RestfulResult(errorCode, metadata.Data - , lineException is NetAdminValidateException vEx + , naException is NetAdminValidateException vEx ? vEx.ValidateResults - : lineException?.Message ?? errorCode.ResDesc()); + : naException?.Message ?? errorCode.ResDesc()); SetErrorCodeToHeader(context.HttpContext, errorCode); diff --git a/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs b/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs index 8dfff7db..4ac95f0e 100644 --- a/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs +++ b/src/backend/NetAdmin.Host/Filters/GlobalExceptionHandler.cs @@ -8,7 +8,12 @@ public sealed class GlobalExceptionHandler(ILogger logge /// public Task OnExceptionAsync(ExceptionContext context) { - logger.Error(context.Exception); + if (context.Exception is NetAdminException and not NetAdminUnexpectedException) { + logger.Warn(context.Exception); + } + else { + logger.Error(context.Exception); + } // 灏嗗紓甯歌缃埌HttpContext.Features涓 浠ヤ究涓棿浠惰兘鑾峰彇鍒颁粬 context.HttpContext.Features.Set( diff --git a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs index 5336be5c..67797ff6 100644 --- a/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs +++ b/src/backend/NetAdmin.Host/Middlewares/RequestAuditMiddleware.cs @@ -5,9 +5,6 @@ namespace NetAdmin.Host.Middlewares; /// /// 璇锋眰瀹¤涓棿浠 /// -/// -/// 鏀惧湪鎵鏈変腑闂翠欢鏈鍓嶉潰 -/// public sealed class RequestAuditMiddleware( RequestDelegate next , IOptions dynamicApiControllerSettingsOptions @@ -17,7 +14,7 @@ public sealed class RequestAuditMiddleware( = new($"/{dynamicApiControllerSettingsOptions.Value.DefaultRoutePrefix}"); private readonly PathString _healthCheckRoutePrefix - = new($"/{dynamicApiControllerSettingsOptions.Value.DefaultRoutePrefix}/health/check"); + = new($"/{dynamicApiControllerSettingsOptions.Value.DefaultRoutePrefix}/probe/health.check"); /// /// 涓诲嚱鏁 diff --git a/src/backend/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs b/src/backend/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs new file mode 100644 index 00000000..f9b6a1b5 --- /dev/null +++ b/src/backend/NetAdmin.Host/Middlewares/SafetyShopHostMiddleware.cs @@ -0,0 +1,44 @@ +namespace NetAdmin.Host.Middlewares; + +/// +/// 瀹夊叏鍋滄満涓棿浠 +/// +/// +/// 鏀惧湪鎵鏈変腑闂翠欢鏈鍓嶉潰 +/// +public sealed class SafetyShopHostMiddleware(RequestDelegate next) +{ + private static long _connections; + private static bool _hostStopping; + + /// + /// 褰撳墠杩炴帴鏁 + /// + public static long Connections => Interlocked.Read(ref _connections); + + /// + /// 鍋滄満澶勭悊 + /// + public static void OnStopping() + { + Volatile.Write(ref _hostStopping, true); + while (Interlocked.Read(ref _connections) > 0) { + Thread.Sleep(10); + } + } + + /// + /// 涓诲嚱鏁 + /// + public async Task InvokeAsync(HttpContext context) + { + if (Volatile.Read(ref _hostStopping)) { + context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; + return; + } + + _ = Interlocked.Increment(ref _connections); + await next(context).ConfigureAwait(false); + _ = Interlocked.Decrement(ref _connections); + } +} \ No newline at end of file diff --git a/src/backend/NetAdmin.Host/Utils/RequestLogger.cs b/src/backend/NetAdmin.Host/Utils/RequestLogger.cs index dccb3c3b..f17b7125 100644 --- a/src/backend/NetAdmin.Host/Utils/RequestLogger.cs +++ b/src/backend/NetAdmin.Host/Utils/RequestLogger.cs @@ -36,10 +36,12 @@ public sealed class RequestLogger( _textContentTypes , x => context.Request.ContentType?.Contains( x, StringComparison.OrdinalIgnoreCase) ?? false) - ? await context.ReadBodyContentAsync().ConfigureAwait(false) + ? (await context.ReadBodyContentAsync().ConfigureAwait(false)) + ?.Sub(0, Numbers.MAX_LIMIT_PRINT_LEN_CONTENT) : string.Empty , RequestUrl = context.Request.GetRequestUrlAddress() - , ResponseBody = responseBody + , ResponseBody + = responseBody?.Sub(0, Numbers.MAX_LIMIT_PRINT_LEN_CONTENT) , ServerIp = context.GetLocalIpAddressToIPv4()?.IpV4ToInt32() , ApiId = context.Request.Path.Value?.TrimStart('/') , RequestHeaders = context.Request.Headers.Json() @@ -51,7 +53,10 @@ public sealed class RequestLogger( , CreatedUserId = associatedUser?.UserId , CreatedUserName = associatedUser?.UserName , CreatedUserAgent = context.Request.Headers.UserAgent.ToString() - , CreatedClientIp = context.GetRemoteIpAddressToIPv4()?.IpV4ToInt32() + , CreatedClientIp = context.GetRealIpAddress() + ?.MapToIPv4() + .ToString() + .IpV4ToInt32() }; // 鎵撳嵃鏃ュ織 diff --git a/src/backend/NetAdmin.Host/Utils/SqlAuditor.cs b/src/backend/NetAdmin.Host/Utils/SqlAuditor.cs index 0468ce47..10882051 100644 --- a/src/backend/NetAdmin.Host/Utils/SqlAuditor.cs +++ b/src/backend/NetAdmin.Host/Utils/SqlAuditor.cs @@ -59,7 +59,7 @@ public sealed class SqlAuditor : ISingleton private static void SetCreatedClientIp(AuditValueEventArgs e) { if (e.Value is null or 0) { - e.Value = App.HttpContext?.GetRemoteIpAddressToIPv4().IpV4ToInt32(); + e.Value = App.HttpContext?.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32(); } } @@ -80,7 +80,7 @@ public sealed class SqlAuditor : ISingleton private static void SetCreatedUserAgent(AuditValueEventArgs e) { if (e.Value is null or "") { - e.Value = App.HttpContext?.Request.Headers[Chars.FLG_HTTP_HEADER_USER_AGENT].ToString(); + e.Value = App.HttpContext?.Request.Headers[Chars.FLG_HTTP_HEADER_KEY_USER_AGENT].ToString(); } } diff --git a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs index b3fe85f3..d74355e7 100644 --- a/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs +++ b/src/backend/NetAdmin.Infrastructure/Configuration/Options/CaptchaOptions.cs @@ -14,8 +14,8 @@ public sealed record CaptchaOptions : OptionAbstraction { var rtn = new char[32]; for (var i = 0; i != 32; i++) { - rtn[i] = Chars.FLG_VISIBLE_ASCIIS[ - (int)(Math.Abs(Math.Sin(_seed * (i + 1))) * Chars.FLG_VISIBLE_ASCIIS.Length)]; + rtn[i] = Chars.FLGL_VISIBLE_ASCIIS[ + (int)(Math.Abs(Math.Sin(_seed * (i + 1))) * Chars.FLGL_VISIBLE_ASCIIS.Length)]; } SecretKey = new string(rtn); diff --git a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs index f144fa19..d73c47e8 100644 --- a/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs +++ b/src/backend/NetAdmin.Infrastructure/Constant/Chars.cs @@ -10,80 +10,78 @@ namespace NetAdmin.Infrastructure.Constant; /// public static class Chars { - public const string FLG_ACCESS_TOKEN = "ACCESS-TOKEN"; - public const string FLG_ACCESS_TOKEN_HEADER_KEY = "Authorization"; - public const string FLG_APPLICATION_JSON = "application/json"; - public const string FLG_AUTH_SCHEMA = "Bearer"; - public const string FLG_CONSUL_REG_HOSTNAME = "CONSUL_REG_HOSTNAME"; - public const string FLG_CONSUL_REG_PORT = "CONSUL_REG_PORT"; - public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO); - public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID); - public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID); - public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO); - public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)"; - public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)"; - public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint"; - public const string FLG_DB_FIELD_TYPE_TEXT = "text"; - public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)"; - public const string FLG_DB_FIELD_TYPE_VARCHAR_MAX = "varchar(max)"; - public const string FLG_GLOBAL_FILTER_DATA = nameof(FLG_GLOBAL_FILTER_DATA); - public const string FLG_GLOBAL_FILTER_DELETE = nameof(FLG_GLOBAL_FILTER_DELETE); - public const string FLG_GLOBAL_FILTER_MEMBER = nameof(FLG_GLOBAL_FILTER_MEMBER); - public const string FLG_GLOBAL_FILTER_SELF = nameof(FLG_GLOBAL_FILTER_SELF); - public const string FLG_GLOBAL_FILTER_TENANT = nameof(FLG_GLOBAL_FILTER_TENANT); - public const string FLG_HEALTH_CHECK_PATH_PREFIX = "health/check"; - public const string FLG_HTTP_HEADER_REFERER = "Referer"; - public const string FLG_HTTP_HEADER_USER_AGENT = "User-Agent"; - public const string FLG_HTTP_METHOD_CONNECT = "CONNECT"; - public const string FLG_HTTP_METHOD_DELETE = "DELETE"; - public const string FLG_HTTP_METHOD_GET = "GET"; - public const string FLG_HTTP_METHOD_HEAD = "HEAD"; - public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS"; - public const string FLG_HTTP_METHOD_PATCH = "PATCH"; - public const string FLG_HTTP_METHOD_POST = "POST"; - public const string FLG_HTTP_METHOD_PUT = "PUT"; - public const string FLG_HTTP_METHOD_TRACE = "TRACE"; - public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY"; - public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache"; - public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID"; - public const string FLG_SYSTEM_PREFIX = "sc_"; - public const string FLG_TABLE_NAME_PREFIX = ""; + public const string FLG_CONTEXT_MEMBER_INFO = nameof(FLG_CONTEXT_MEMBER_INFO); + public const string FLG_CONTEXT_OWNER_DEPT_ID = nameof(FLG_CONTEXT_OWNER_DEPT_ID); + public const string FLG_CONTEXT_USER_ID = nameof(FLG_CONTEXT_USER_ID); + public const string FLG_CONTEXT_USER_INFO = nameof(FLG_CONTEXT_USER_INFO); + public const string FLG_DB_EXCEPTION_PRIVATE_KEY_CONFLICT = "PRIMARY KEY"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR = "nvarchar"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_1022 = "nvarchar(1022)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_127 = "nvarchar(127)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_15 = "nvarchar(15)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_255 = "nvarchar(255)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_31 = "nvarchar(31)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_4094 = "nvarchar(4094)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_510 = "nvarchar(510)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_63 = "nvarchar(63)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_7 = "nvarchar(7)"; + public const string FLG_DB_FIELD_TYPE_NVARCHAR_MAX = "nvarchar(max)"; + public const string FLG_DB_FIELD_TYPE_SMALL_INT = "smallint"; + public const string FLG_DB_FIELD_TYPE_TEXT = "text"; + public const string FLG_DB_FIELD_TYPE_VARCHAR = "varchar"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_1022 = "varchar(1022)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_127 = "varchar(127)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_15 = "varchar(15)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_255 = "varchar(255)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_31 = "varchar(31)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_4094 = "varchar(4094)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_510 = "varchar(510)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_63 = "varchar(63)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_7 = "varchar(7)"; + public const string FLG_DB_FIELD_TYPE_VARCHAR_MAX = "varchar(max)"; + public const string FLG_DB_TABLE_NAME_PREFIX = ""; + public const string FLG_FREE_SQL_GLOBAL_FILTER_DATA = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DATA); + public const string FLG_FREE_SQL_GLOBAL_FILTER_DELETE = nameof(FLG_FREE_SQL_GLOBAL_FILTER_DELETE); + public const string FLG_FREE_SQL_GLOBAL_FILTER_MEMBER = nameof(FLG_FREE_SQL_GLOBAL_FILTER_MEMBER); + public const string FLG_FREE_SQL_GLOBAL_FILTER_SELF = nameof(FLG_FREE_SQL_GLOBAL_FILTER_SELF); + public const string FLG_FREE_SQL_GLOBAL_FILTER_TENANT = nameof(FLG_FREE_SQL_GLOBAL_FILTER_TENANT); + public const string FLG_HTTP_HEADER_KEY_AUTHORIZATION = "Authorization"; + public const string FLG_HTTP_HEADER_KEY_REFERER = "Referer"; + public const string FLG_HTTP_HEADER_KEY_USER_AGENT = "User-Agent"; + public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN = "X-ACCESS-TOKEN"; + public const string FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization"; + public const string FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR = "X-Forwarded-For"; + public const string FLG_HTTP_HEADER_KEY_X_REAL_IP = "X-Real-IP"; + public const string FLG_HTTP_HEADER_VALUE_ACCESS_TOKEN = "ACCESS-TOKEN"; + public const string FLG_HTTP_HEADER_VALUE_APPLICATION_JSON = "application/json"; + public const string FLG_HTTP_HEADER_VALUE_APPLICATION_URLENCODED = "application/x-www-form-urlencoded"; + public const string FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA = "Bearer"; + public const string FLG_HTTP_METHOD_CONNECT = "CONNECT"; + public const string FLG_HTTP_METHOD_DELETE = "DELETE"; + public const string FLG_HTTP_METHOD_GET = "GET"; + public const string FLG_HTTP_METHOD_HEAD = "HEAD"; + public const string FLG_HTTP_METHOD_OPTIONS = "OPTIONS"; + public const string FLG_HTTP_METHOD_PATCH = "PATCH"; + public const string FLG_HTTP_METHOD_POST = "POST"; + public const string FLG_HTTP_METHOD_PUT = "PUT"; + public const string FLG_HTTP_METHOD_TRACE = "TRACE"; + public const string FLG_PATH_PREFIX_HEALTH_CHECK = "probe/health.check"; + public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY"; + public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache"; + public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID"; + public const string FLG_SYSTEM_PREFIX = "sc_"; - public const string FLG_UA_MOBILE + public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE = "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36"; - public const string FLG_UA_PC + public const string FLGL_HTTP_HEADER_VALUE_UA_PC = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"; - public const string FLG_VISIBLE_ASCIIS + public const string FLGL_VISIBLE_ASCIIS = """!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"""; - public const string FLG_X_ACCESS_TOKEN = "X-ACCESS-TOKEN"; - public const string FLG_X_ACCESS_TOKEN_HEADER_KEY = "X-Authorization"; - - public const string RGX_CERTIFICATE = "^[a-zA-Z0-9-_]+$"; - - public const string RGX_CHINESE_NAME - = """^(?:璧祙閽眧瀛檤鏉巪鍛▅鍚磡閮憒鐜媩鍐瘄闄坾瑜殀鍗珅钂媩娌坾闊﹟鏉▅鏈眧绉灏璁竱浣晐鍚晐鏂絴寮爘瀛攟鏇箌涓鍗巪閲憒榄弢闄秥濮渱鎴殀璋閭箌鍠粅鏌弢姘磡绐绔爘浜憒鑻弢娼榺钁泑濂殀鑼億褰瓅閮巪椴亅闊鏄寍椹瑋鑻梶鍑鑺眧鏂箌淇瀨浠粅琚亅鏌硘閰唡椴峾鍙瞸鍞恷璐箌寤墊宀憒钖泑闆穦璐簗鍊獆姹婊晐娈穦缃梶姣晐閮潀閭瑋瀹墊甯竱涔恷浜巪鏃秥鍌厊鐨畖鍗瀨榻恷搴穦浼峾浣檤鍏億鍗渱椤緗瀛焲骞硘榛剕鍜寍绌唡钀灏箌濮殀閭祙婀泑姹獆绁亅姣泑绂箌鐙剕绫硘璐潀鏄巪鑷璁浼弢鎴恷鎴磡璋坾瀹媩鑼厊搴瀨鐔妡绾獆鑸抾灞坾椤箌绁潀钁姊亅鏉渱闃畖钃潀闂祙甯瓅瀛楹粅寮簗璐緗璺瘄濞剕鍗眧姹焲绔棰渱閮瓅姊厊鐩泑鏋梶鍒亅閽焲寰恷閭眧楠唡楂榺澶弢钄鐢皘妯妡鑳鍑寍闇峾铏瀨涓噟鏀瘄鏌瘄鏄潀绠鍗鑾珅缁弢鎴縷瑁榺缂獆骞瞸瑙搴攟瀹梶涓亅瀹璐瞸閭搢閮亅鍗晐鏉瓅娲獆鍖厊璇竱宸鐭硘宕攟鍚墊閽畖榫殀绋媩宓噟閭婊憒瑁磡闄唡鑽缈亅鑽|缇妡鏂紎鎯爘鐢剕鏇瞸瀹秥灏亅鑺畖缇縷鍌▅闈硘姹瞸閭磡绯渱鏉緗浜晐娈祙瀵寍宸珅涔寍鐒宸磡寮搢鐗闅梶灞眧璋穦杞渚瘄瀹搢钃瑋鍏▅閮梶鐝瓅浠皘绉媩浠瞸浼妡瀹珅瀹亅浠噟鏍緗鏆磡鐢榺閽瓅鍘墊鎴巪绁東姝绗鍒榺鏅瘄瑭箌鏉焲榫檤鍙秥骞竱鍙竱闊秥閮渱榛巪钃焲钖剕鍗皘瀹縷鐧絴鎬|钂瞸閭皘浠巪閯倈绱鍜竱绫峾璧東鍗搢钄簗灞爘钂檤姹爘涔攟闃磡鑳鑳絴鑻峾鍙寍闂粅鑾榺鍏殀缈焲璋瓅璐鍔硘閫剕濮瑋鐢硘鎵秥鍫祙鍐墊瀹皘閮闆峾閮鐠﹟妗憒妗倈婵畖鐗泑瀵縷閫殀杈箌鎵坾鐕晐鍐|閮弢娴灏殀鍐渱娓﹟鍒珅搴剕鏅弢鏌磡鐬縷闃巪鍏厊鎱晐杩瀨鑼箌涔爘瀹鑹緗楸紎瀹箌鍚憒鍙鏄搢鎱巪鎴坾寤東搴緗缁坾鏆▅灞厊琛姝閮絴鑰縷婊寮榺鍖鍥絴鏂噟瀵噟骞縷绂剕闃檤涓渱娆娈硘娌億鍒﹟钄殀瓒妡澶攟闅唡甯坾宸﹟鍘峾鑱倈鏅亅鍕緗鏁東铻峾鍐穦瑷緗杈泑闃殀閭绠|楗秥绌簗鏇緗姣媩娌檤涔渱鍏粅闉爘椤粅涓皘宸鍏硘钂瘄鐩竱鏌寰寍鑽唡绾娓竱绔簗鏉億閫瘄鐩東鐩妡妗搢鍏瑋涓囦繜|鍙搁┈|涓婂畼|娆ч槼|澶忎警|璇歌憶|闂讳汉|涓滄柟|璧繛|鐨囩敨|灏夎繜|鍏緤|婢瑰彴|鍏喍|瀹楁斂|婵槼|娣充簬|鍗曚簬|澶彅|鐢冲睜|鍏瓩|浠插瓩|杞╄緯|浠ょ嫄|閽熺|瀹囨枃|闀垮瓩|鎱曞|椴滀簬|闂句笜|鍙稿緬|鍙哥┖|浜撳畼|鍙稿瘒|浠墊鐫瀛愯溅|棰涘瓩|绔湪|宸┈|鍏タ|婕嗛洉|涔愭|澹ら┓|鍏壇|鎷撹穻|澶硅胺|瀹扮埗|璋锋|鏅媩妤殀闂珅娉晐姹潀閯娑倈閽娈靛共|鐧鹃噷|涓滈儹|鍗楅棬|鍛煎欢|褰抾娴穦缇婅垖|寰敓|宀硘甯厊缂憒浜鍐祙鍚巪鏈墊鐞磡姊佷笜|宸︿笜|涓滈棬|瑗块棬|鍟唡鐗焲浣榺浣磡浼瘄璧弢鍗楀|澧▅鍝坾璋瘄绗獆骞磡鐖眧闃硘浣焲绗簲|瑷|绂)[\u4e00-\u9fa5]{1,3}$"""; - - public const string RGX_CRON - = "^\\s*($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+(\\?|\\*|(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+(\\?|\\*|(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?)*))$"; - - public const string RGX_EMAIL - = """^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$"""; - - public const string RGX_INVITE_CODE = """^\d{8}$"""; - + public const string RGX_CERTIFICATE = "^[a-zA-Z0-9-_]+$"; + public const string RGX_INVITE_CODE = """^\d{8}$"""; public const string RGX_MOBILE = """^1(3\d|4[5-9]|5[0-35-9]|6[6]|7[2-8]|8\d|9[0-35-9])\d{8}$"""; public const string RGX_PASSWORD = "^(?![0-9]+$)(?![a-zA-Z]+$).{8,16}$"; public const string RGX_PAY_PASSWORD = """^\d{6}$"""; @@ -93,6 +91,18 @@ public static class Chars public const string RGX_USERNAME = "^[a-zA-Z0-9_]{4,16}$"; public const string RGX_VERIFY_CODE = """^\d{4}$"""; + public const string RGXL_CHINESE_NAME + = """^(?:璧祙閽眧瀛檤鏉巪鍛▅鍚磡閮憒鐜媩鍐瘄闄坾瑜殀鍗珅钂媩娌坾闊﹟鏉▅鏈眧绉灏璁竱浣晐鍚晐鏂絴寮爘瀛攟鏇箌涓鍗巪閲憒榄弢闄秥濮渱鎴殀璋閭箌鍠粅鏌弢姘磡绐绔爘浜憒鑻弢娼榺钁泑濂殀鑼億褰瓅閮巪椴亅闊鏄寍椹瑋鑻梶鍑鑺眧鏂箌淇瀨浠粅琚亅鏌硘閰唡椴峾鍙瞸鍞恷璐箌寤墊宀憒钖泑闆穦璐簗鍊獆姹婊晐娈穦缃梶姣晐閮潀閭瑋瀹墊甯竱涔恷浜巪鏃秥鍌厊鐨畖鍗瀨榻恷搴穦浼峾浣檤鍏億鍗渱椤緗瀛焲骞硘榛剕鍜寍绌唡钀灏箌濮殀閭祙婀泑姹獆绁亅姣泑绂箌鐙剕绫硘璐潀鏄巪鑷璁浼弢鎴恷鎴磡璋坾瀹媩鑼厊搴瀨鐔妡绾獆鑸抾灞坾椤箌绁潀钁姊亅鏉渱闃畖钃潀闂祙甯瓅瀛楹粅寮簗璐緗璺瘄濞剕鍗眧姹焲绔棰渱閮瓅姊厊鐩泑鏋梶鍒亅閽焲寰恷閭眧楠唡楂榺澶弢钄鐢皘妯妡鑳鍑寍闇峾铏瀨涓噟鏀瘄鏌瘄鏄潀绠鍗鑾珅缁弢鎴縷瑁榺缂獆骞瞸瑙搴攟瀹梶涓亅瀹璐瞸閭搢閮亅鍗晐鏉瓅娲獆鍖厊璇竱宸鐭硘宕攟鍚墊閽畖榫殀绋媩宓噟閭婊憒瑁磡闄唡鑽缈亅鑽|缇妡鏂紎鎯爘鐢剕鏇瞸瀹秥灏亅鑺畖缇縷鍌▅闈硘姹瞸閭磡绯渱鏉緗浜晐娈祙瀵寍宸珅涔寍鐒宸磡寮搢鐗闅梶灞眧璋穦杞渚瘄瀹搢钃瑋鍏▅閮梶鐝瓅浠皘绉媩浠瞸浼妡瀹珅瀹亅浠噟鏍緗鏆磡鐢榺閽瓅鍘墊鎴巪绁東姝绗鍒榺鏅瘄瑭箌鏉焲榫檤鍙秥骞竱鍙竱闊秥閮渱榛巪钃焲钖剕鍗皘瀹縷鐧絴鎬|钂瞸閭皘浠巪閯倈绱鍜竱绫峾璧東鍗搢钄簗灞爘钂檤姹爘涔攟闃磡鑳鑳絴鑻峾鍙寍闂粅鑾榺鍏殀缈焲璋瓅璐鍔硘閫剕濮瑋鐢硘鎵秥鍫祙鍐墊瀹皘閮闆峾閮鐠﹟妗憒妗倈婵畖鐗泑瀵縷閫殀杈箌鎵坾鐕晐鍐|閮弢娴灏殀鍐渱娓﹟鍒珅搴剕鏅弢鏌磡鐬縷闃巪鍏厊鎱晐杩瀨鑼箌涔爘瀹鑹緗楸紎瀹箌鍚憒鍙鏄搢鎱巪鎴坾寤東搴緗缁坾鏆▅灞厊琛姝閮絴鑰縷婊寮榺鍖鍥絴鏂噟瀵噟骞縷绂剕闃檤涓渱娆娈硘娌億鍒﹟钄殀瓒妡澶攟闅唡甯坾宸﹟鍘峾鑱倈鏅亅鍕緗鏁東铻峾鍐穦瑷緗杈泑闃殀閭绠|楗秥绌簗鏇緗姣媩娌檤涔渱鍏粅闉爘椤粅涓皘宸鍏硘钂瘄鐩竱鏌寰寍鑽唡绾娓竱绔簗鏉億閫瘄鐩東鐩妡妗搢鍏瑋涓囦繜|鍙搁┈|涓婂畼|娆ч槼|澶忎警|璇歌憶|闂讳汉|涓滄柟|璧繛|鐨囩敨|灏夎繜|鍏緤|婢瑰彴|鍏喍|瀹楁斂|婵槼|娣充簬|鍗曚簬|澶彅|鐢冲睜|鍏瓩|浠插瓩|杞╄緯|浠ょ嫄|閽熺|瀹囨枃|闀垮瓩|鎱曞|椴滀簬|闂句笜|鍙稿緬|鍙哥┖|浜撳畼|鍙稿瘒|浠墊鐫瀛愯溅|棰涘瓩|绔湪|宸┈|鍏タ|婕嗛洉|涔愭|澹ら┓|鍏壇|鎷撹穻|澶硅胺|瀹扮埗|璋锋|鏅媩妤殀闂珅娉晐姹潀閯娑倈閽娈靛共|鐧鹃噷|涓滈儹|鍗楅棬|鍛煎欢|褰抾娴穦缇婅垖|寰敓|宀硘甯厊缂憒浜鍐祙鍚巪鏈墊鐞磡姊佷笜|宸︿笜|涓滈棬|瑗块棬|鍟唡鐗焲浣榺浣磡浼瘄璧弢鍗楀|澧▅鍝坾璋瘄绗獆骞磡鐖眧闃硘浣焲绗簲|瑷|绂)[\u4e00-\u9fa5]{1,3}$"""; + + public const string RGXL_CRON + = "^\\s*($|#|\\w+\\s*=|(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?(?:,(?:[0-5]?\\d)(?:(?:-|\\/|\\,)(?:[0-5]?\\d))?)*)\\s+(\\?|\\*|(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?(?:,(?:[01]?\\d|2[0-3])(?:(?:-|\\/|\\,)(?:[01]?\\d|2[0-3]))?)*)\\s+(\\?|\\*|(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?(?:,(?:0?[1-9]|[12]\\d|3[01])(?:(?:-|\\/|\\,)(?:0?[1-9]|[12]\\d|3[01]))?)*)\\s+(\\?|\\*|(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?(?:,(?:[1-9]|1[012])(?:(?:-|\\/|\\,)(?:[1-9]|1[012]))?(?:L|W)?)*|\\?|\\*|(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?(?:,(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:-)(?:JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)*)\\s+(\\?|\\*|(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?(?:,(?:[0-6])(?:(?:-|\\/|\\,|#)(?:[0-6]))?(?:L)?)*|\\?|\\*|(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?(?:,(?:MON|TUE|WED|THU|FRI|SAT|SUN)(?:(?:-)(?:MON|TUE|WED|THU|FRI|SAT|SUN))?)*)(|\\s)+(\\?|\\*|(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?(?:,(?:|\\d{4})(?:(?:-|\\/|\\,)(?:|\\d{4}))?)*))$"; + + public const string RGXL_EMAIL + = """^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$"""; + + public const string RGXL_IP_V4 + = @"^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})){3}$"; + public const string TPL_DATE_HH_MM_SS_FFFFFF = "HH:mm:ss.ffffff"; public const string TPL_DATE_YYYY_MM_DD = "yyyy-MM-dd"; public const string TPL_DATE_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; diff --git a/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs b/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs index 084a9788..657a0475 100644 --- a/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs +++ b/src/backend/NetAdmin.Infrastructure/Constant/Numbers.cs @@ -10,17 +10,22 @@ namespace NetAdmin.Infrastructure.Constant; /// public static class Numbers { - public const int BULK_REQ_LIMIT = 100; // 鎵归噺璇锋眰鍏佽鐨勬渶澶ф暟閲 - public const int CONSOLE_LINE_LEN_LIMIT = 8192; // 鎺у埗鍙拌緭鍑虹殑鏈澶ч暱搴 - public const long DEF_SORT_VAL = 100; // 鎺掑簭榛樿鍊 - public const long DIC_CATALOG_ID_GEO_AREA = 379794295185413; // 瀛楀吀鐩綍缂栧彿-琛屾斂鍖哄垝瀛楀吀 - public const int HTTP_STATUS_BIZ_FAIL = 900; // Http鐘舵佺爜-涓氬姟寮傚父 - public const int QUERY_DEF_PAGE_SIZE = 20; // 鍒嗛〉鏌ヨ榛樿鐨勯〉瀹归噺 - public const int QUERY_LIMIT = 100; // 闈炲垎椤垫煡璇㈠厑璁歌繑鍥炵殑鏈澶ф潯鏁 - public const int QUERY_MAX_PAGE_NO = 1000; // 鍒嗛〉鏌ヨ鍏佽鏈澶х殑椤电爜 - public const int QUERY_MAX_PAGE_SIZE = 100; // 鍒嗛〉鏌ヨ鍏佽鏈澶х殑椤靛閲 - public const int RED_LOCK_EXPIRY_TIME_SECS = 30; // red lock锛 閿侀攣瀹氳繃鏈熸椂闂达紝閿佸尯鍩熷唴鐨勯昏緫鎵ц濡傛灉瓒呰繃杩囨湡鏃堕棿锛岄攣灏嗚閲婃斁 - public const int RED_LOCK_RETRY_TIME_SECS = 1; // red lock锛 閿佺瓑寰呮椂闂村唴锛屽涔呭皾璇曡幏鍙栦竴娆 - public const int RED_LOCK_WAIT_TIME_SECS = 10; // red lock锛 閿佺瓑寰呮椂闂,鐩稿悓鐨 resource 濡傛灉褰撳墠鐨勯攣琚叾浠栫嚎绋嬪崰鐢,鏈澶氱瓑寰呮椂闂 - public const int TIMEOUT_SECS_JOB = 600; // 瓒呮椂鏃堕棿锛氫綔涓 + public const int DEF_PAGE_SIZE_QUERY = 20; // 鍒嗛〉鏌ヨ榛樿鐨勯〉瀹归噺 + public const long DEF_SORT_VAL = 100; // 鎺掑簭榛樿鍊 + + public const int HTTP_STATUS_BIZ_FAIL = 900; // Http鐘舵佺爜-涓氬姟寮傚父 + public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 鍞竴缂栧彿锛氬瓧鍏哥洰褰-琛屾斂鍖哄垝瀛楀吀 + + public const int MAX_LIMIT_BULK_REQ = 100; // 鏈澶ч檺鍒讹細鎵归噺璇锋眰鏁 + public const int MAX_LIMIT_PRINT_LEN_CONTENT = 4096; // 鏈澶ч檺鍒讹細鎵撳嵃闀垮害锛圚TTP 鍐呭锛 + public const int MAX_LIMIT_PRINT_LEN_SQL = 4096; // 鏈澶ч檺鍒讹細鎵撳嵃闀垮害锛圫QL 璇彞锛 + public const int MAX_LIMIT_QUERY = 1000; // 鏈澶ч檺鍒讹細闈炲垎椤垫煡璇㈡潯鏁 + public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 鏈澶ч檺鍒讹細鍒嗛〉鏌ヨ椤电爜 + public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 鏈澶ч檺鍒讹細鍒嗛〉鏌ヨ椤靛閲 + + public const int SECS_CACHE_DEFAULT = 60; // 绉掞細缂撳瓨鏃堕棿-榛樿 + public const int SECS_RED_LOCK_EXPIRY = 30; // 绉掞細RedLock-閿佽繃鏈熸椂闂达紝閿佸尯鍩熷唴鐨勯昏緫鎵ц濡傛灉瓒呰繃杩囨湡鏃堕棿锛岄攣灏嗚閲婃斁 + public const int SECS_RED_LOCK_RETRY = 1; // 绉掞細RedLock-閿佺瓑寰呮椂闂村唴锛屽涔呭皾璇曡幏鍙栦竴娆 + public const int SECS_RED_LOCK_WAIT = 10; // 绉掞細RedLock-閿佺瓑寰呮椂闂达紝鐩稿悓鐨 resource 濡傛灉褰撳墠鐨勯攣琚叾浠栫嚎绋嬪崰鐢紝鏈澶氱瓑寰呮椂闂 + public const int SECS_TIMEOUT_JOB = 600; // 绉掞細瓒呮椂鏃堕棿-浣滀笟 } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Enums/Orders.cs b/src/backend/NetAdmin.Infrastructure/Enums/Orders.cs index 107161bd..ddf38249 100644 --- a/src/backend/NetAdmin.Infrastructure/Enums/Orders.cs +++ b/src/backend/NetAdmin.Infrastructure/Enums/Orders.cs @@ -19,4 +19,12 @@ public enum Orders /// [ResourceDescription(nameof(Ln.鍊掑簭鎺掑簭))] Descending = 2 + + , + + /// + /// 闅忔満鎺掑簭 + /// + [ResourceDescription(nameof(Ln.闅忔満鎺掑簭))] + Random = 3 } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs b/src/backend/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs index 299d2775..bc97519a 100644 --- a/src/backend/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs +++ b/src/backend/NetAdmin.Infrastructure/Exceptions/NetAdminGetLockerException.cs @@ -4,5 +4,5 @@ namespace NetAdmin.Infrastructure.Exceptions; /// 鍔犻攣澶辫触寮傚父 /// #pragma warning disable RCS1194 -public sealed class NetAdminGetLockerException : NetAdminUnexpectedException; +public sealed class NetAdminGetLockerException : NetAdminException; #pragma warning restore RCS1194 \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs new file mode 100644 index 00000000..daad770e --- /dev/null +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpContextExtensions.cs @@ -0,0 +1,25 @@ +namespace NetAdmin.Infrastructure.Extensions; + +/// +/// HttpContext 鎵╁睍鏂规硶 +/// +public static class HttpContextExtensions +{ + /// + /// 鑾峰彇瀹㈡埛绔湡瀹濱P + /// + public static IPAddress GetRealIpAddress(this HttpContext me) + { + #pragma warning disable IDE0046 + if (me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_FORWARDED_FOR, out var ips1) && + #pragma warning restore IDE0046 + IPAddress.TryParse(ips1.FirstOrDefault()?.Split(',').FirstOrDefault(), out var ip1)) { + return ip1; + } + + return me.Request.Headers.TryGetValue(Chars.FLG_HTTP_HEADER_KEY_X_REAL_IP, out var ips2) && + IPAddress.TryParse(ips2.FirstOrDefault()?.Split(',').FirstOrDefault(), out var ip2) + ? ip2 + : me.Connection.RemoteIpAddress; + } +} \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs index 7a2ab462..34306ad1 100644 --- a/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpRequestMessageExtensions.cs @@ -19,7 +19,8 @@ public static class HttpRequestMessageExtensions /// public static async Task LogAsync(this HttpRequestMessage me, ILogger logger) { - logger.Info($"HTTP Request: {await me.BuildJsonAsync().ConfigureAwait(false)}"); + logger.Info( + $"HTTP Request: {(await me.BuildJsonAsync().ConfigureAwait(false))?.Sub(0, Numbers.MAX_LIMIT_PRINT_LEN_CONTENT)}"); return me; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs b/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs index 2375df83..408052a3 100644 --- a/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs +++ b/src/backend/NetAdmin.Infrastructure/Extensions/HttpResponseMessageExtensions.cs @@ -11,7 +11,9 @@ public static class HttpResponseMessageExtensions public static async Task LogAsync(this HttpResponseMessage me, ILogger logger , Func bodyPreHandle = null) { - logger.Info(await me.BuildJsonAsync(bodyPreHandle).ConfigureAwait(false)); + logger.Info( + (await me.BuildJsonAsync(bodyPreHandle).ConfigureAwait(false))?.Sub( + 0, Numbers.MAX_LIMIT_PRINT_LEN_CONTENT)); } /// @@ -20,7 +22,8 @@ public static class HttpResponseMessageExtensions public static async Task LogExceptionAsync(this HttpResponseMessage me, string errors, ILogger logger , Func bodyHandle = null) { - logger.Warn($"{errors}: {await me.BuildJsonAsync(bodyHandle).ConfigureAwait(false)}"); + logger.Warn( + $"{errors}: {(await me.BuildJsonAsync(bodyHandle).ConfigureAwait(false))?.Sub(0, Numbers.MAX_LIMIT_PRINT_LEN_CONTENT)}"); } /// diff --git a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj index 32a60da1..0b3640c9 100644 --- a/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj +++ b/src/backend/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj @@ -7,12 +7,12 @@ - - - - - - + + + + + + diff --git a/src/backend/NetAdmin.Infrastructure/Utils/UserAgentParser.cs b/src/backend/NetAdmin.Infrastructure/Utils/UserAgentParser.cs index 7d8e4965..bed3156a 100644 --- a/src/backend/NetAdmin.Infrastructure/Utils/UserAgentParser.cs +++ b/src/backend/NetAdmin.Infrastructure/Utils/UserAgentParser.cs @@ -315,8 +315,9 @@ public sealed class UserAgentParser private bool SetPlatform() { - var kv = _platforms.First(x => // - Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}", RegexOptions.IgnoreCase)); + var kv = _platforms.FirstOrDefault(x => // + Regex.IsMatch(_agent, $"{Regex.Escape(x.Key)}" + , RegexOptions.IgnoreCase)); if (kv.Key == null) { Platform = "Unknown Platform"; diff --git a/src/backend/NetAdmin.Infrastructure/commonSettings.json b/src/backend/NetAdmin.Infrastructure/commonSettings.json index 3e0c3ef0..346aaad0 100644 --- a/src/backend/NetAdmin.Infrastructure/commonSettings.json +++ b/src/backend/NetAdmin.Infrastructure/commonSettings.json @@ -297,8 +297,8 @@ // 鏁版嵁缂撳瓨 { "Name": "DataCache", - "ConnStr": "localhost:6379", - "Database": 0 + "ConnStr": "localhost:6379,abortConnect=false", + "DataBase": 0, } ] }, diff --git a/src/backend/NetAdmin.ScheduledService/Startup.cs b/src/backend/NetAdmin.ScheduledService/Startup.cs index a61503b5..5e0d2552 100644 --- a/src/backend/NetAdmin.ScheduledService/Startup.cs +++ b/src/backend/NetAdmin.ScheduledService/Startup.cs @@ -24,12 +24,12 @@ public sealed class Startup : Host.Startup /// /// 閰嶇疆搴旂敤绋嬪簭涓棿浠 /// - public void Configure(IApplicationBuilder app) + public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifeTime) { - _ = app // - .UseRealIp() // 浣跨敤RealIp涓棿浠讹紝鐢ㄤ簬鑾峰彇鐪熷疄瀹㈡埛绔疘P鍦板潃 - .EnableBuffering() // 鍚敤璇锋眰浣撶紦鍐诧紝鍏佽澶氭璇诲彇璇锋眰浣 - .UseMiddleware() // 浣跨敤RequestAuditMiddleware涓棿浠讹紝鎵ц璇锋眰瀹¤ + _ = app // + .UseMiddleware() // 瀹夊叏鍋滄満涓棿浠 + .EnableBuffering() // 鍚敤璇锋眰浣撶紦鍐诧紝鍏佽澶氭璇诲彇璇锋眰浣 + .UseMiddleware() // 浣跨敤RequestAuditMiddleware涓棿浠讹紝鎵ц璇锋眰瀹¤ #if DEBUG .UseOpenApiSkin() // 浣跨敤OpenApiSkin涓棿浠讹紙浠呭湪璋冭瘯妯″紡涓嬶級锛屾彁渚汼wagger UI鐨偆 #else @@ -41,6 +41,7 @@ public sealed class Startup : Host.Startup .UseRouting() // 浣跨敤Routing涓棿浠讹紝閰嶇疆璺敱鏄犲皠 .UseMiddleware() // 浣跨敤RemoveNullNodeMiddleware涓棿浠讹紝鍒犻櫎JSON涓殑绌鸿妭鐐 .UseEndpoints(); // 閰嶇疆绔偣浠ュ鐞嗚姹 + _ = lifeTime.ApplicationStopping.Register(SafetyShopHostMiddleware.OnStopping); } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs index 3a5f2efb..aa594f0f 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ApiService.cs @@ -21,6 +21,13 @@ public sealed class ApiService( throw new NotImplementedException(); } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public Task CreateAsync(CreateApiReq req) { @@ -140,9 +147,12 @@ public sealed class ApiService( private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.CreatedTime), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.CreatedTime); diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs index 4a562a9a..f97f1e6c 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/CacheService.cs @@ -10,11 +10,21 @@ namespace NetAdmin.SysComponent.Application.Services.Sys; public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) // : ServiceBase, ICacheService { + private readonly InstanceNode _redisInstance; + + /// + /// Initializes a new instance of the class. + /// + public CacheService(IConnectionMultiplexer connectionMultiplexer, IOptions redisOptions) // + : this(connectionMultiplexer) // + { + _redisInstance = redisOptions.Value.Instances.First(x => x.Name == Chars.FLG_REDIS_INSTANCE_DATA_CACHE); + } + /// public async Task CacheStatisticsAsync() { - var database = connectionMultiplexer.GetDatabase(); - + var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); return new CacheStatisticsRsp((string)await database.ExecuteAsync("info").ConfigureAwait(false)) { DbSize = (long)await database.ExecuteAsync("dbSize").ConfigureAwait(false) }; @@ -24,7 +34,7 @@ public sealed class CacheService(IConnectionMultiplexer connectionMultiplexer) / public async Task> GetAllEntriesAsync(PagedQueryReq req) { req.ThrowIfInvalid(); - var database = connectionMultiplexer.GetDatabase((int?)req.Filter?.DbIndex ?? 0); + var database = connectionMultiplexer.GetDatabase(_redisInstance.Database); var redisResults = (RedisResult[])await database .ExecuteAsync("scan", (req.Page - 1) * req.PageSize, "count" , req.PageSize) diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs index ff5d26e8..a2df5a5d 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConfigService.cs @@ -26,6 +26,13 @@ public sealed class ConfigService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateConfigReq req) { @@ -113,8 +120,12 @@ public sealed class ConfigService(DefaultRepository rpo) // .Include(a => a.UserRegisterRole) .WhereDynamicFilter(req.DynamicFilter) .WhereIf( // - req.Filter?.Enabled.HasValue ?? false, a => a.Enabled == req.Filter.Enabled.Value) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + req.Filter?.Enabled.HasValue ?? false, a => a.Enabled == req.Filter.Enabled.Value); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs index 6979b22f..29a43831 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/ConstantService.cs @@ -18,17 +18,28 @@ public sealed class ConstantService : ServiceBase, IConstantSe /// public IDictionary> GetEnums() { - return App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null) - .ToDictionary(x => x.Name, x => // - x.GetEnumValues() - .Cast() - .ToDictionary( // - y => y.ToString() - , y => new[] { - Convert.ToInt64(y, CultureInfo.InvariantCulture) - .ToString(CultureInfo.InvariantCulture) - , y.ResDesc() - })); + var ret = App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null) + .ToDictionary(x => x.Name, x => // + x.GetEnumValues() + .Cast() + .ToDictionary( // + y => y.ToString() + , y => new[] { + Convert.ToInt64(y, CultureInfo.InvariantCulture) + .ToString(CultureInfo.InvariantCulture) + , y.ResDesc() + })); + + ret.Add($"{nameof(HttpStatusCode)}s", Enum.GetNames() + .ToDictionary( // + x => x, x => new[] { + Convert.ToInt64( // + Enum.Parse(x) + , CultureInfo.InvariantCulture) + .ToString(CultureInfo.InvariantCulture) + , x + })); + return ret; } /// diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs index 1b1df69b..b6ae5d54 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DeptService.cs @@ -25,6 +25,13 @@ public sealed class DeptService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// /// Parent_department_does_not_exist public async Task CreateAsync(CreateDeptReq req) @@ -88,12 +95,11 @@ public sealed class DeptService(DefaultRepository rpo) // } /// - /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDeptReq req) { req.ThrowIfInvalid(); return await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0 - ? throw new NetAdminUnexpectedException() + ? null : (await QueryInternal(new QueryReq { Filter = new QueryDeptReq { Id = req.Id } }, true) .ToTreeListAsync() .ConfigureAwait(false))[0] @@ -118,6 +124,10 @@ public sealed class DeptService(DefaultRepository rpo) // ret = ret.AsTreeCte(); } + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Sort), StringComparison.OrdinalIgnoreCase) ?? true) { diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs index 98fb1298..fc5f85a5 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicCatalogService.cs @@ -25,6 +25,13 @@ public sealed class DicCatalogService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// /// The_parent_node_does_not_exist public async Task CreateAsync(CreateDicCatalogReq req) @@ -88,7 +95,6 @@ public sealed class DicCatalogService(DefaultRepository rpo) // /// /// The_parent_node_does_not_exist - /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDicCatalogReq req) { req.ThrowIfInvalid(); @@ -98,7 +104,7 @@ public sealed class DicCatalogService(DefaultRepository rpo) // } if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); @@ -113,9 +119,12 @@ public sealed class DicCatalogService(DefaultRepository rpo) // private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs index bb16f0f7..e4582e98 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/DicContentService.cs @@ -25,6 +25,13 @@ public sealed class DicContentService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// /// Dictionary_directory_does_not_exist public async Task CreateAsync(CreateDicContentReq req) @@ -90,7 +97,6 @@ public sealed class DicContentService(DefaultRepository rpo) // /// /// Dictionary_directory_does_not_exist - /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateDicContentReq req) { req.ThrowIfInvalid(); @@ -103,7 +109,7 @@ public sealed class DicContentService(DefaultRepository rpo) // } if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); @@ -118,9 +124,12 @@ public sealed class DicContentService(DefaultRepository rpo) // private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs index 2803d4c2..648e2845 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobRecordService.cs @@ -26,6 +26,13 @@ public sealed class JobRecordService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateJobRecordReq req) { @@ -106,8 +113,12 @@ public sealed class JobRecordService(DefaultRepository rpo) // .WhereDynamic(req.Filter) .WhereIf( // req.Keywords?.Length > 0 - , a => a.JobId == req.Keywords.Int64Try(0) || a.Id == req.Keywords.Int64Try(0)) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + , a => a.JobId == req.Keywords.Int64Try(0) || a.Id == req.Keywords.Int64Try(0)); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs index a253961b..0dc70fe0 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/JobService.cs @@ -29,6 +29,13 @@ public sealed class JobService(DefaultRepository rpo, IJobRecordService return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateJobReq req) { @@ -119,13 +126,14 @@ public sealed class JobService(DefaultRepository rpo, IJobRecordService } ] }; - var job = await QueryInternal(new QueryReq { DynamicFilter = df, Count = 1 }, true) - .Where(a => !Rpo.Orm.Select() - .As("b") - .Where(b => b.JobId == a.Id && b.TimeId == a.NextTimeId) - .Any()) - .ToOneAsync() - .ConfigureAwait(false); + var job + = await QueryInternal(new QueryReq { DynamicFilter = df, Count = 1, Order = Orders.Random }) + .Where(a => !Rpo.Orm.Select() + .As("b") + .Where(b => b.JobId == a.Id && b.TimeId == a.NextTimeId) + .Any()) + .ToOneAsync() + .ConfigureAwait(false); return job == null ? null : await UpdateAsync(job.Adapt() with { @@ -175,7 +183,7 @@ public sealed class JobService(DefaultRepository rpo, IJobRecordService { return Rpo.UpdateDiy.Set(a => a.Status == JobStatues.Idle) .Where(a => a.Status == JobStatues.Running && - a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.TIMEOUT_SECS_JOB)) + a.LastExecTime < DateTime.Now.AddSeconds(-Numbers.SECS_TIMEOUT_JOB)) .ExecuteAffrowsAsync(); } @@ -211,17 +219,23 @@ public sealed class JobService(DefaultRepository rpo, IJobRecordService .GetNextOccurrence(DateTime.UtcNow, TimeZoneInfo.Utc); } - private ISelect QueryInternal(QueryReq req, bool orderByRandom = false) + private ISelect QueryInternal(QueryReq req) { var ret = Rpo.Select.Include(a => a.User) .WhereDynamicFilter(req.DynamicFilter) .WhereDynamic(req.Filter) .WhereIf( // req.Keywords?.Length > 0 - , a => a.Id == req.Keywords.Int64Try(0) || a.JobName.Contains(req.Keywords)) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); - return !orderByRandom && (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) - ? ret.OrderByDescending(a => a.LastExecTime) - : ret.OrderByRandom(); + , a => a.Id == req.Keywords.Int64Try(0) || a.JobName.Contains(req.Keywords)); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + if (!req.Prop?.Equals(nameof(req.Filter.LastExecTime), StringComparison.OrdinalIgnoreCase) ?? true) { + ret = ret.OrderByDescending(a => a.LastExecTime); + } + + return ret; } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs index 272a1aba..46e73c68 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/MenuService.cs @@ -25,6 +25,13 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateMenuReq req) { @@ -37,12 +44,12 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); - var effect = await Rpo.DeleteAsync(a => a.Id == req.Id).ConfigureAwait(false); - effect += await Rpo.Orm.Delete() - .Where(a => a.MenuId == req.Id) - .ExecuteAffrowsAsync() - .ConfigureAwait(false); - return effect; + var ret = await Rpo.DeleteAsync(a => a.Id == req.Id).ConfigureAwait(false); + _ = await Rpo.Orm.Delete() + .Where(a => a.MenuId == req.Id) + .ExecuteAffrowsAsync() + .ConfigureAwait(false); + return ret; } /// @@ -76,12 +83,11 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us } /// - /// NetAdminUnexpectedException public async Task UpdateAsync(UpdateMenuReq req) { req.ThrowIfInvalid(); if (await Rpo.UpdateDiy.SetSource(req).ExecuteAffrowsAsync().ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = await Rpo.Where(a => a.Id == req.Id).ToOneAsync().ConfigureAwait(false); @@ -124,11 +130,12 @@ public sealed class MenuService(DefaultRepository rpo, IUserService us private ISelect QueryInternal(QueryReq req) { - return Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) - .OrderByDescending(a => a.Sort) - .OrderBy(a => a.Name) - .OrderBy(a => a.Id); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + return req.Order == Orders.Random + ? ret.OrderByRandom() + : ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) + .OrderByDescending(a => a.Sort) + .OrderBy(a => a.Name) + .OrderBy(a => a.Id); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs index 77a138b4..f4244f5d 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RequestLogService.cs @@ -25,6 +25,13 @@ public sealed class RequestLogService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateRequestLogReq req) { @@ -106,10 +113,12 @@ public sealed class RequestLogService(DefaultRepository rpo) // private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.Include(a => a.Api) - .WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.Include(a => a.Api).WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.CreatedTime), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.CreatedTime); diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs index 2bd51353..4399b80d 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/RoleService.cs @@ -25,6 +25,13 @@ public sealed class RoleService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateRoleReq req) { @@ -116,8 +123,12 @@ public sealed class RoleService(DefaultRepository rpo) // .WhereIf( // req.Keywords?.Length > 0 , a => a.Id == req.Keywords.Int64Try(0) || a.Name.Contains(req.Keywords) || - a.Summary.Contains(req.Keywords)) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + a.Summary.Contains(req.Keywords)); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Sort), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Sort); diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs index e306ddbc..d327c196 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgDeptService.cs @@ -26,6 +26,13 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateSiteMsgDeptReq req) { @@ -102,9 +109,12 @@ public sealed class SiteMsgDeptService(DefaultRepository rpo) / private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs index b21d739e..94229a36 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgFlagService.cs @@ -26,6 +26,13 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateSiteMsgFlagReq req) { @@ -108,9 +115,12 @@ public sealed class SiteMsgFlagService(DefaultRepository rpo) / private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs index e77d2094..db347b54 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgRoleService.cs @@ -26,6 +26,13 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateSiteMsgRoleReq req) { @@ -102,9 +109,12 @@ public sealed class SiteMsgRoleService(DefaultRepository rpo) / private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs index d776ccd6..0c08a427 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgService.cs @@ -12,8 +12,10 @@ using NetAdmin.SysComponent.Application.Services.Sys.Dependency; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class SiteMsgService(DefaultRepository rpo, ContextUserInfo contextUserInfo - , ISiteMsgFlagService siteMsgFlagService) // +public sealed class SiteMsgService( + DefaultRepository rpo + , ContextUserInfo contextUserInfo + , ISiteMsgFlagService siteMsgFlagService) // : RepositoryService(rpo), ISiteMsgService { /// @@ -30,6 +32,13 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateSiteMsgReq req) { @@ -109,7 +118,7 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs .Count(out var total) .ToListAsync(a => new { a.CreatedTime - , a.Creator + , a.CreatedUserName , a.Id , a.MsgType , a.Summary @@ -275,8 +284,12 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs .WhereIf( // req.Keywords?.Length > 0 , a => a.Id == req.Keywords.Int64Try(0) || a.Title.Contains(req.Keywords) || - a.Summary.Contains(req.Keywords)) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + a.Summary.Contains(req.Keywords)); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } @@ -300,9 +313,9 @@ public sealed class SiteMsgService(DefaultRepository rpo, ContextUs .WhereDynamicFilter(req.DynamicFilter) .Where((a, _, c, d, e, f) => (SqlExt.EqualIsNull(f.UserSiteMsgStatus) || - f.UserSiteMsgStatus != UserSiteMsgStatues.Deleted) && (a.MsgType == SiteMsgTypes.Public || - c.DeptId == contextUserInfo.DeptId || roleIds.Contains(d.RoleId) || - e.UserId == contextUserInfo.Id)) + f.UserSiteMsgStatus != UserSiteMsgStatues.Deleted) && + (a.MsgType == SiteMsgTypes.Public || c.DeptId == contextUserInfo.DeptId || + roleIds.Contains(d.RoleId) || e.UserId == contextUserInfo.Id)) .GroupBy((a, _, _, _, _, _) => a.Id); } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs index 8afc49b1..499cc4dd 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/SiteMsgUserService.cs @@ -26,6 +26,13 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateSiteMsgUserReq req) { @@ -102,9 +109,12 @@ public sealed class SiteMsgUserService(DefaultRepository rpo) / private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs index a6aa349a..72986d60 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserProfileService.cs @@ -27,6 +27,13 @@ public sealed class UserProfileService(DefaultRepository rpo) / return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateUserProfileReq req) { @@ -146,18 +153,21 @@ public sealed class UserProfileService(DefaultRepository rpo) / QueryReq req) { #pragma warning disable CA1305 - return Rpo.Orm.Select() - .LeftJoin((a, b, _, __, ___) => - a.NationArea.ToString() == b.Value && b.CatalogId == Numbers.DIC_CATALOG_ID_GEO_AREA) - .LeftJoin((a, _, c, __, ___) => - a.CompanyArea.ToString() == c.Value && c.CatalogId == Numbers.DIC_CATALOG_ID_GEO_AREA) - .LeftJoin((a, _, __, d, ___) => - a.HomeArea.ToString() == d.Value && d.CatalogId == Numbers.DIC_CATALOG_ID_GEO_AREA) - .LeftJoin((a, _, __, ___, e) => a.EmergencyContactArea.ToString() == e.Value && - e.CatalogId == Numbers.DIC_CATALOG_ID_GEO_AREA) - .WhereDynamicFilter(req.DynamicFilter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) - .OrderByDescending((a, _, __, ___, ____) => a.Id); + var ret = Rpo.Orm.Select() + .LeftJoin((a, b, _, __, ___) => + a.NationArea.ToString() == b.Value && b.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) + .LeftJoin((a, _, c, __, ___) => + a.CompanyArea.ToString() == c.Value && + c.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) + .LeftJoin((a, _, __, d, ___) => + a.HomeArea.ToString() == d.Value && d.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) + .LeftJoin((a, _, __, ___, e) => a.EmergencyContactArea.ToString() == e.Value && + e.CatalogId == Numbers.ID_DIC_CATALOG_GEO_AREA) + .WhereDynamicFilter(req.DynamicFilter); + return req.Order == Orders.Random + ? ret.OrderByRandom() + : ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending) + .OrderByDescending((a, _, __, ___, ____) => a.Id); #pragma warning restore CA1305 } } \ No newline at end of file diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs index ca5c3cfd..f636dbe3 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/UserService.cs @@ -13,10 +13,11 @@ using NetAdmin.SysComponent.Application.Services.Sys.Dependency; namespace NetAdmin.SysComponent.Application.Services.Sys; /// -public sealed class UserService(DefaultRepository rpo // - , IUserProfileService userProfileService // - , IVerifyCodeService verifyCodeService // - , IEventPublisher eventPublisher) // +public sealed class UserService( + DefaultRepository rpo // + , IUserProfileService userProfileService // + , IVerifyCodeService verifyCodeService // + , IEventPublisher eventPublisher) // : RepositoryService(rpo), IUserService { private readonly Expression> _selectUserFields = a => new Sys_User { @@ -63,6 +64,15 @@ public sealed class UserService(DefaultRepository rpo / .ConfigureAwait(false); } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + #pragma warning disable VSTHRD103 + return QueryInternal(req).CountAsync(); + #pragma warning restore VSTHRD103 + } + /// public async Task CreateAsync(CreateUserReq req) { @@ -88,20 +98,17 @@ public sealed class UserService(DefaultRepository rpo / public async Task DeleteAsync(DelReq req) { req.ThrowIfInvalid(); - var effect = 0; // 鍒犻櫎涓昏〃 - effect += await Rpo.DeleteAsync(req.Id).ConfigureAwait(false); + var ret = await Rpo.DeleteAsync(req.Id).ConfigureAwait(false); // 鍒犻櫎鍒嗚〃 - effect += await Rpo.Orm.Delete(new { UserId = req.Id }) - .ExecuteAffrowsAsync() - .ConfigureAwait(false); + _ = await Rpo.Orm.Delete(new { UserId = req.Id }).ExecuteAffrowsAsync().ConfigureAwait(false); // 鍒犻櫎妗f琛 - effect += await userProfileService.DeleteAsync(req).ConfigureAwait(false); + _ = await userProfileService.DeleteAsync(req).ConfigureAwait(false); - return effect; + return ret; } /// @@ -255,7 +262,7 @@ public sealed class UserService(DefaultRepository rpo / .UpdateColumns(a => a.Avatar) .ExecuteAffrowsAsync() .ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) @@ -289,7 +296,7 @@ public sealed class UserService(DefaultRepository rpo / .UpdateColumns(a => a.Email) .ExecuteAffrowsAsync() .ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) @@ -341,7 +348,7 @@ public sealed class UserService(DefaultRepository rpo / .UpdateColumns(a => a.Mobile) .ExecuteAffrowsAsync() .ConfigureAwait(false) <= 0) { - throw new NetAdminUnexpectedException(); + return null; } var ret = (await QueryAsync(new QueryReq { Filter = new QueryUserReq { Id = UserToken.Id } }) @@ -370,7 +377,7 @@ public sealed class UserService(DefaultRepository rpo / .UpdateColumns(a => a.Password) .ExecuteAffrowsAsync() .ConfigureAwait(false); - return ret <= 0 ? throw new NetAdminUnexpectedException() : (uint)ret; + return (uint)ret; } /// @@ -478,9 +485,12 @@ public sealed class UserService(DefaultRepository rpo / private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } @@ -511,8 +521,12 @@ public sealed class UserService(DefaultRepository rpo / req.Keywords?.Length > 0 , a => a.Id == req.Keywords.Int64Try(0) || a.UserName.Contains(req.Keywords) || a.Mobile.Contains(req.Keywords) || a.Email.Contains(req.Keywords) || - a.Summary.Contains(req.Keywords)) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + a.Summary.Contains(req.Keywords)); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.CreatedTime), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.CreatedTime); diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs index 310d0a41..af50d1f5 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Sys/VerifyCodeService.cs @@ -30,6 +30,13 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateVerifyCodeReq req) { @@ -180,9 +187,12 @@ public sealed class VerifyCodeService(DefaultRepository rpo, IEv private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs index a944b3d9..3ea2a791 100644 --- a/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs +++ b/src/backend/NetAdmin.SysComponent.Application/Services/Tpl/ExampleService.cs @@ -26,6 +26,13 @@ public sealed class ExampleService(DefaultRepository rpo) // return ret; } + /// + public Task CountAsync(QueryReq req) + { + req.ThrowIfInvalid(); + return QueryInternal(req).CountAsync(); + } + /// public async Task CreateAsync(CreateExampleReq req) { @@ -102,9 +109,12 @@ public sealed class ExampleService(DefaultRepository rpo) // private ISelect QueryInternal(QueryReq req) { - var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter) - .WhereDynamic(req.Filter) - .OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); + var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter); + if (req.Order == Orders.Random) { + return ret.OrderByRandom(); + } + + ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending); if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) { ret = ret.OrderByDescending(a => a.Id); } diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs index 941e330e..6f87ea6b 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/ApiCache.cs @@ -16,6 +16,12 @@ public sealed class ApiCache(IDistributedCache cache, IApiService service) // return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateApiReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs index 10ebc7b7..767de483 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/CacheCache.cs @@ -15,7 +15,7 @@ public sealed class CacheCache(IDistributedCache cache, ICacheService service) / { #if !DEBUG return GetOrCreateAsync( // - GetCacheKey(string.Empty), Service.CacheStatisticsAsync, TimeSpan.FromMinutes(1)); + GetCacheKey(string.Empty), Service.CacheStatisticsAsync, TimeSpan.FromSeconds(Numbers.CACHE_SECS_DEFAULT)); #else return Service.CacheStatisticsAsync(); #endif diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs index 07fd42ef..a671aa90 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/CaptchaCache.cs @@ -14,7 +14,7 @@ public sealed class CaptchaCache(IDistributedCache cache, ICaptchaService servic { var captchaRsp = await Service.GetCaptchaImageAsync().ConfigureAwait(false); await CreateAsync(GetCacheKey(captchaRsp.Id, nameof(CaptchaCache)), captchaRsp.SawOffsetX -, TimeSpan.FromMinutes(1)) + , TimeSpan.FromSeconds(Numbers.SECS_CACHE_DEFAULT)) .ConfigureAwait(false); return captchaRsp; } diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs index e4604a9f..21a2760b 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/ConfigCache.cs @@ -16,6 +16,12 @@ public sealed class ConfigCache(IDistributedCache cache, IConfigService service) return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateConfigReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs index 14198619..96ccb347 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/DeptCache.cs @@ -16,6 +16,12 @@ public sealed class DeptCache(IDistributedCache cache, IDeptService service) // return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateDeptReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCache.cs index e3db5eb9..bcd5bd62 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCache.cs @@ -65,7 +65,7 @@ public sealed class DicCache(IDistributedCache cache, IDicService service) // #if !DEBUG return GetOrCreateAsync( // GetCacheKey(req.GetHashCode().ToString(CultureInfo.InvariantCulture)) // - , () => Service.GetDicValueAsync(req), TimeSpan.FromMinutes(1)); + , () => Service.GetDicValueAsync(req), TimeSpan.FromSeconds(Numbers.CACHE_SECS_DEFAULT)); #else return Service.GetDicValueAsync(req); #endif diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs index a18e8f40..f61cf800 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicCatalogCache.cs @@ -16,6 +16,12 @@ public sealed class DicCatalogCache(IDistributedCache cache, IDicCatalogService return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateDicCatalogReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs index 42660519..ee0f096c 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/DicContentCache.cs @@ -16,6 +16,12 @@ public sealed class DicContentCache(IDistributedCache cache, IDicContentService return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateDicContentReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/JobCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/JobCache.cs index 72871077..43dae216 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/JobCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/JobCache.cs @@ -17,6 +17,12 @@ public sealed class JobCache(IDistributedCache cache, IJobService service) return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateJobReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs index e3cbfc1e..415c0922 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/JobRecordCache.cs @@ -16,6 +16,12 @@ public sealed class JobRecordCache(IDistributedCache cache, IJobRecordService se return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateJobRecordReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs index a4e7aeca..15310602 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/MenuCache.cs @@ -16,6 +16,12 @@ public sealed class MenuCache(IDistributedCache cache, IMenuService service) // return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateMenuReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs index 5b9e6b78..4b24b10c 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/RequestLogCache.cs @@ -16,6 +16,12 @@ public sealed class RequestLogCache(IDistributedCache cache, IRequestLogService return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateRequestLogReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs index c9361b9d..d3119f97 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/RoleCache.cs @@ -16,6 +16,12 @@ public sealed class RoleCache(IDistributedCache cache, IRoleService service) // return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateRoleReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs index e631d045..17366674 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgCache.cs @@ -17,6 +17,12 @@ public sealed class SiteMsgCache(IDistributedCache cache, ISiteMsgService servic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateSiteMsgReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs index 4b7f9089..05d4981f 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgDeptCache.cs @@ -16,6 +16,12 @@ public sealed class SiteMsgDeptCache(IDistributedCache cache, ISiteMsgDeptServic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateSiteMsgDeptReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs index 5f2b5b11..7ffd75e2 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgFlagCache.cs @@ -16,6 +16,12 @@ public sealed class SiteMsgFlagCache(IDistributedCache cache, ISiteMsgFlagServic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateSiteMsgFlagReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs index 9c362a46..5f591c6d 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgRoleCache.cs @@ -16,6 +16,12 @@ public sealed class SiteMsgRoleCache(IDistributedCache cache, ISiteMsgRoleServic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateSiteMsgRoleReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs index 3c90e0ec..8c60aef4 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/SiteMsgUserCache.cs @@ -16,6 +16,12 @@ public sealed class SiteMsgUserCache(IDistributedCache cache, ISiteMsgUserServic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateSiteMsgUserReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs index 76a27958..8f258967 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserCache.cs @@ -29,6 +29,12 @@ public sealed class UserCache(IDistributedCache cache, IUserService service, IVe return Service.CheckUserNameAvailableAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateUserReq req) { @@ -77,7 +83,7 @@ public sealed class UserCache(IDistributedCache cache, IUserService service, IVe #if !DEBUG return GetOrCreateAsync( // GetCacheKey(req.GetHashCode().ToString(CultureInfo.InvariantCulture)) // - , () => Service.QueryAsync(req), TimeSpan.FromMinutes(1)); + , () => Service.QueryAsync(req), TimeSpan.FromSeconds(Numbers.CACHE_SECS_DEFAULT)); #else return Service.QueryAsync(req); #endif @@ -194,7 +200,7 @@ public sealed class UserCache(IDistributedCache cache, IUserService service, IVe #if !DEBUG return GetOrCreateAsync( // GetCacheKey(Service.UserToken.Id.ToString(CultureInfo.InvariantCulture)), Service.UserInfoAsync -, TimeSpan.FromMinutes(1)); + , TimeSpan.FromSeconds(Numbers.CACHE_SECS_DEFAULT)); #else return Service.UserInfoAsync(); #endif diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs index 15e5e30b..c13aac4f 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/UserProfileCache.cs @@ -16,6 +16,12 @@ public sealed class UserProfileCache(IDistributedCache cache, IUserProfileServic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateUserProfileReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs index 5fcc820f..9bd7106a 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Sys/VerifyCodeCache.cs @@ -17,6 +17,12 @@ public sealed class VerifyCodeCache(IDistributedCache cache, IVerifyCodeService return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateVerifyCodeReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs b/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs index 394ee721..3063a01b 100644 --- a/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs +++ b/src/backend/NetAdmin.SysComponent.Cache/Tpl/ExampleCache.cs @@ -16,6 +16,12 @@ public sealed class ExampleCache(IDistributedCache cache, IExampleService servic return Service.BulkDeleteAsync(req); } + /// + public Task CountAsync(QueryReq req) + { + return Service.CountAsync(req); + } + /// public Task CreateAsync(CreateExampleReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs index 8e77a338..21a56e6a 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ApiController.cs @@ -24,6 +24,14 @@ public sealed class ApiController(IApiCache cache) : ControllerBase + /// 鎺ュ彛璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓鎺ュ彛 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs index 66187c10..821046b3 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/ConfigController.cs @@ -24,6 +24,14 @@ public sealed class ConfigController(IConfigCache cache) : ControllerBase + /// 閰嶇疆璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓閰嶇疆 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs index bf305cb1..8d79c6db 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/DeptController.cs @@ -23,6 +23,14 @@ public sealed class DeptController(IDeptCache cache) : ControllerBase + /// 閮ㄩ棬璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓閮ㄩ棬 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs index da24ccad..e851f046 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/JobController.cs @@ -24,6 +24,14 @@ public sealed class JobController(IJobCache cache) : ControllerBase + /// 璁″垝浣滀笟璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓璁″垝浣滀笟 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/LogController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/LogController.cs index 3c589837..1abccf5a 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/LogController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/LogController.cs @@ -25,6 +25,14 @@ public sealed class LogController(IRequestLogCache cache) : ControllerBase + /// 璇锋眰鏃ュ織璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓璇锋眰鏃ュ織 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs index a5c3e0a2..ef84718f 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/MenuController.cs @@ -23,6 +23,14 @@ public sealed class MenuController(IMenuCache cache) : ControllerBase + /// 鑿滃崟璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓鑿滃崟 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs index ff09d7b1..c984662c 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/RoleController.cs @@ -23,6 +23,14 @@ public sealed class RoleController(IRoleCache cache) : ControllerBase + /// 瑙掕壊璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓瑙掕壊 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs index 7cc18156..56455af2 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/SiteMsgController.cs @@ -25,6 +25,14 @@ public sealed class SiteMsgController(ISiteMsgCache cache) : ControllerBase + /// 绔欏唴淇¤鏁 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓绔欏唴淇 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs index b24fbafe..56292c6d 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/UserController.cs @@ -44,6 +44,14 @@ public sealed class UserController(IUserCache cache, IConfigCache configCache) return Cache.CheckUserNameAvailableAsync(req); } + /// + /// 鐢ㄦ埛璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓鐢ㄦ埛 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs index 4ab462c9..d9734eb6 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Sys/VerifyCodeController.cs @@ -15,49 +15,71 @@ namespace NetAdmin.SysComponent.Host.Controllers.Sys; public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache captchaCache) : ControllerBase(cache), IVerifyCodeModule { - /// + /// + /// 鎵归噺鍒犻櫎楠岃瘉鐮 + /// [NonAction] public Task BulkDeleteAsync(BulkReq req) { return Cache.BulkDeleteAsync(req); } - /// + /// + /// 楠岃瘉鐮佽鏁 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + + /// + /// 鍒涘缓楠岃瘉鐮 + /// [NonAction] public Task CreateAsync(CreateVerifyCodeReq req) { return Cache.CreateAsync(req); } - /// + /// + /// 鍒犻櫎楠岃瘉鐮 + /// [NonAction] public Task DeleteAsync(DelReq req) { return Cache.DeleteAsync(req); } - /// + /// + /// 鍒ゆ柇楠岃瘉鐮佹槸鍚﹀瓨鍦 + /// [NonAction] public Task ExistAsync(QueryReq req) { return Cache.ExistAsync(req); } - /// + /// + /// 鑾峰彇鍗曚釜楠岃瘉鐮 + /// [NonAction] public Task GetAsync(QueryVerifyCodeReq req) { return Cache.GetAsync(req); } - /// + /// + /// 鍒嗛〉鏌ヨ楠岃瘉鐮 + /// [NonAction] public Task> PagedQueryAsync(PagedQueryReq req) { return Cache.PagedQueryAsync(req); } - /// + /// + /// 鏌ヨ楠岃瘉鐮 + /// [NonAction] public Task> QueryAsync(QueryReq req) { @@ -75,7 +97,9 @@ public sealed class VerifyCodeController(IVerifyCodeCache cache, ICaptchaCache c return await Cache.SendVerifyCodeAsync(req).ConfigureAwait(false); } - /// + /// + /// 鏇存柊楠岃瘉鐮 + /// [NonAction] public Task UpdateAsync(UpdateVerifyCodeReq req) { diff --git a/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs b/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs index a32c35f2..f25c7f82 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Controllers/Tpl/ExampleController.cs @@ -24,6 +24,14 @@ public sealed class ExampleController(IExampleCache cache) : ControllerBase + /// 绀轰緥璁℃暟 + /// + public Task CountAsync(QueryReq req) + { + return Cache.CountAsync(req); + } + /// /// 鍒涘缓绀轰緥 /// diff --git a/src/backend/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs b/src/backend/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs index 0c031105..9f0e2217 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Jobs/ScheduledJob.cs @@ -109,11 +109,14 @@ public sealed class ScheduledJob : WorkBase, IJob var headers = new Dictionary(); if (!_accessToken.NullOrEmpty()) { - headers.Add(Chars.FLG_ACCESS_TOKEN_HEADER_KEY, $"{Chars.FLG_AUTH_SCHEMA} {_accessToken}"); + headers.Add( // + Chars.FLG_HTTP_HEADER_KEY_AUTHORIZATION, $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_accessToken}"); } if (!_refreshToken.NullOrEmpty()) { - headers.Add(Chars.FLG_X_ACCESS_TOKEN_HEADER_KEY, $"{Chars.FLG_AUTH_SCHEMA} {_refreshToken}"); + headers.Add( // + Chars.FLG_HTTP_HEADER_KEY_X_ACCESS_TOKEN_HEADER_KEY + , $"{Chars.FLG_HTTP_HEADER_VALUE_AUTH_SCHEMA} {_refreshToken}"); } if (!job.RequestHeader.NullOrEmpty()) { diff --git a/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs b/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs index e3515c2a..1bcac7db 100644 --- a/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs +++ b/src/backend/NetAdmin.SysComponent.Host/Subscribers/OperationLogger.cs @@ -21,7 +21,7 @@ public sealed class OperationLogger : IEventSubscriber } // 璺宠繃蹇冭烦璇锋眰 - if (operationEvent.Data.ApiId.Equals("api/health/check", StringComparison.OrdinalIgnoreCase)) { + if (operationEvent.Data.ApiId.Equals("api/probe/health.check", StringComparison.OrdinalIgnoreCase)) { return; } diff --git a/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj b/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj index 658bc2b7..46ca9ecf 100644 --- a/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj +++ b/src/backend/NetAdmin.Tests/NetAdmin.Tests.csproj @@ -3,9 +3,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/frontend/admin/package.json b/src/frontend/admin/package.json index 67b9b0ba..cecfaaa5 100644 --- a/src/frontend/admin/package.json +++ b/src/frontend/admin/package.json @@ -11,38 +11,41 @@ "dependencies": { "@element-plus/icons-vue": "^2.3.1", "@tinymce/tinymce-vue": "^5.1.1", - "axios": "^1.6.7", + "ace-builds": "^1.33.0", + "axios": "^1.6.8", "clipboard": "^2.0.11", - "core-js": "^3.36.0", + "core-js": "^3.37.0", "cropperjs": "^1.6.1", "crypto-js": "^4.2.0", "echarts": "^5.5.0", - "element-plus": "^2.6.1", + "element-plus": "^2.7.0", "json-bigint": "^1.0.0", "json5-to-table": "^0.1.8", - "markdown-it": "^14.0.0", + "markdown-it": "^14.1.0", "markdown-it-emoji": "^3.0.0", "nprogress": "^0.2.0", "pinyin-match": "^1.2.5", "qrcodejs2": "^0.0.2", "sortablejs": "^1.15.2", "tinymce": "^6.8.3", - "vue": "^3.4.21", - "vue-i18n": "^9.10.1", - "vue-router": "^4.3.0", + "vkbeautify": "^0.99.3", + "vue": "^3.4.23", + "vue-i18n": "^9.12.1", + "vue-router": "^4.3.1", + "vue3-ace-editor": "^2.2.4", "vue3-json-viewer": "^2.2.2", "vuedraggable": "^4.0.3", "vuex": "^4.1.0", - "xgplayer": "^3.0.14", - "xgplayer-hls": "^3.0.14" + "xgplayer": "^3.0.16", + "xgplayer-hls": "^3.0.16" }, "devDependencies": { "@vitejs/plugin-vue": "^5.0.4", "prettier": "^3.2.5", "prettier-plugin-organize-attributes": "^1.0.0", - "sass": "^1.71.1", - "terser": "^5.29.1", - "vite": "^5.1.5" + "sass": "^1.75.0", + "terser": "^5.30.3", + "vite": "^5.2.9" }, "browserslist": [ "> 1%", diff --git a/src/frontend/admin/src/App.vue b/src/frontend/admin/src/App.vue index 19a78225..b56b1718 100644 --- a/src/frontend/admin/src/App.vue +++ b/src/frontend/admin/src/App.vue @@ -1,6 +1,6 @@ @@ -9,8 +9,14 @@ import colorTool from '@/utils/color' export default { name: 'App', + provide() { + return { + reload: this.reload, + } + }, data() { return { + isRouterAlive: true, config: { size: 'default', zIndex: 2000, @@ -25,6 +31,14 @@ export default { return this.$i18n.messages[this.$i18n.locale].el }, }, + methods: { + reload() { + this.isRouterAlive = false + this.$nextTick(function () { + this.isRouterAlive = true + }) + }, + }, async created() { //璁剧疆涓婚棰滆壊 const app_color = this.$TOOL.data.get('APP_COLOR') ?? this.$CONFIG.COLOR diff --git a/src/frontend/admin/src/api/controllers/probe.js b/src/frontend/admin/src/api/controllers/probe.js new file mode 100644 index 00000000..6fbe3ff1 --- /dev/null +++ b/src/frontend/admin/src/api/controllers/probe.js @@ -0,0 +1,18 @@ +/** + * 鎺㈤拡缁勪欢 + * @module @/api/probe + */ +import config from '@/config' +import http from '@/utils/request' +export default { + /** + * 鍋ュ悍妫鏌 + */ + healthCheck: { + url: `${config.API_URL}/api/probe/health.check`, + name: `鍋ュ悍妫鏌, + get: async function (data = {}, config = {}) { + return await http.get(this.url, data, config) + }, + }, +} \ No newline at end of file diff --git a/src/frontend/admin/src/api/sys/api.js b/src/frontend/admin/src/api/sys/api.js index 780b9d95..012848d9 100644 --- a/src/frontend/admin/src/api/sys/api.js +++ b/src/frontend/admin/src/api/sys/api.js @@ -5,6 +5,17 @@ import config from '@/config' import http from '@/utils/request' export default { + /** + * 鎺ュ彛璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/api/count`, + name: `鎺ュ彛璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鏌ヨ鎺ュ彛 */ diff --git a/src/frontend/admin/src/api/sys/config.js b/src/frontend/admin/src/api/sys/config.js index 8fcf1185..4802fdf3 100644 --- a/src/frontend/admin/src/api/sys/config.js +++ b/src/frontend/admin/src/api/sys/config.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 閰嶇疆璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/config/count`, + name: `閰嶇疆璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓閰嶇疆 */ diff --git a/src/frontend/admin/src/api/sys/dept.js b/src/frontend/admin/src/api/sys/dept.js index ee3bb168..2db052a3 100644 --- a/src/frontend/admin/src/api/sys/dept.js +++ b/src/frontend/admin/src/api/sys/dept.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 閮ㄩ棬璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/dept/count`, + name: `閮ㄩ棬璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓閮ㄩ棬 */ diff --git a/src/frontend/admin/src/api/sys/job.js b/src/frontend/admin/src/api/sys/job.js index a637ec35..ad13e43a 100644 --- a/src/frontend/admin/src/api/sys/job.js +++ b/src/frontend/admin/src/api/sys/job.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 璁″垝浣滀笟璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/job/count`, + name: `璁″垝浣滀笟璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓璁″垝浣滀笟 */ diff --git a/src/frontend/admin/src/api/sys/log.js b/src/frontend/admin/src/api/sys/log.js index 06422b0f..f7b21462 100644 --- a/src/frontend/admin/src/api/sys/log.js +++ b/src/frontend/admin/src/api/sys/log.js @@ -5,6 +5,17 @@ import config from '@/config' import http from '@/utils/request' export default { + /** + * 璇锋眰鏃ュ織璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/log/count`, + name: `璇锋眰鏃ュ織璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鑾峰彇鍗曚釜璇锋眰鏃ュ織 */ diff --git a/src/frontend/admin/src/api/sys/menu.js b/src/frontend/admin/src/api/sys/menu.js index f370f3e5..4e701004 100644 --- a/src/frontend/admin/src/api/sys/menu.js +++ b/src/frontend/admin/src/api/sys/menu.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 鑿滃崟璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/menu/count`, + name: `鑿滃崟璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓鑿滃崟 */ diff --git a/src/frontend/admin/src/api/sys/role.js b/src/frontend/admin/src/api/sys/role.js index f97e6586..ba9ad366 100644 --- a/src/frontend/admin/src/api/sys/role.js +++ b/src/frontend/admin/src/api/sys/role.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 瑙掕壊璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/role/count`, + name: `瑙掕壊璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓瑙掕壊 */ diff --git a/src/frontend/admin/src/api/sys/sitemsg.js b/src/frontend/admin/src/api/sys/sitemsg.js index 7f1078cb..07ccee08 100644 --- a/src/frontend/admin/src/api/sys/sitemsg.js +++ b/src/frontend/admin/src/api/sys/sitemsg.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 绔欏唴淇¤鏁 + */ + count: { + url: `${config.API_URL}/api/sys/site.msg/count`, + name: `绔欏唴淇¤鏁癭, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓绔欏唴淇 */ diff --git a/src/frontend/admin/src/api/sys/user.js b/src/frontend/admin/src/api/sys/user.js index aa933e51..df6e25ef 100644 --- a/src/frontend/admin/src/api/sys/user.js +++ b/src/frontend/admin/src/api/sys/user.js @@ -27,6 +27,17 @@ export default { }, }, + /** + * 鐢ㄦ埛璁℃暟 + */ + count: { + url: `${config.API_URL}/api/sys/user/count`, + name: `鐢ㄦ埛璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓鐢ㄦ埛 */ diff --git a/src/frontend/admin/src/api/sys/verifycode.js b/src/frontend/admin/src/api/sys/verifycode.js index ac4dc62e..c17714d5 100644 --- a/src/frontend/admin/src/api/sys/verifycode.js +++ b/src/frontend/admin/src/api/sys/verifycode.js @@ -5,6 +5,17 @@ import config from '@/config' import http from '@/utils/request' export default { + /** + * 楠岃瘉鐮佽鏁 + */ + count: { + url: `${config.API_URL}/api/sys/verify.code/count`, + name: `楠岃瘉鐮佽鏁癭, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍙戦侀獙璇佺爜 */ diff --git a/src/frontend/admin/src/api/tpl/example.js b/src/frontend/admin/src/api/tpl/example.js index ef708100..2b7add3d 100644 --- a/src/frontend/admin/src/api/tpl/example.js +++ b/src/frontend/admin/src/api/tpl/example.js @@ -16,6 +16,17 @@ export default { }, }, + /** + * 绀轰緥璁℃暟 + */ + count: { + url: `${config.API_URL}/api/tpl/example/count`, + name: `绀轰緥璁℃暟`, + post: async function (data = {}, config = {}) { + return await http.post(this.url, data, config) + }, + }, + /** * 鍒涘缓绀轰緥 */ diff --git a/src/frontend/admin/src/assets/icons/Error.vue b/src/frontend/admin/src/assets/icons/Error.vue index 0f4d7147..f2ea8e31 100644 --- a/src/frontend/admin/src/assets/icons/Error.vue +++ b/src/frontend/admin/src/assets/icons/Error.vue @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icons/FreeSql.vue b/src/frontend/admin/src/assets/icons/FreeSql.vue new file mode 100644 index 00000000..aafe1ca2 --- /dev/null +++ b/src/frontend/admin/src/assets/icons/FreeSql.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icons/Performance.vue b/src/frontend/admin/src/assets/icons/Performance.vue new file mode 100644 index 00000000..fd2a90c9 --- /dev/null +++ b/src/frontend/admin/src/assets/icons/Performance.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icons/Proxy.vue b/src/frontend/admin/src/assets/icons/Proxy.vue new file mode 100644 index 00000000..83bec2dc --- /dev/null +++ b/src/frontend/admin/src/assets/icons/Proxy.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/src/frontend/admin/src/assets/icons/index.js b/src/frontend/admin/src/assets/icons/index.js index 00d521fe..e4c178e3 100644 --- a/src/frontend/admin/src/assets/icons/index.js +++ b/src/frontend/admin/src/assets/icons/index.js @@ -63,4 +63,7 @@ export { default as Help } from './Help.vue' export { default as Version } from './Version.vue' export { default as Home } from './Home.vue' export { default as Exception } from './Exception.vue' -export { default as Collect } from './Collect.vue' \ No newline at end of file +export { default as Collect } from './Collect.vue' +export { default as FreeSql } from './FreeSql.vue' +export { default as Performance } from './Performance.vue' +export { default as Proxy } from './Proxy.vue' \ No newline at end of file diff --git a/src/frontend/admin/src/components/naColIndicator/index.vue b/src/frontend/admin/src/components/naColIndicator/index.vue index fe61085a..6a121cf7 100644 --- a/src/frontend/admin/src/components/naColIndicator/index.vue +++ b/src/frontend/admin/src/components/naColIndicator/index.vue @@ -15,14 +15,6 @@ -