Skip to content

Commit

Permalink
修复相关bug,重构 EventRegister 相关内容。
Browse files Browse the repository at this point in the history
  • Loading branch information
agile.zhou committed Jan 6, 2024
1 parent ecc0064 commit 625b7d4
Show file tree
Hide file tree
Showing 10 changed files with 172 additions and 262 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<ProjectReference Include="..\Agile.Config.Protocol\Agile.Config.Protocol.csproj" />
<ProjectReference Include="..\AgileConfig.Server.Data.Entity\AgileConfig.Server.Data.Entity.csproj" />
<ProjectReference Include="..\AgileConfig.Server.Data.Freesql\AgileConfig.Server.Data.Freesql.csproj" />
<ProjectReference Include="..\AgileConfig.Server.Data.Repository.Selector\AgileConfig.Server.Data.Repository.Selector.csproj" />
<ProjectReference Include="..\AgileConfig.Server.OIDC\AgileConfig.Server.OIDC.csproj" />
<ProjectReference Include="..\AgileConfig.Server.Service\AgileConfig.Server.Service.csproj" />
</ItemGroup>
Expand Down
19 changes: 3 additions & 16 deletions src/AgileConfig.Server.Apisite/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
using Microsoft.OpenApi.Models;
using AgileConfig.Server.Data.Repository.Freesql;
using AgileConfig.Server.Data.Repository.Mongodb;
using AgileConfig.Server.Data.Repository.Selector;

namespace AgileConfig.Server.Apisite
{
Expand Down Expand Up @@ -72,9 +73,9 @@ public void ConfigureServices(IServiceCollection services)
}

services.AddEnvAccessor();

services.AddFreeSqlFactory();
// Add freesqlRepositories or other repositories
AddDataRepositories(services);
services.AddRepositories();

services.AddBusinessServices();

Expand Down Expand Up @@ -153,19 +154,5 @@ private void AddSwaggerMiddleWare(IApplicationBuilder app)
});
}


private void AddDataRepositories(IServiceCollection services)
{
if (string.Equals(Configuration["db:provider"], "mongodb", StringComparison.OrdinalIgnoreCase))
{
services.AddMongodbRepository();
}
else
{
services.AddFreeSqlFactory();
services.AddFreeSqlRepository();
}
}

}
}
33 changes: 5 additions & 28 deletions src/AgileConfig.Server.Data.Freesql/FreesqlRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,37 +60,14 @@ public Task<List<T>> QueryAsync(Expression<Func<T, bool>> exp)
public async Task<List<T>> QueryPageAsync(Expression<Func<T, bool>> exp, int pageIndex, int pageSize, string defaultSortField = "Id",
string defaultSortType = "ASC")
{
var query = _repository.Where(exp);
var sort = Sort(defaultSortField);
if (string.Equals(defaultSortField, "DESC", StringComparison.OrdinalIgnoreCase))
{
query.OrderByDescending(sort);
}
else
{
query.OrderBy(sort);
}
return await query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
}
var list = await _repository.Where(exp)
.OrderByPropertyName(defaultSortField, defaultSortType.Equals("ASC", StringComparison.OrdinalIgnoreCase))
.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();

private Expression<Func<T, object>> Sort(string defaultSortField)
{
Expression<Func<T, object>> defaultSort = x => x.Id;
if (!string.IsNullOrEmpty(defaultSortField) &&
!defaultSortField.Equals("Id", StringComparison.OrdinalIgnoreCase))
{
var property = typeof(T).GetProperty(defaultSortField);
if (property == null)
{
return defaultSort;
}
var parameter = Expression.Parameter(typeof(T), "__q");
var memberExpress = Expression.Property(parameter, property);
return Expression.Lambda<Func<T, object>>(memberExpress, parameter);
}
return defaultSort;
return list;
}


public async Task<long> CountAsync(Expression<Func<T, bool>>? exp = null)
{
return await (exp == null ? _repository.Select.CountAsync() : _repository.Select.Where(exp).CountAsync());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using AgileConfig.Server.Data.Freesql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Security.Cryptography;

namespace AgileConfig.Server.Data.Repository.Selector
{
Expand All @@ -21,6 +20,7 @@ public static IServiceCollection AddRepositories(this IServiceCollection sc)
throw new ArgumentNullException(nameof(defaultProvider));
}

#region these repository will use default conn provider
if (defaultProvider.Equals("mongodb", StringComparison.OrdinalIgnoreCase))
{
sc.AddScoped<IAppInheritancedRepository, Mongodb.AppInheritancedRepository>();
Expand All @@ -47,17 +47,9 @@ public static IServiceCollection AddRepositories(this IServiceCollection sc)
sc.AddScoped<IUserRoleRepository, Freesql.UserRoleRepository>();
sc.AddSingleton<ISysInitRepository, Freesql.SysInitRepository>();
}
#endregion

sc.AddScoped<Freesql.ConfigPublishedRepository>();
sc.AddScoped<Freesql.ConfigRepository>();
sc.AddScoped<Freesql.PublishDetailRepository>();
sc.AddScoped<Freesql.PublishTimelineRepository>();

// sc.AddScoped<Mongodb.ConfigPublishedRepository>();
// sc.AddScoped<Mongodb.ConfigRepository>();
// sc.AddScoped<Mongodb.PublishDetailRepository>();
// sc.AddScoped<Mongodb.PublishTimelineRepository>();

#region these repositories genereated dependency env provider, if no env provider use default provider
sc.AddScoped<Func<string, IConfigPublishedRepository>>(sp => env =>
{
string envProvider = GetEnvProvider(env, config, defaultProvider);
Expand Down Expand Up @@ -103,20 +95,21 @@ public static IServiceCollection AddRepositories(this IServiceCollection sc)
}
});

