网站首页 网站源码
using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;
namespace Dpz.Core.Service.RepositoryServiceImpl;
public class HealthCheckService(
IRepository<HealthCheck> repository,
IMapper mapper,
IFusionCache fusionCache
) : AbstractCacheService(fusionCache), IHealthCheckService
{
protected override string CachePrefixKey =>
"Dpz.Core.Service.RepositoryServiceImpl.HealthCheckService";
protected override TimeSpan CacheDefaultExpiration => TimeSpan.FromDays(1);
public async Task<List<HealthCheckResponse>> GetHealthChecksAsync()
{
var list = await GetOrSetCacheAsync<List<HealthCheckResponse>>(
nameof(GetHealthChecksAsync),
async (_, cancellationToken) =>
{
var list = await repository.MongodbQueryable.ToListAsync(cancellationToken);
return mapper.Map<List<HealthCheckResponse>>(list);
}
);
return list;
}
public async Task SaveHealthCheckAsync(SaveHealthCheckRequest request)
{
var healthCheck = mapper.Map<HealthCheck>(request);
var exists = await repository.SearchFor(x => x.Id == healthCheck.Id).AnyAsync();
if (exists)
{
await repository.UpdateAsync(healthCheck);
}
else
{
await repository.InsertAsync(healthCheck);
}
}
public async Task UpdateHealthCheckStatusAsync(UpdateHealthCheckStatusRequest request)
{
throw new NotImplementedException();
}
public async Task DeleteHealthCheckAsync(string id)
{
await repository.DeleteAsync(id: id);
}
}
上述代码定义了一个名为 HealthCheckService
的类,它实现了 IHealthCheckService
接口,并且继承自 AbstractCacheService
。这个类的主要功能是管理健康检查(Health Check)相关的数据操作,使用了一个通用的 IRepository<HealthCheck>
接口来与数据存储进行交互,并且使用 IMapper
来进行对象映射。以下是代码的主要功能和结构的详细解释:
public HealthCheckService(
IRepository<HealthCheck> repository,
IMapper mapper,
IFusionCache fusionCache
)
IRepository<HealthCheck> repository
: 用于与健康检查数据进行交互的仓储接口。IMapper mapper
: 用于将请求和响应对象与数据模型之间进行转换的映射器。IFusionCache fusionCache
: 用于缓存的接口,提供缓存功能。protected override string CachePrefixKey =>
"Dpz.Core.Service.RepositoryServiceImpl.HealthCheckService";
protected override TimeSpan CacheDefaultExpiration => TimeSpan.FromDays(1);
public async Task<List<HealthCheckResponse>> GetHealthChecksAsync()
GetOrSetCacheAsync
方法尝试从缓存中获取数据,如果缓存中没有,则从数据库中查询并缓存结果。mapper
转换为 List<HealthCheckResponse>
类型。public async Task SaveHealthCheckAsync(SaveHealthCheckRequest request)
HealthCheck
实体。public async Task UpdateHealthCheckStatusAsync(UpdateHealthCheckStatusRequest request)
{
throw new NotImplementedException();
}
public async Task DeleteHealthCheckAsync(string id)
HealthCheckService
类提供了对健康检查数据的基本 CRUD(创建、读取、更新、删除)操作,并且利用缓存机制提高性能。它通过依赖注入的方式获取所需的仓储、映射器和缓存服务,使得代码结构清晰且易于测试和维护。