网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码定义了一个名为 HealthCheckService 的类,它实现了 IHealthCheckService 接口,并且继承自 AbstractCacheService。这个类的主要功能是管理健康检查(Health Check)相关的数据操作,使用了一个通用的 IRepository<HealthCheck> 接口来与数据存储进行交互,并且使用 IMapper 来进行对象映射。以下是代码的主要功能和结构的详细解释:

1. 类的构造函数

public HealthCheckService(
    IRepository<HealthCheck> repository,
    IMapper mapper,
    IFusionCache fusionCache
)
  • 参数:
    • IRepository<HealthCheck> repository: 用于与健康检查数据进行交互的仓储接口。
    • IMapper mapper: 用于将请求和响应对象与数据模型之间进行转换的映射器。
    • IFusionCache fusionCache: 用于缓存的接口,提供缓存功能。

2. 缓存设置

protected override string CachePrefixKey =>
    "Dpz.Core.Service.RepositoryServiceImpl.HealthCheckService";
protected override TimeSpan CacheDefaultExpiration => TimeSpan.FromDays(1);
  • CachePrefixKey: 定义了缓存的前缀键,用于标识该服务的缓存。
  • CacheDefaultExpiration: 定义了缓存的默认过期时间,这里设置为1天。

3. 获取健康检查列表

public async Task<List<HealthCheckResponse>> GetHealthChecksAsync()
  • 该方法异步获取健康检查的列表。
  • 使用 GetOrSetCacheAsync 方法尝试从缓存中获取数据,如果缓存中没有,则从数据库中查询并缓存结果。
  • 查询结果通过 mapper 转换为 List<HealthCheckResponse> 类型。

4. 保存健康检查

public async Task SaveHealthCheckAsync(SaveHealthCheckRequest request)
  • 该方法用于保存健康检查数据。
  • 首先将请求对象映射为 HealthCheck 实体。
  • 检查该健康检查是否已存在于数据库中(通过 ID)。
  • 如果存在,则更新该记录;如果不存在,则插入新的记录。

5. 更新健康检查状态

public async Task UpdateHealthCheckStatusAsync(UpdateHealthCheckStatusRequest request)
{
    throw new NotImplementedException();
}
  • 该方法目前未实现,预期用于更新健康检查的状态。

6. 删除健康检查

public async Task DeleteHealthCheckAsync(string id)
  • 该方法用于根据 ID 删除健康检查记录。

总结

HealthCheckService 类提供了对健康检查数据的基本 CRUD(创建、读取、更新、删除)操作,并且利用缓存机制提高性能。它通过依赖注入的方式获取所需的仓储、映射器和缓存服务,使得代码结构清晰且易于测试和维护。

loading