sc.AddScoped((Func<IServiceProvider, Func<string, IPublishTimelineRepository>>)(sp => env =>
sc.AddScoped<Func<string, IPublishTimelineRepository>>(sp => env =>
{
string envProvider = GetEnvProvider(env, config, defaultProvider);

if (envProvider.Equals("mongodb", StringComparison.OrdinalIgnoreCase))
{
return new Mongodb.PublishTimelineRepository(GetConnectionString(env,config));
return new Mongodb.PublishTimelineRepository(GetConnectionString(env, config));
}
else
{
var factory = sp.GetService<IFreeSqlFactory>();
return new Freesql.PublishTimelineRepository(factory.Create(env));
}
}));
});
#endregion

return sc;
}
Expand Down
71 changes: 47 additions & 24 deletions src/AgileConfig.Server.Service/AppService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,29 @@ public class AppService : IAppService
{
private readonly IAppRepository _appRepository;
private readonly IAppInheritancedRepository _appInheritancedRepository;
private readonly IConfigRepository _configRepository;
private readonly IConfigPublishedRepository _configPublishedRepository;
private readonly Func<string, IConfigRepository> _configRepositoryAccessor;
private readonly Func<string, IConfigPublishedRepository> _configPublishedRepositoryAccessor;
private readonly IUserRepository _userRepository;
private readonly IUserAppAuthRepository _userAppAuthRepository;
private readonly ISettingService _settingService;

public AppService(
IAppRepository repository,
IAppInheritancedRepository appInheritancedRepository,
IConfigRepository configRepository,
IConfigPublishedRepository configPublishedRepository,
Func<string, IConfigRepository> configRepository,
Func<string, IConfigPublishedRepository> configPublishedRepository,
IUserRepository userRepository,
IUserAppAuthRepository userAppAuthRepository)
IUserAppAuthRepository userAppAuthRepository,
ISettingService settingService
)
{
_appRepository = repository;
_appInheritancedRepository = appInheritancedRepository;
_configRepository = configRepository;
_configPublishedRepository = configPublishedRepository;
_configRepositoryAccessor = configRepository;
_configPublishedRepositoryAccessor = configPublishedRepository;
_userRepository = userRepository;
_userAppAuthRepository = userAppAuthRepository;
_settingService = settingService;
}

public async Task<bool> AddAsync(App app)
Expand All @@ -54,22 +58,43 @@ public async Task<bool> DeleteAsync(App app)
app = await _appRepository.GetAsync(app.Id);
if (app != null)
{
await _appRepository.DeleteAsync(app);
//怕有的同学误删app导致要恢复,所以保留配置项吧。
var configs = await _configRepository.QueryAsync(x => x.AppId == app.Id);
foreach (var item in configs)
{
item.Status = ConfigStatus.Deleted;
await _configRepository.UpdateAsync(item);
}
//删除发布的配置项
var publishedConfigs = await _configPublishedRepository
.QueryAsync(x => x.AppId == app.Id && x.Status == ConfigStatus.Enabled)
;
foreach (var item in publishedConfigs)
var envs = await _settingService.GetEnvironmentList();
var updatedConfigIds = new List<string>();
var updatedConfigPublishedIds = new List<string>();

foreach (var env in envs)
{
item.Status = ConfigStatus.Deleted;
await _configPublishedRepository.UpdateAsync(item);
using var configRepository = _configRepositoryAccessor(env);
using var configPublishedRepository = _configPublishedRepositoryAccessor(env);
await _appRepository.DeleteAsync(app);
//怕有的同学误删app导致要恢复,所以保留配置项吧。
var configs = await configRepository.QueryAsync(x => x.AppId == app.Id);
foreach (var item in configs)
{
if (updatedConfigIds.Contains(item.Id))
{
// 因为根据 env 构造的 provider 最终可能都定位到 default provider 上去,所以可能重复更新数据行,这里进行判断以下。
continue;
}
item.Status = ConfigStatus.Deleted;
await configRepository.UpdateAsync(item);
updatedConfigIds.Add(item.Id);
}
//删除发布的配置项
var publishedConfigs = await configPublishedRepository
.QueryAsync(x => x.AppId == app.Id && x.Status == ConfigStatus.Enabled)
;
foreach (var item in publishedConfigs)
{
if (updatedConfigPublishedIds.Contains(item.Id))
{
// 因为根据 env 构造的 provider 最终可能都定位到 default provider 上去,所以可能重复更新数据行,这里进行判断以下。
continue;
}
item.Status = ConfigStatus.Deleted;
await configPublishedRepository.UpdateAsync(item);
updatedConfigPublishedIds.Add(item.Id);
}
}
}

Expand Down Expand Up @@ -206,8 +231,6 @@ public void Dispose()
{
_appInheritancedRepository.Dispose();
_appRepository.Dispose();
_configPublishedRepository.Dispose();
_configRepository.Dispose();
_userAppAuthRepository.Dispose();
_userRepository.Dispose();
}
Expand Down
Loading

0 comments on commit 625b7d4

Please sign in to comment.