using System.Diagnostics; using AutoMapper; using DMS.Core.Interfaces.Repositories.Triggers; using DMS.Core.Models.Triggers; using DMS.Infrastructure.Data; using DMS.Infrastructure.Entities; using Microsoft.Extensions.Logging; namespace DMS.Infrastructure.Repositories { /// /// 触发器仓储实现类,负责触发器数据的持久化操作。 /// 继承自 并实现 接口。 /// public class TriggerRepository : BaseRepository, ITriggerRepository { private readonly IMapper _mapper; /// /// 构造函数,注入 AutoMapper 和 SqlSugarDbContext。 /// /// AutoMapper 实例,用于实体模型和数据库模型之间的映射。 /// SqlSugar 数据库上下文,用于数据库操作。 /// 日志记录器实例。 public TriggerRepository(IMapper mapper, SqlSugarDbContext dbContext, ILogger logger) : base(dbContext, logger) { _mapper = mapper; } /// /// 获取所有触发器定义 /// public async Task> GetAllAsync() { var dbList = await base.GetAllAsync(); return _mapper.Map>(dbList); } /// /// 根据 ID 获取触发器定义 /// public async Task GetByIdAsync(int id) { var dbTrigger = await base.GetByIdAsync(id); return _mapper.Map(dbTrigger); } /// /// 添加一个新的触发器定义 /// public async Task AddAsync(TriggerDefinition trigger) { var dbTrigger = await base.AddAsync(_mapper.Map(trigger)); return _mapper.Map(dbTrigger, trigger); } /// /// 更新一个已存在的触发器定义 /// public async Task UpdateAsync(TriggerDefinition trigger) { var rowsAffected = await base.UpdateAsync(_mapper.Map(trigger)); return rowsAffected > 0 ? trigger : null; } /// /// 删除一个触发器定义 /// public async Task DeleteAsync(int id) { var stopwatch = new Stopwatch(); stopwatch.Start(); var rowsAffected = await Db.Deleteable() .In(id) .ExecuteCommandAsync(); stopwatch.Stop(); _logger.LogInformation($"Delete {typeof(DbTriggerDefinition).Name},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms"); return rowsAffected > 0; } /// /// 获取与指定变量关联的所有触发器定义 /// public async Task> GetByVariableIdAsync(int variableId) { var stopwatch = new Stopwatch(); stopwatch.Start(); var dbList = await Db.Queryable() .Where(t => t.VariableId == variableId) .ToListAsync(); stopwatch.Stop(); _logger.LogInformation($"GetByVariableId {typeof(DbTriggerDefinition).Name},VariableId={variableId},耗时:{stopwatch.ElapsedMilliseconds}ms"); return _mapper.Map>(dbList); } } }