mirror of
https://github.com/nsnail/NetAdmin.git
synced 2025-06-20 02:38:15 +08:00
refactor: ♻️ 框架&业务代码分离 (#185)
Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
@ -25,16 +25,16 @@ global using FreeSql;
|
||||
global using FreeSql.Aop;
|
||||
global using FreeSql.DataAnnotations;
|
||||
global using FreeSql.Internal.Model;
|
||||
global using Furion;
|
||||
global using Furion.Authorization;
|
||||
global using Furion.ConfigurableOptions;
|
||||
global using Furion.DataEncryption;
|
||||
global using Furion.DataValidation;
|
||||
global using Furion.DependencyInjection;
|
||||
global using Furion.DynamicApiController;
|
||||
global using Furion.EventBus;
|
||||
global using Furion.SpecificationDocument;
|
||||
global using Furion.UnifyResult;
|
||||
global using Gurion;
|
||||
global using Gurion.Authorization;
|
||||
global using Gurion.ConfigurableOptions;
|
||||
global using Gurion.DataEncryption;
|
||||
global using Gurion.DataValidation;
|
||||
global using Gurion.DependencyInjection;
|
||||
global using Gurion.DynamicApiController;
|
||||
global using Gurion.EventBus;
|
||||
global using Gurion.SpecificationDocument;
|
||||
global using Gurion.UnifyResult;
|
||||
global using Mapster;
|
||||
global using Microsoft.AspNetCore.Authorization;
|
||||
global using Microsoft.AspNetCore.Builder;
|
||||
|
@ -1,9 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MailKit" Version="4.8.0"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,2 +0,0 @@
|
||||
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve">
|
||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cadm_005Cpartial/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -0,0 +1,10 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<Content Include="$(SolutionDir)/assets/seed-data/Adm_*.json" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Domain/NetAdmin.SysComponent.Domain.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,8 +1,8 @@
|
||||
using NetAdmin.AdmServer.Host.Filters;
|
||||
using NetAdmin.Domain.Contexts;
|
||||
using NetAdmin.Domain.DbMaps.Dependency.Fields;
|
||||
using NetAdmin.Domain.Enums.Sys;
|
||||
using NetAdmin.Host.Extensions;
|
||||
using NetAdmin.SysComponent.Domain.Contexts;
|
||||
using NetAdmin.SysComponent.Domain.Enums.Sys;
|
||||
using NetAdmin.SysComponent.Host.Extensions;
|
||||
|
||||
namespace NetAdmin.AdmServer.Host.Extensions;
|
||||
|
||||
|
@ -1,17 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="$(SolutionDir)/assets/captcha/**" LinkBase="Assets/Captcha"/>
|
||||
<EmbeddedResource Include="$(SolutionDir)/CHANGELOG.md" LogicalName="CHANGELOG.md"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="*.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(Configuration)' != 'Debug'">
|
||||
<EmbeddedResource Include="../../../dist/frontend/admin/**/*" LinkBase="UI"/>
|
||||
|
@ -91,7 +91,8 @@ namespace NetAdmin.AdmServer.Host
|
||||
.AddFreeSqlWithArgs() // 添加 freeSql
|
||||
.AddRemoteRequest() // 添加远程请求
|
||||
.AddCorsAccessor() // 添加支持跨域访问
|
||||
.AddContextUser() // 添加上下文用户
|
||||
.AddContextUserToken() // 添加上下文用户令牌
|
||||
.AddContextUserInfo() // 添加上下文用户信息
|
||||
.AddRedisCache() // 添加 Redis 缓存
|
||||
.AddSchedules() // 添加计划任务
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
{}
|
@ -1 +0,0 @@
|
||||
{}
|
@ -1,45 +0,0 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
"SpecificationDocumentSettings": {
|
||||
"GroupOpenApiInfos": [
|
||||
{
|
||||
"Group": "Sys",
|
||||
"Title": "系统组件",
|
||||
"Description": "NetAdmin - 系统组件",
|
||||
},
|
||||
{
|
||||
"Group": "Adm",
|
||||
"Title": "管理服务",
|
||||
"Description": "NetAdmin - 管理服务",
|
||||
},
|
||||
{
|
||||
"Group": "Tpl",
|
||||
"Visible": false,
|
||||
},
|
||||
{
|
||||
"Group": "Probe",
|
||||
"Visible": false,
|
||||
}
|
||||
],
|
||||
"SecurityDefinitions": [
|
||||
{
|
||||
"Id": "Bearer",
|
||||
"Type": "ApiKey",
|
||||
"Name": "Authorization",
|
||||
"Description": "JWT Authorization header using the Bearer scheme.",
|
||||
"BearerFormat": "JWT",
|
||||
"Scheme": "bearer",
|
||||
"In": "Header",
|
||||
"Requirement": {
|
||||
"Scheme": {
|
||||
"Reference": {
|
||||
"Id": "Bearer",
|
||||
"Type": "SecurityScheme"
|
||||
},
|
||||
"Accesses": []
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Debug",
|
||||
"System.Logging.EventBusService": "Debug"
|
||||
},
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Debug",
|
||||
"System.Logging.EventBusService": "Debug"
|
||||
},
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"Microsoft.AspNetCore": "Debug",
|
||||
"System.Logging.EventBusService": "Debug"
|
||||
},
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
// Swagger文档配置 ------------------------------------------------------------------------------
|
||||
"SpecificationDocumentSettings": {
|
||||
"GroupOpenApiInfos": [
|
||||
{
|
||||
"Group": "Sys",
|
||||
"Title": "系统组件",
|
||||
"Description": "NetAdmin - 系统组件"
|
||||
},
|
||||
{
|
||||
"Group": "Adm",
|
||||
"Title": "管理服务",
|
||||
"Description": "NetAdmin - 管理服务"
|
||||
},
|
||||
{
|
||||
"Group": "Tpl",
|
||||
"Visible": false
|
||||
},
|
||||
{
|
||||
"Group": "Probe",
|
||||
"Visible": false
|
||||
}
|
||||
],
|
||||
"XmlComments": [
|
||||
"NetAdmin.AdmServer.Application.xml",
|
||||
"NetAdmin.AdmServer.Cache.xml",
|
||||
"NetAdmin.AdmServer.Domain.xml",
|
||||
"NetAdmin.AdmServer.Host.xml",
|
||||
"NetAdmin.AdmServer.Infrastructure.xml",
|
||||
"FreeSql.xml",
|
||||
"NetAdmin.Application.xml",
|
||||
"NetAdmin.Cache.xml",
|
||||
"NetAdmin.Domain.xml",
|
||||
"NetAdmin.Host.xml",
|
||||
"NetAdmin.Infrastructure.xml",
|
||||
"NetAdmin.SysComponent.Application.xml",
|
||||
"NetAdmin.SysComponent.Cache.xml",
|
||||
"NetAdmin.SysComponent.Domain.xml",
|
||||
"NetAdmin.SysComponent.Host.xml",
|
||||
"NetAdmin.SysComponent.Infrastructure.xml"
|
||||
]
|
||||
},
|
||||
// 数据库配置 --------------------------------------------------------------------------------------------------------
|
||||
"Database": {
|
||||
"DbType": "Sqlite",
|
||||
"ConnStr": "data source=NetAdmin.db",
|
||||
"SeedDataRelativePath": "SeedData"
|
||||
},
|
||||
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
|
||||
"JWTSettings": {
|
||||
"ValidateIssuerSigningKey": true,
|
||||
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
|
||||
"ValidateIssuer": true,
|
||||
"ValidIssuer": "签发方",
|
||||
"ValidateAudience": true,
|
||||
"ValidAudience": "签收方",
|
||||
"ValidateLifetime": true,
|
||||
"ExpiredTime": 5256000,
|
||||
"ClockSkew": 5,
|
||||
"Algorithm": "HS256"
|
||||
},
|
||||
// 日志配置 ----------------------------------------------------------------------------------------------------------
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"System.Logging.EventBusService": "Error"
|
||||
}
|
||||
},
|
||||
// Redis配置 --------------------------------------------------------------------------------------------------------
|
||||
"Redis": {
|
||||
"Instances": [
|
||||
{
|
||||
"Name": "DataCache",
|
||||
"ConnStr": "localhost:6379,abortConnect=false",
|
||||
"DataBase": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
// 文件上传配置 -------------------------------------------------------------------------------------------------------
|
||||
"Upload": {
|
||||
"ContentTypes": [
|
||||
"image/jpg",
|
||||
"image/png",
|
||||
"image/jpeg",
|
||||
"image/gif"
|
||||
],
|
||||
"MaxSize": 1073741824,
|
||||
"Minio": {
|
||||
"ServerAddress": "vm-ubt-1:9000",
|
||||
"AccessKey": "nVMM0gSqwyIjM8iZ",
|
||||
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
|
||||
"BucketName": "cloud-code",
|
||||
"AccessUrl": "http://vm-ubt-1:9000",
|
||||
"Secure": false
|
||||
}
|
||||
},
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Statements.ln">
|
||||
<Link>Languages/NetAdmin.AdmServer.Statements.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Fields.ln">
|
||||
<Link>Languages/NetAdmin.AdmServer.Fields.ln</Link>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="*.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,6 +1,7 @@
|
||||
using NetAdmin.Domain.Dto.Dependency;
|
||||
using NetAdmin.Domain.Dto.Tpl.Example;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Tpl;
|
||||
namespace NetAdmin.Application.Modules.Tpl;
|
||||
|
||||
/// <summary>
|
||||
/// 示例模块
|
@ -1,7 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Domain/NetAdmin.Domain.csproj"/>
|
||||
|
@ -0,0 +1,8 @@
|
||||
using NetAdmin.Application.Modules.Tpl;
|
||||
|
||||
namespace NetAdmin.Application.Services.Tpl.Dependency;
|
||||
|
||||
/// <summary>
|
||||
/// 示例服务
|
||||
/// </summary>
|
||||
public interface IExampleService : IService, IExampleModule;
|
@ -1,8 +1,10 @@
|
||||
using NetAdmin.Application.Repositories;
|
||||
using NetAdmin.Application.Services.Tpl.Dependency;
|
||||
using NetAdmin.Domain.DbMaps.Tpl;
|
||||
using NetAdmin.Domain.Dto.Dependency;
|
||||
using NetAdmin.Domain.Dto.Tpl.Example;
|
||||
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Tpl;
|
||||
namespace NetAdmin.Application.Services.Tpl;
|
||||
|
||||
/// <inheritdoc cref="IExampleService" />
|
||||
public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
|
||||
@ -27,10 +29,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
|
||||
{
|
||||
req.ThrowIfInvalid();
|
||||
return QueryInternal(req)
|
||||
#if DBTYPE_SQLSERVER
|
||||
#if DBTYPE_SQLSERVER
|
||||
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
|
||||
#endif
|
||||
.CountAsync();
|
||||
#endif
|
||||
.CountAsync();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@ -53,10 +55,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
|
||||
{
|
||||
req.ThrowIfInvalid();
|
||||
return QueryInternal(req)
|
||||
#if DBTYPE_SQLSERVER
|
||||
#if DBTYPE_SQLSERVER
|
||||
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
|
||||
#endif
|
||||
.AnyAsync();
|
||||
#endif
|
||||
.AnyAsync();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
@ -0,0 +1,9 @@
|
||||
using NetAdmin.Application.Modules.Tpl;
|
||||
using NetAdmin.Application.Services.Tpl.Dependency;
|
||||
|
||||
namespace NetAdmin.Cache.Tpl.Dependency;
|
||||
|
||||
/// <summary>
|
||||
/// 示例缓存
|
||||
/// </summary>
|
||||
public interface IExampleCache : ICache<IDistributedCache, IExampleService>, IExampleModule;
|
@ -1,8 +1,9 @@
|
||||
using NetAdmin.Application.Services.Tpl.Dependency;
|
||||
using NetAdmin.Cache.Tpl.Dependency;
|
||||
using NetAdmin.Domain.Dto.Dependency;
|
||||
using NetAdmin.Domain.Dto.Tpl.Example;
|
||||
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
|
||||
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
|
||||
|
||||
namespace NetAdmin.SysComponent.Cache.Tpl;
|
||||
namespace NetAdmin.Cache.Tpl;
|
||||
|
||||
/// <inheritdoc cref="IExampleCache" />
|
||||
public sealed class ExampleCache(IDistributedCache cache, IExampleService service)
|
@ -1,5 +1,3 @@
|
||||
using NetAdmin.Domain.Dto.Sys.User;
|
||||
|
||||
namespace NetAdmin.Domain.Contexts;
|
||||
|
||||
/// <summary>
|
||||
@ -43,9 +41,9 @@ public sealed record ContextUserToken : DataAbstraction
|
||||
/// <summary>
|
||||
/// 从 QueryUserRsp 创建上下文用户
|
||||
/// </summary>
|
||||
public static ContextUserToken Create(QueryUserRsp user)
|
||||
public static ContextUserToken Create(long id, Guid token, string userName, long deptId)
|
||||
{
|
||||
return new ContextUserToken { Id = user.Id, Token = user.Token, UserName = user.UserName, DeptId = user.DeptId };
|
||||
return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,7 +1,7 @@
|
||||
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
|
||||
|
||||
/// <summary>
|
||||
/// 更新用户字段接口
|
||||
/// 修改用户字段接口
|
||||
/// </summary>
|
||||
public interface IFieldModifiedUser
|
||||
{
|
||||
|
@ -1,12 +1,12 @@
|
||||
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
|
||||
|
||||
/// <summary>
|
||||
/// 描述字段接口
|
||||
/// 备注字段接口
|
||||
/// </summary>
|
||||
public interface IFieldSummary
|
||||
{
|
||||
/// <summary>
|
||||
/// 描述
|
||||
/// 备注
|
||||
/// </summary>
|
||||
string Summary { get; init; }
|
||||
}
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record ImmutableEntity : ImmutableEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -17,19 +19,25 @@ public abstract record ImmutableEntity : ImmutableEntity<long>
|
||||
public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreatedUser
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserId" />
|
||||
/// <summary>
|
||||
/// 创建者编号
|
||||
/// </summary>
|
||||
[Column(CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public long? CreatedUserId { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserName" />
|
||||
/// <summary>
|
||||
/// 创建者用户名
|
||||
/// </summary>
|
||||
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual string CreatedUserName { get; init; }
|
||||
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
public override T Id { get; init; }
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -17,13 +19,17 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
|
||||
public abstract record LiteImmutableEntity<T> : EntityBase<T>, IFieldCreatedTime
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
[Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual DateTime CreatedTime { get; init; }
|
||||
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record LiteMutableEntity : LiteMutableEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -16,12 +18,16 @@ public abstract record LiteMutableEntity : LiteMutableEntity<long>
|
||||
public abstract record LiteMutableEntity<T> : LiteImmutableEntity<T>, IFieldModifiedTime
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
public override T Id { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
[Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record LiteVersionEntity : LiteVersionEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -16,13 +18,17 @@ public abstract record LiteVersionEntity : LiteVersionEntity<long>
|
||||
public abstract record LiteVersionEntity<T> : LiteMutableEntity<T>, IFieldVersion
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
public override T Id { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldVersion.Version" />
|
||||
/// <summary>
|
||||
/// 数据版本
|
||||
/// </summary>
|
||||
[Column(IsVersion = true, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record MutableEntity : MutableEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -16,30 +18,40 @@ public abstract record MutableEntity : MutableEntity<long>
|
||||
public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUser, IFieldModifiedUser
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// 创建者编号
|
||||
/// </summary>
|
||||
[Column(CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual long? CreatedUserId { get; init; }
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// 创建者用户名
|
||||
/// </summary>
|
||||
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual string CreatedUserName { get; init; }
|
||||
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
public override T Id { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
|
||||
/// <summary>
|
||||
/// 修改者编号
|
||||
/// </summary>
|
||||
[Column(CanInsert = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public long? ModifiedUserId { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
|
||||
/// <summary>
|
||||
/// 修改者用户名
|
||||
/// </summary>
|
||||
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record SimpleEntity : SimpleEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
|
@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
|
||||
/// <inheritdoc />
|
||||
public abstract record VersionEntity : VersionEntity<long>
|
||||
{
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
[Snowflake]
|
||||
@ -16,30 +18,40 @@ public abstract record VersionEntity : VersionEntity<long>
|
||||
public abstract record VersionEntity<T> : LiteVersionEntity<T>, IFieldModifiedUser, IFieldCreatedUser
|
||||
where T : IEquatable<T>
|
||||
{
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// 创建者编号
|
||||
/// </summary>
|
||||
[Column(CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual long? CreatedUserId { get; init; }
|
||||
|
||||
/// <inheritdoc />
|
||||
/// <summary>
|
||||
/// 创建者用户名
|
||||
/// </summary>
|
||||
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual string CreatedUserName { get; init; }
|
||||
|
||||
/// <inheritdoc cref="EntityBase{T}.Id" />
|
||||
/// <summary>
|
||||
/// 唯一编码
|
||||
/// </summary>
|
||||
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
|
||||
[CsvIgnore]
|
||||
public override T Id { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
|
||||
/// <summary>
|
||||
/// 修改者编号
|
||||
/// </summary>
|
||||
[Column(CanInsert = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
public virtual long? ModifiedUserId { get; init; }
|
||||
|
||||
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
|
||||
/// <summary>
|
||||
/// 修改者用户名
|
||||
/// </summary>
|
||||
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
|
||||
[CsvIgnore]
|
||||
[JsonIgnore]
|
||||
|
@ -8,6 +8,7 @@ public record RestfulInfo<T> : DataAbstraction
|
||||
/// <summary>
|
||||
/// 代码
|
||||
/// </summary>
|
||||
/// <example>succeed</example>
|
||||
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
|
||||
public ErrorCodes Code { get; init; }
|
||||
|
||||
@ -17,7 +18,8 @@ public record RestfulInfo<T> : DataAbstraction
|
||||
public T Data { get; init; }
|
||||
|
||||
/// <summary>
|
||||
/// 消息
|
||||
/// 字符串:"消息内容",或数组:[{"参数名1":"消息内容1"},{"参数名2":"消息内容2"}]
|
||||
/// </summary>
|
||||
/// <example>请求成功</example>
|
||||
public object Msg { get; init; }
|
||||
}
|
@ -1,11 +1,5 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<Content Include="$(SolutionDir)/assets/seed-data/**" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
|
||||
</ItemGroup>
|
||||
|
@ -1,13 +1,5 @@
|
||||
global using NetAdmin.Domain.Attributes;
|
||||
global using NetAdmin.Domain.Attributes.DataValidation;
|
||||
global using NetAdmin.Domain.Attributes;
|
||||
global using NetAdmin.Domain.DbMaps.Dependency;
|
||||
global using NetAdmin.Domain.DbMaps.Dependency.Fields;
|
||||
global using NetAdmin.Domain.DbMaps.Sys;
|
||||
global using NetAdmin.Domain.Dto.Dependency;
|
||||
global using NetAdmin.Domain.Enums.Sys;
|
||||
global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute;
|
||||
global using CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute;
|
||||
global using CsvName = CsvHelper.Configuration.Attributes.NameAttribute;
|
||||
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
|
||||
global using HttpMethods = NetAdmin.Domain.Enums.HttpMethods;
|
||||
global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute;
|
||||
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
|
@ -1,9 +1,11 @@
|
||||
using NetAdmin.Application.Modules.Tpl;
|
||||
using NetAdmin.Application.Services.Tpl.Dependency;
|
||||
using NetAdmin.Cache.Tpl.Dependency;
|
||||
using NetAdmin.Domain.Dto.Dependency;
|
||||
using NetAdmin.Domain.Dto.Tpl.Example;
|
||||
using NetAdmin.SysComponent.Application.Modules.Tpl;
|
||||
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
|
||||
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
|
||||
using NetAdmin.Host.Attributes;
|
||||
|
||||
namespace NetAdmin.SysComponent.Host.Controllers.Tpl;
|
||||
namespace NetAdmin.Host.Controllers.Tpl;
|
||||
|
||||
/// <summary>
|
||||
/// 示例服务
|
@ -1,12 +1,7 @@
|
||||
using Furion.Logging;
|
||||
using Gurion.Logging;
|
||||
using NetAdmin.Domain.Contexts;
|
||||
using NetAdmin.Domain.Events;
|
||||
using NetAdmin.Host.Filters;
|
||||
using NetAdmin.Host.Utils;
|
||||
using StackExchange.Redis;
|
||||
using Yitter.IdGenerator;
|
||||
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
|
||||
|
||||
#if DEBUG
|
||||
using Spectre.Console;
|
||||
#endif
|
||||
@ -83,7 +78,7 @@ public static class ServiceCollectionExtensions
|
||||
this IServiceCollection me)
|
||||
{
|
||||
var optionsTypes
|
||||
= from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Furion)) &&
|
||||
= from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) &&
|
||||
x.GetInterfaces().Contains(typeof(IConfigurableOptions)))
|
||||
select type;
|
||||
|
||||
@ -126,12 +121,11 @@ public static class ServiceCollectionExtensions
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加上下文用户
|
||||
/// 添加上下文用户令牌
|
||||
/// </summary>
|
||||
public static IServiceCollection AddContextUser(this IServiceCollection me)
|
||||
public static IServiceCollection AddContextUserToken(this IServiceCollection me)
|
||||
{
|
||||
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create())
|
||||
.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
|
||||
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -142,42 +136,6 @@ public static class ServiceCollectionExtensions
|
||||
return me.AddEventBus(builder => builder.AddSubscribers(App.Assemblies.ToArray()));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加 freeSql orm工具
|
||||
/// </summary>
|
||||
public static IServiceCollection AddFreeSql( //
|
||||
this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action<IFreeSql> freeSqlConfig = null)
|
||||
{
|
||||
// // 非调试模式下禁止同步数据库
|
||||
// #if !DEBUG
|
||||
// initOptions = FreeSqlInitOptions.None;
|
||||
// #endif
|
||||
var dbOptions = App.GetOptions<DatabaseOptions>();
|
||||
var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods);
|
||||
_ = me.AddSingleton(fSql);
|
||||
|
||||
fSql.Aop.AuditValue += SqlAuditor.DataAuditHandler; // Insert/Update自动值处理
|
||||
var eventPublisher = App.GetService<IEventPublisher>();
|
||||
|
||||
#pragma warning disable VSTHRD110
|
||||
|
||||
// AOP事件发布(异步)
|
||||
fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发
|
||||
fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发
|
||||
|
||||
fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移,执行之前触发
|
||||
|
||||
fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移,执行完成触发
|
||||
#pragma warning restore VSTHRD110
|
||||
|
||||
// 全局过滤器设置
|
||||
freeSqlConfig?.Invoke(fSql);
|
||||
|
||||
return me.AddScoped<UnitOfWorkManager>() // 注入工作单元管理器
|
||||
.AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository
|
||||
.AddMvcFilter<TransactionInterceptor>(); // 注入事务拦截器
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加内存缓存
|
||||
/// </summary>
|
||||
|
@ -1,4 +1,4 @@
|
||||
using Furion.FriendlyException;
|
||||
using Gurion.FriendlyException;
|
||||
using NetAdmin.Domain.Dto;
|
||||
|
||||
namespace NetAdmin.Host.Filters;
|
||||
|
@ -1,4 +1,4 @@
|
||||
using Furion.FriendlyException;
|
||||
using Gurion.FriendlyException;
|
||||
using NetAdmin.Domain.Dto;
|
||||
|
||||
namespace NetAdmin.Host.Filters;
|
||||
|
@ -1,8 +1,8 @@
|
||||
using Furion.FriendlyException;
|
||||
using Gurion.FriendlyException;
|
||||
|
||||
namespace NetAdmin.Host.Filters;
|
||||
|
||||
/// <inheritdoc cref="Furion.FriendlyException.IGlobalExceptionHandler" />
|
||||
/// <inheritdoc cref="Gurion.FriendlyException.IGlobalExceptionHandler" />
|
||||
public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IGlobalExceptionHandler, ISingleton
|
||||
{
|
||||
/// <inheritdoc />
|
||||
|
@ -0,0 +1,56 @@
|
||||
namespace NetAdmin.Infrastructure.Attributes;
|
||||
|
||||
/// <summary>
|
||||
/// 国家信息特性
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// https://github.com/countries/countries
|
||||
/// </remarks>
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
|
||||
public sealed class CountryAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// 三个字母的国家代码
|
||||
/// </summary>
|
||||
public string Alpha3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 国际电话呼号
|
||||
/// </summary>
|
||||
public int CallingCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 国际电话子呼号(区分同一呼号不同国家)
|
||||
/// </summary>
|
||||
public string CallingSubCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 货币代码
|
||||
/// </summary>
|
||||
public string CurrencyCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当命中多个国家时的首选国家
|
||||
/// </summary>
|
||||
public bool IsPreferred { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 官方语言代码
|
||||
/// </summary>
|
||||
public string Languages { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 国家全称
|
||||
/// </summary>
|
||||
public string LongName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 国家简称
|
||||
/// </summary>
|
||||
public string ShortName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 非正式名称
|
||||
/// </summary>
|
||||
public string UnofficialNames { get; set; }
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
namespace NetAdmin.Infrastructure.Attributes;
|
||||
|
||||
/// <summary>
|
||||
/// 域名特性
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
|
||||
public sealed class DomainAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// 主机名称
|
||||
/// </summary>
|
||||
public string HostName { get; init; }
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
namespace NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
|
||||
/// <summary>
|
||||
/// API客户端基础选项
|
||||
/// </summary>
|
||||
public abstract record ApiClientOptions : OptionAbstraction
|
||||
{
|
||||
/// <summary>
|
||||
/// 网关地址
|
||||
/// </summary>
|
||||
public string Gateway { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 密钥
|
||||
/// </summary>
|
||||
public string Token { get; set; }
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
namespace NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
|
||||
/// <summary>
|
||||
/// 选项抽象基类
|
@ -1,3 +1,5 @@
|
||||
using NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
|
||||
namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,3 +1,4 @@
|
||||
using NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
using DataType = FreeSql.DataType;
|
||||
|
||||
namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
|
@ -1,3 +1,5 @@
|
||||
using NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
|
||||
namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
|
||||
/// <summary>
|
||||
|
@ -1,3 +1,5 @@
|
||||
using NetAdmin.Infrastructure.Configuration.Dependency;
|
||||
|
||||
namespace NetAdmin.Infrastructure.Configuration.Options;
|
||||
|
||||
/// <summary>
|
||||
|
@ -74,14 +74,10 @@ public static class Chars
|
||||
public const string FLG_HTTP_METHOD_PUT = "PUT";
|
||||
public const string FLG_HTTP_METHOD_TRACE = "TRACE";
|
||||
public const string FLG_PATH_API_METRICS = "metrics";
|
||||
|
||||
public const string FLG_PATH_API_RPOBE = "api/probe";
|
||||
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
|
||||
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
|
||||
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_PATH_API_RPOBE = "api/probe";
|
||||
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
|
||||
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
|
||||
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
|
||||
|
||||
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";
|
||||
|
@ -10,26 +10,14 @@ namespace NetAdmin.Infrastructure.Constant;
|
||||
/// </remarks>
|
||||
public static class Numbers
|
||||
{
|
||||
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_EXPORT = 10000; // 最大限制:导出为CSV文件的条数
|
||||
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 MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数
|
||||
public const int REQUEST_LOG_BUFF_SIZE = 10; // 请求日志缓冲区大小
|
||||
public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数
|
||||
public const int SECS_CACHE_CHART = 300; // 秒:缓存时间-仪表
|
||||
public const int SECS_CACHE_DEFAULT = 60; // 秒:缓存时间-默认
|
||||
public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 秒:缓存时间-字典配置-目录代码
|
||||
public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 秒:缓存时间-通过用户编号登录的用户信息
|
||||
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间
|
||||
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔
|
||||
public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 秒:超时时间-默认HTTP客户端
|
||||
public const int SECS_TIMEOUT_JOB = 600; // 秒:超时时间-作业
|
||||
public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
|
||||
public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码:业务异常
|
||||
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
|
||||
public const int MAX_LIMIT_EXPORT = 50000; // 最大限制:导出为CSV文件的条数
|
||||
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 MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次数
|
||||
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒:Redis锁过期时间
|
||||
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒:Redis锁重试间隔
|
||||
}
|
2581
src/backend/NetAdmin.Infrastructure/Enums/Countries.cs
Normal file
2581
src/backend/NetAdmin.Infrastructure/Enums/Countries.cs
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
||||
// ReSharper disable IdentifierTypo
|
||||
// ReSharper disable UnusedMember.Global
|
||||
|
||||
namespace NetAdmin.Infrastructure.Enums;
|
||||
|
||||
|
@ -35,11 +35,6 @@ public static class GlobalStatic
|
||||
/// </summary>
|
||||
public static DateTime LatestLogTime => LogCounterOff ? DateTime.MinValue : Volatile.Read(ref _latestLogTime).Time();
|
||||
|
||||
/// <summary>
|
||||
/// 日志记录器忽略的API编号
|
||||
/// </summary>
|
||||
public static string[] LoggerIgnoreApiIds => ["api/adm/tools/query.es.log", "api/probe/health.check", "api/probe/is.system.safety.stopped"];
|
||||
|
||||
/// <summary>
|
||||
/// 系统内部密钥
|
||||
/// </summary>
|
||||
|
@ -5,16 +5,36 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns4"/>
|
||||
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns4"/>
|
||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.5.8"/>
|
||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.5.8-ns1"/>
|
||||
<PackageReference Include="Furion.Pure.NS" Version="4.9.5.8-ns1"/>
|
||||
<PackageReference Include="Gurion" Version="1.1.0"/>
|
||||
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.11.0"/>
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0-rc.2.24474.3"/>
|
||||
<PackageReference Include="Minio" Version="6.0.3"/>
|
||||
<PackageReference Include="NSExt" Version="2.2.0"/>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
|
||||
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.4"/>
|
||||
<PackageReference Include="System.Drawing.Common" Version="9.0.0-rc.2.24474.1"/>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.Statements.ln">
|
||||
<Link>Languages/NetAdmin.Statements.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/Nations.ln">
|
||||
<Link>Languages/Nations.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/NetAdmin.Fields.ln">
|
||||
<Link>Languages/NetAdmin.Fields.ln</Link>
|
||||
</None>
|
||||
<None Include="$(SolutionDir)/assets/res/CountryCodes.ln">
|
||||
<Link>Languages/CountryCodes.ln</Link>
|
||||
</None>
|
||||
<EmbeddedResource Include="$(SolutionDir)/assets/res/Ln.resx">
|
||||
<Link>Languages/Ln.resx</Link>
|
||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="$(SolutionDir)/dist/backend/$(ProjectName)/Ln.Designer.cs">
|
||||
<Link>Languages/Ln.Designer.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Update="*.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
|
@ -3,13 +3,5 @@
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
},
|
||||
"JWTSettings": {
|
||||
"ExpiredTime": 20000
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
},
|
||||
}
|
||||
}
|
@ -3,13 +3,5 @@
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
},
|
||||
"JWTSettings": {
|
||||
"ExpiredTime": 20000
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": true,
|
||||
"InjectMiniProfiler": true
|
||||
}
|
||||
}
|
143
src/backend/NetAdmin.Infrastructure/NetAdminSettings.json
Normal file
143
src/backend/NetAdmin.Infrastructure/NetAdminSettings.json
Normal file
@ -0,0 +1,143 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
// App基本配置
|
||||
"AppSettings": {
|
||||
"InjectSpecificationDocument": false,
|
||||
"InjectMiniProfiler": false
|
||||
},
|
||||
// Swagger文档配置 ------------------------------------------------------------------------------
|
||||
"SpecificationDocumentSettings": {
|
||||
"EnableEnumSchemaFilter": false,
|
||||
"EnableAuthorized": false,
|
||||
"RoutePrefix": "swagger",
|
||||
"SecurityDefinitions": [
|
||||
{
|
||||
"Id": "Bearer",
|
||||
"Type": "ApiKey",
|
||||
"Name": "Authorization",
|
||||
"Description": "JWT Authorization header using the Bearer scheme.",
|
||||
"BearerFormat": "JWT",
|
||||
"Scheme": "bearer",
|
||||
"In": "Header",
|
||||
"Requirement": {
|
||||
"Scheme": {
|
||||
"Reference": {
|
||||
"Id": "Bearer",
|
||||
"Type": "SecurityScheme"
|
||||
},
|
||||
"Accesses": []
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
},
|
||||
// 验证码配置 --------------------------------------------------------------------------------------------------------
|
||||
"Captcha": {
|
||||
"ImageRelativePath": ".data/captcha",
|
||||
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
|
||||
},
|
||||
// 跨域配置 ----------------------------------------------------------------------------------------------------------
|
||||
"CorsAccessorSettings": {
|
||||
"WithExposedHeaders": [
|
||||
"access-token",
|
||||
"x-access-token",
|
||||
"content-disposition"
|
||||
]
|
||||
},
|
||||
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
|
||||
"DynamicApiControllerSettings": {
|
||||
"VerbToHttpMethods": [
|
||||
[
|
||||
"post",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"add",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"create",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"insert",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"submit",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"get",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"find",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"fetch",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"query",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"getlist",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"getall",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"put",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"update",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"delete",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"remove",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"clear",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"patch",
|
||||
"POST"
|
||||
]
|
||||
],
|
||||
"CamelCaseSeparator": ".",
|
||||
"UrlParameterization": true,
|
||||
"KeepVerb": true,
|
||||
"AbandonControllerAffixes": [
|
||||
"Controller"
|
||||
]
|
||||
},
|
||||
// 友好异常配置 -------------------------------------------------------------------------------------------------------
|
||||
"FriendlyExceptionSettings": {
|
||||
"LogError": false
|
||||
},
|
||||
// 日志配置 ----------------------------------------------------------------------------------------------------------
|
||||
"Logging": {
|
||||
"Monitor": {
|
||||
"GlobalEnabled": false,
|
||||
"ReturnValueThreshold": 1000
|
||||
}
|
||||
},
|
||||
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
|
||||
"UnifyResultSettings": {
|
||||
"Return200StatusCodes": [
|
||||
999
|
||||
]
|
||||
},
|
||||
}
|
@ -1 +1 @@
|
||||
global using Furion.RemoteRequest;
|
||||
global using Gurion.RemoteRequest;
|
@ -1,3 +1,6 @@
|
||||
#if DBTYPE_SQLSERVER
|
||||
using Microsoft.Data.SqlClient;
|
||||
#endif
|
||||
using Newtonsoft.Json;
|
||||
using DataType = FreeSql.DataType;
|
||||
|
||||
@ -13,10 +16,16 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions)
|
||||
/// </summary>
|
||||
public IFreeSql Build(FreeSqlInitMethods initMethods)
|
||||
{
|
||||
var freeSql = new FreeSql.FreeSqlBuilder().UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
|
||||
.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
|
||||
.Build();
|
||||
var freeSql = new FreeSql.FreeSqlBuilder()
|
||||
#if DBTYPE_SQLSERVER
|
||||
.UseConnectionFactory(databaseOptions.DbType, () => new SqlConnection(databaseOptions.ConnStr))
|
||||
.UseAdoConnectionPool(true)
|
||||
#else
|
||||
.UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
|
||||
#endif
|
||||
.UseGenerateCommandParameterWithLambda(true)
|
||||
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
|
||||
.Build();
|
||||
_ = InitDbAsync(freeSql, initMethods); // 初始化数据库 ,异步
|
||||
return freeSql;
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ public sealed class XmlCommentReader : ISingleton
|
||||
var xmlComments = specificationDocumentSettings.Value.XmlComments //
|
||||
?? App.GetConfig<SpecificationDocumentSettingsOptions>(nameof(SpecificationDocumentSettingsOptions).TrimSuffixOptions())
|
||||
.XmlComments;
|
||||
foreach (var commentFile in xmlComments.Where(x => x.Contains(nameof(NetAdmin)))) {
|
||||
foreach (var commentFile in xmlComments) {
|
||||
var xmlDoc = new XmlDocument();
|
||||
var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile);
|
||||
if (!File.Exists(xmlFilePath)) {
|
||||
|
@ -1,332 +0,0 @@
|
||||
{
|
||||
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
|
||||
// App基本配置
|
||||
"AppSettings": {
|
||||
// AppSettings:配置根节点
|
||||
// InjectMiniProfiler:是否注入 MiniProfiler,bool 类型,默认 true,关闭 Swagger 左上角监听
|
||||
// InjectSpecificationDocument:是否启用 Swagger 文档,bool 类型,默认 true,生产环境可关闭
|
||||
// EnabledReferenceAssemblyScan:是否启用通过 dll 方式添加的引用程序集扫描,bool 类型,默认 false
|
||||
// ExternalAssemblies:配置外部程序集完整路径,支持动态加载,string[] 类型,默认 []
|
||||
// PrintDbConnectionInfo:是否打印数据库连接信息到 MiniProfiler 中,bool 类型,默认 true
|
||||
// SupportPackageNamePrefixs:配置支持的包前缀名,string[] 类型,默认 []
|
||||
// OutputOriginalSqlExecuteLog:是否输出原始 Sql 执行日志(ADO.NET),默认 true
|
||||
// VirtualPath:配置虚拟目录,必须以 / 开头
|
||||
"InjectSpecificationDocument": false,
|
||||
"InjectMiniProfiler": false
|
||||
},
|
||||
// Swagger文档配置 ------------------------------------------------------------------------------
|
||||
"SpecificationDocumentSettings": {
|
||||
// DocumentTitle:文档标题,string,默认 Specification Api Document
|
||||
// DefaultGroupName:默认分组名,string,默认 Default
|
||||
// EnableAuthorized:是否启用权限控制,bool,默认 true
|
||||
// FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false 已弃用
|
||||
// RoutePrefix:规范化文档地址,string,默认 api,如果希望在首页,改为空字符串即可。
|
||||
// DocExpansionState:文档显示方式,DocExpansion,默认 List,取值:
|
||||
// List:列表式(展开子类),默认值
|
||||
// Full:完全展开
|
||||
// None:列表式(不展开子类)
|
||||
// XmlComments:程序集注释描述文件名(可带 .xml,string,默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
|
||||
// GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
|
||||
// SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 []
|
||||
// Servers:配置 Server 下拉列表,OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:"地址", Description:"描述"} ]}
|
||||
// HideServers:是否隐藏 Server 下拉列表,bool 类型,默认 true
|
||||
// RouteTemplate:配置文档 swagger.json 路由模板,默认模板:swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样
|
||||
// PackagesGroups:配置模块化内置分组名称,string[] 类型,默认 []
|
||||
// EnableEnumSchemaFilter:启用枚举 Schema 筛选器,bool 类型,默认 true
|
||||
// EnableTagsOrderDocumentFilter:启用标签排序筛选器,bool 类型,默认 true
|
||||
// ServerDir:配置 IIS 添加 Application 部署名,string 类型,默认空,仅在 Furion v3.2.0+` 有效
|
||||
// LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null,仅在 Furion v3.3.3+` 有效
|
||||
// Enabled:是否启用登录授权,默认 false
|
||||
// CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200,否则返回 401
|
||||
// SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头
|
||||
// EnableAllGroups:启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中,bool 类型,默认 false,仅在 Furion v3.3.4+` 有效
|
||||
// 另外 SpecificationOpenApiInfo 内置配置如下:
|
||||
//
|
||||
// Group:分组唯一标识,string 类型,必填
|
||||
// Order:分组排序,int 类型,数字越大排前面,默认 0
|
||||
// Visible:配置分组是否可见,bool 类型,默认 true
|
||||
// Title:配置分组标题,string 类型
|
||||
// Description:配置分组描述,string 类型
|
||||
// Version:配置分组版本,默认 1.0
|
||||
// TermsOfService:配置相关链接地址,Uri 类型
|
||||
// Contact:配置联系方式,OpenApiContact 类型
|
||||
// License:配置协议,OpenApiLicense 类型
|
||||
"EnableEnumSchemaFilter": false,
|
||||
"EnableAuthorized": false,
|
||||
"RoutePrefix": "swagger",
|
||||
"XmlComments": [
|
||||
"FreeSql.xml",
|
||||
"NetAdmin.AdmServer.Application.xml",
|
||||
"NetAdmin.AdmServer.Cache.xml",
|
||||
"NetAdmin.AdmServer.Host.xml",
|
||||
"NetAdmin.Application.xml",
|
||||
"NetAdmin.Cache.xml",
|
||||
"NetAdmin.Domain.xml",
|
||||
"NetAdmin.Host.xml",
|
||||
"NetAdmin.Infrastructure.xml",
|
||||
"NetAdmin.ScheduledService.xml",
|
||||
"NetAdmin.SysComponent.Application.xml",
|
||||
"NetAdmin.SysComponent.Cache.xml",
|
||||
"NetAdmin.SysComponent.Host.xml",
|
||||
]
|
||||
},
|
||||
// 验证码配置 --------------------------------------------------------------------------------------------------------
|
||||
"Captcha": {
|
||||
"ImageRelativePath": ".data/captcha",
|
||||
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
|
||||
},
|
||||
// 跨域配置 ----------------------------------------------------------------------------------------------------------
|
||||
"CorsAccessorSettings": {
|
||||
// CorsAccessorSettings
|
||||
// PolicyName:跨域策略名,string 类型,必填,默认 App.Cors.Policy
|
||||
// WithOrigins:允许跨域的域名列表,string[] 类型,默认 *
|
||||
// WithHeaders:请求表头,没有配置则允许所有表头,string[] 类型
|
||||
// WithExposedHeaders:设置客户端可获取的响应标头,string[] 类型,默认 ["access-token", "x-access-token"]
|
||||
// WithMethods:设置跨域允许请求谓词,没有配置则允许所有,string[] 类型
|
||||
// AllowCredentials:是否允许跨域请求中的凭据,bool 类型,默认值 true
|
||||
// SetPreflightMaxAge:设置预检过期时间,int 类型,默认值 24小时
|
||||
// FixedClientToken:是否默认配置 WithExposedHeaders,bool 类型,默认 true
|
||||
// SignalRSupport:是否启用 SignalR 跨域支持,bool 类型,默认 false
|
||||
"WithExposedHeaders": [
|
||||
"access-token",
|
||||
"x-access-token",
|
||||
"content-disposition"
|
||||
]
|
||||
},
|
||||
// 数据库配置 --------------------------------------------------------------------------------------------------------
|
||||
"Database": {
|
||||
"DbType": "Sqlite",
|
||||
"ConnStr": "data source=NetAdmin.db",
|
||||
"SeedDataRelativePath": "SeedData"
|
||||
},
|
||||
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
|
||||
"DynamicApiControllerSettings": {
|
||||
// 5.1.10 DynamicApiControllerSettings 配置
|
||||
// Furion 还提供动态 WebAPI 接口一些全局配置选项,如:
|
||||
//
|
||||
// DefaultRoutePrefix:默认路由前缀,string,默认 api
|
||||
// DefaultHttpMethod:默认请求谓词,string,默认:POST
|
||||
// DefaultModule:默认模块名称(区域),可用作接口版本,string,默认:v1
|
||||
// LowercaseRoute:小写路由格式,bool,默认:true
|
||||
// AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false
|
||||
// KeepVerb:是否保留动作谓词,bool,默认:false
|
||||
// KeepName:是否保留默认名称,bool,默认:fasle
|
||||
// CamelCaseSeparator:骆驼(驼峰)/帕斯卡命名分隔符,string,默认:-
|
||||
// VersionSeparator:版本分隔符,string,默认:@
|
||||
// ModelToQuery:GET/HEAD 请求将 类类型参数转查询参数,bool,默认 false
|
||||
// SupportedMvcController:是否支持 Mvc Controller 动态配置,bool,默认 false
|
||||
// UrlParameterization:路由参数采用 [FromQuery] 化,默认 false([FromRoute] 方式)
|
||||
// DefaultArea:配置默认区域,默认 null
|
||||
// ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效
|
||||
// AbandonControllerAffixes:默认去除控制器名称前后缀列表名,string[],默认:
|
||||
// AppServices
|
||||
// AppService
|
||||
// ApiController
|
||||
// Controller
|
||||
// Services
|
||||
// Service
|
||||
// AbandonActionAffixes:默认去除动作方法名称前后缀列表名,string[],默认:
|
||||
// Async
|
||||
// VerbToHttpMethods:复写默认方法名转 [HttpMethod] 规则,string[][] 二维数组类型,内置匹配规则为:
|
||||
// ["post"] = "POST",
|
||||
// ["add"] = "POST",
|
||||
// ["create"] = "POST",
|
||||
// ["insert"] = "POST",
|
||||
// ["submit"] = "POST",
|
||||
// ["get"] = "GET",
|
||||
// ["find"] = "GET",
|
||||
// ["fetch"] = "GET",
|
||||
// ["query"] = "GET",
|
||||
// ["getlist"] = "GET",
|
||||
// ["getall"] = "GET",
|
||||
// ["put"] = "PUT",
|
||||
// ["update"] = "PUT",
|
||||
// ["delete"] = "DELETE",
|
||||
// ["remove"] = "DELETE",
|
||||
// ["clear"] = "DELETE",
|
||||
// ["patch"] = "PATCH"
|
||||
//
|
||||
// 复写示例
|
||||
// "DynamicApiControllerSettings": {
|
||||
// "VerbToHttpMethods": [
|
||||
// [ "getall", "HEAD" ], // => getall 会被复写为 `[HttpHead]`
|
||||
// [ "other", "PUT" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
|
||||
// ]
|
||||
// }
|
||||
// "DefaultRoutePrefix": "rest",
|
||||
"VerbToHttpMethods": [
|
||||
[
|
||||
"post",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"add",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"create",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"insert",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"submit",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"get",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"find",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"fetch",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"query",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"getlist",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"getall",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"put",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"update",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"delete",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"remove",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"clear",
|
||||
"POST"
|
||||
],
|
||||
[
|
||||
"patch",
|
||||
"POST"
|
||||
]
|
||||
],
|
||||
"CamelCaseSeparator": ".",
|
||||
"UrlParameterization": true,
|
||||
"KeepVerb": true,
|
||||
"AbandonControllerAffixes": [
|
||||
"Controller"
|
||||
],
|
||||
},
|
||||
// 友好异常配置 -------------------------------------------------------------------------------------------------------
|
||||
"FriendlyExceptionSettings": {
|
||||
// 7.15 FriendlyExceptionSettings 配置
|
||||
// HideErrorCode:隐藏错误码,bool 类型,默认 false
|
||||
// DefaultErrorCode:默认错误码,string 类型
|
||||
// DefaultErrorMessage:默认错误消息,string 类型
|
||||
// ThrowBah:是否将 Oops.Oh 默认抛出为业务异常,bool 类型,默认 false,设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException
|
||||
// LogError:是否输出异常日志,bool 类型,默认 true
|
||||
"LogError": false
|
||||
},
|
||||
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
|
||||
"JWTSettings": {
|
||||
"ValidateIssuerSigningKey": true,
|
||||
// 是否验证密钥,bool 类型,默认true
|
||||
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
|
||||
// 密钥,string 类型,必须是复杂密钥,长度大于16
|
||||
"ValidateIssuer": true,
|
||||
// 是否验证签发方,bool 类型,默认true
|
||||
"ValidIssuer": "签发方",
|
||||
// 签发方,string 类型
|
||||
"ValidateAudience": true,
|
||||
// 是否验证签收方,bool 类型,默认true
|
||||
"ValidAudience": "签收方",
|
||||
// 签收方,string 类型
|
||||
"ValidateLifetime": true,
|
||||
// 是否验证过期时间,bool 类型,默认true,建议true
|
||||
"ExpiredTime": 20,
|
||||
// 过期时间,long 类型,单位分钟,默认20分钟
|
||||
"ClockSkew": 5,
|
||||
// 过期时间容错值,long 类型,单位秒,默认 5秒
|
||||
"Algorithm": "HS256"
|
||||
// 加密算法,string 类型,默认 HS256
|
||||
},
|
||||
// 日志配置 ----------------------------------------------------------------------------------------------------------
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"System.Logging.EventBusService": "Error"
|
||||
},
|
||||
"Monitor": {
|
||||
"GlobalEnabled": false,
|
||||
// 是否启用全局拦截,默认 `false`
|
||||
// "IncludeOfMethods": [], // 是否指定拦截特定方法,当 GlobalEnabled: false 有效
|
||||
// "ExcludeOfMethods": [], // 是否指定排除特定方法,当 GlobalEnabled: true 有效
|
||||
// "BahLogLevel": "Information", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别,默认 Information
|
||||
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效
|
||||
"ReturnValueThreshold": 1000
|
||||
// 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效
|
||||
// "JsonBehavior": "None", // 配置 LoggingMonitor Json 输出行为,默认 None,Furion 4.5.2+ 有效
|
||||
// "MethodsSettings": [
|
||||
// // 配置被监视方法更多信息,Furion 4.3.9+ 有效
|
||||
// {
|
||||
// "FullName": "Furion.Application.TestLoggerServices.MethodName", // 方法完全限定名
|
||||
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效
|
||||
// "ReturnValueThreshold": 0 // 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效
|
||||
// }
|
||||
// ]
|
||||
}
|
||||
},
|
||||
// Redis配置 --------------------------------------------------------------------------------------------------------
|
||||
"Redis": {
|
||||
"Instances": [
|
||||
// 数据缓存
|
||||
{
|
||||
"Name": "DataCache",
|
||||
"ConnStr": "localhost:6379,abortConnect=false",
|
||||
"DataBase": 0,
|
||||
}
|
||||
]
|
||||
},
|
||||
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
|
||||
"UnifyResultSettings": {
|
||||
// Return200StatusCodes:配置返回 200 状态码的请求,int[] 类型,只支持 400+(404除外) 状态码篡改
|
||||
// AdaptStatusCodes:配置篡改状态码规则,int[][] 类型,只支持 400+(404除外) 状态码篡改
|
||||
// SupportMvcController:是否支持 MVC 控制台规范化处理,bool 类型,默认 false
|
||||
"Return200StatusCodes": [
|
||||
999
|
||||
],
|
||||
},
|
||||
// 文件上传配置 -------------------------------------------------------------------------------------------------------
|
||||
"Upload": {
|
||||
"ContentTypes": [
|
||||
"image/jpg",
|
||||
"image/png",
|
||||
"image/jpeg",
|
||||
"image/gif"
|
||||
],
|
||||
"MaxSize": 1073741824,
|
||||
"Minio": {
|
||||
"ServerAddress": "vm-ubt-1:9000",
|
||||
"AccessKey": "nVMM0gSqwyIjM8iZ",
|
||||
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
|
||||
"BucketName": "net-admin",
|
||||
"AccessUrl": "http://vm-ubt-1:9000",
|
||||
"Secure": false,
|
||||
}
|
||||
},
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Api;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Cache;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Captcha;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Config;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Config;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dept;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dev;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dev;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Content;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Content;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
using NetAdmin.Domain.Dto.Sys;
|
||||
using NetAdmin.Domain.Dto.Sys.Job;
|
||||
using NetAdmin.Domain.Dto.Sys.JobRecord;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.JobRecord;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.LoginLog;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.LoginLog;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Menu;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Menu;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.RequestLogDetail;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLogDetail;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys;
|
||||
using NetAdmin.Domain.Dto.Sys.RequestLog;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLog;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Role;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgDept;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgDept;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsg;
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsg;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgRole;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgRole;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgUser;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgUser;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Tool;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Tool;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
using NetAdmin.Domain.Dto.Sys.User;
|
||||
using NetAdmin.Domain.Dto.Sys.UserProfile;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.UserProfile;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.VerifyCode;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.VerifyCode;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.UserProfile;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
|
||||
|
||||
// ReSharper disable once CheckNamespace
|
||||
namespace NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
|
@ -1,9 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(SolutionDir)/build/code.quality.props"/>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../NetAdmin.Application/NetAdmin.Application.csproj"/>
|
||||
<ProjectReference Include="../NetAdmin.SysComponent.Domain/NetAdmin.SysComponent.Domain.csproj"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -1,9 +1,11 @@
|
||||
global using NetAdmin.Application.Modules;
|
||||
global using NetAdmin.Application.Modules;
|
||||
global using NetAdmin.Application.Repositories;
|
||||
global using NetAdmin.Application.Services;
|
||||
global using NetAdmin.Domain.DbMaps.Sys;
|
||||
global using NetAdmin.Domain.Dto.Dependency;
|
||||
global using NetAdmin.SysComponent.Application.Modules.Sys;
|
||||
global using NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
global using NetAdmin.SysComponent.Domain.DbMaps.Sys;
|
||||
global using NetAdmin.SysComponent.Domain.Dto.Sys;
|
||||
global using NetAdmin.SysComponent.Domain.Enums.Sys;
|
||||
global using DynamicFilterInfo = NetAdmin.Domain.Dto.DynamicFilterInfo;
|
||||
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Api;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
using System.Collections.Concurrent;
|
||||
using NetAdmin.Domain.Dto.Sys.Cache;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
|
||||
using StackExchange.Redis;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys;
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Captcha;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
|
||||
using SixLabors.ImageSharp;
|
||||
using Yitter.IdGenerator;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Config;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Config;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Api;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Dic.Content;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys;
|
||||
using NetAdmin.Domain.Dto.Sys.JobRecord;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.Job;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
|
||||
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
|
||||
|
||||
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user