You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.6 KiB

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using Microsoft.Extensions.Logging;
using CellularManagement.Domain.Entities;
using CellularManagement.Domain.Repositories;
using CellularManagement.Infrastructure.Repositories.Base;
using CellularManagement.Domain.Entities.Device;
using CellularManagement.Domain.Repositories.Base;
using CellularManagement.Domain.Repositories.Device;
namespace CellularManagement.Infrastructure.Repositories.Device;
/// <summary>
/// 场景仓储实现类
/// </summary>
public class ScenarioRepository : BaseRepository<Scenario>, IScenarioRepository
{
private readonly ILogger<ScenarioRepository> _logger;
/// <summary>
/// 初始化仓储
/// </summary>
public ScenarioRepository(
ICommandRepository<Scenario> commandRepository,
IQueryRepository<Scenario> queryRepository,
ILogger<ScenarioRepository> logger)
: base(commandRepository, queryRepository, logger)
{
_logger = logger;
}
/// <summary>
/// 添加场景
/// </summary>
public async Task<Scenario> AddScenarioAsync(Scenario scenario, CancellationToken cancellationToken = default)
{
var result = await CommandRepository.AddAsync(scenario, cancellationToken);
return result;
}
/// <summary>
/// 更新场景
/// </summary>
public void UpdateScenario(Scenario scenario)
{
CommandRepository.Update(scenario);
}
/// <summary>
/// 删除场景
/// </summary>
public async Task DeleteScenarioAsync(string id, CancellationToken cancellationToken = default)
{
await CommandRepository.DeleteByIdAsync(id, cancellationToken);
}
/// <summary>
/// 获取所有场景
/// </summary>
public async Task<IList<Scenario>> GetAllScenariosAsync(CancellationToken cancellationToken = default)
{
var scenarios = await QueryRepository.GetAllAsync(cancellationToken: cancellationToken);
return scenarios.ToList();
}
/// <summary>
/// 根据ID获取场景
/// </summary>
public async Task<Scenario?> GetScenarioByIdAsync(string id, CancellationToken cancellationToken = default)
{
return await QueryRepository.GetByIdAsync(id, cancellationToken: cancellationToken);
}
/// <summary>
/// 根据编码获取场景
/// </summary>
public async Task<Scenario?> GetScenarioByCodeAsync(string code, CancellationToken cancellationToken = default)
{
return await QueryRepository.FirstOrDefaultAsync(s => s.Code == code, cancellationToken: cancellationToken);
}
/// <summary>
/// 搜索场景
/// </summary>
public async Task<IList<Scenario>> SearchScenariosAsync(
string? keyword,
CancellationToken cancellationToken = default)
{
var query = await QueryRepository.FindAsync(s => true, cancellationToken: cancellationToken);
if (!string.IsNullOrWhiteSpace(keyword))
{
query = query.Where(s =>
s.Name.Contains(keyword) ||
s.Code.Contains(keyword) ||
(s.Description != null && s.Description.Contains(keyword)));
}
var scenarios = query;
return scenarios.ToList();
}
/// <summary>
/// 检查场景是否存在
/// </summary>
public async Task<bool> ExistsAsync(string id, CancellationToken cancellationToken = default)
{
return await QueryRepository.AnyAsync(s => s.Id == id, cancellationToken: cancellationToken);
}
/// <summary>
/// 检查编码是否存在
/// </summary>
public async Task<bool> CodeExistsAsync(string code, CancellationToken cancellationToken = default)
{
return await QueryRepository.AnyAsync(s => s.Code == code, cancellationToken: cancellationToken);
}
/// <summary>
/// 获取启用的场景
/// </summary>
public async Task<IList<Scenario>> GetEnabledScenariosAsync(CancellationToken cancellationToken = default)
{
var scenarios = await QueryRepository.FindAsync(s => !s.IsDisabled, cancellationToken: cancellationToken);
return scenarios.ToList();
}
/// <summary>
/// 根据网络配置ID获取场景
/// </summary>
public async Task<IList<Scenario>> GetScenariosByNetworkConfigIdAsync(string networkConfigId, CancellationToken cancellationToken = default)
{
var scenarios = await QueryRepository.FindAsync(s => s.NetworkConfigId == networkConfigId, cancellationToken: cancellationToken);
return scenarios.ToList();
}
}