using Hotline.Push; using Hotline.Repository.SqlSugar.Extensions; using Hotline.Share.Dtos; using Hotline.Share.Dtos.Push; using MapsterMapper; using Microsoft.AspNetCore.Mvc; using System.Text.RegularExpressions; using XF.Domain.Exceptions; using XF.Domain.Repository; namespace Hotline.Api.Controllers { public class TemplateDomainController : BaseController { private readonly IRepository _messageTemplateRepository; private readonly IMapper _mapper; /// /// /// /// /// public TemplateDomainController(IRepository messageTemplateRepository, IMapper mapper) { _messageTemplateRepository = messageTemplateRepository; _mapper = mapper; } /// /// 新增 /// /// /// [HttpPut("add")] public async Task AddTemplate([FromBody] TemplateDto dto) { var template = _mapper.Map(dto); Regex regex = new(@"\{[a-zA-Z0-9]{1,}\}"); var matches = regex.Matches(template.Content); List list = new List(); for (int i = 0; i < matches.Count; i++) { if (list.Find(p => p == matches[i].ToString()) != null) throw UserFriendlyException.SameMessage("存在相同的替换参数"); list.Add(matches[i].ToString()); } var data = await _messageTemplateRepository.GetAsync(p => p.Code == template.Code, HttpContext.RequestAborted); if (data != null) throw UserFriendlyException.SameMessage("存在相同Code!"); return await _messageTemplateRepository.AddAsync(template, HttpContext.RequestAborted); } /// /// 修改 /// /// /// [HttpPut("update")] public async Task UpdateTemplate([FromBody] UpdateTemplateDto dto) { var template = _mapper.Map(dto); Regex regex = new(@"\{[a-zA-Z0-9]{1,}\}"); var matches = regex.Matches(template.Content); List list = new List(); for (int i = 0; i < matches.Count; i++) { if (list.Find(p => p == matches[i].ToString()) != null) throw UserFriendlyException.SameMessage("存在相同的替换参数"); list.Add(matches[i].ToString()); } var data = await _messageTemplateRepository.GetAsync(p => p.Code == template.Code && p.Id != template.Id, HttpContext.RequestAborted); if (data != null) throw UserFriendlyException.SameMessage("存在相同Code!"); await _messageTemplateRepository.UpdateAsync(template, HttpContext.RequestAborted); } /// /// 删除 /// /// /// [HttpDelete("remove")] public async Task RemoveType(string Id) { await _messageTemplateRepository.RemoveAsync(Id, false, HttpContext.RequestAborted); } /// /// 查询详情 /// /// /// [HttpGet("info/{Id}")] public async Task Info(string Id) { var template = await _messageTemplateRepository.GetAsync(Id, HttpContext.RequestAborted); if (template is null) throw UserFriendlyException.SameMessage("查询失败!"); return _mapper.Map(template); } /// /// 查询列表 /// /// /// [HttpGet("getlist")] public async Task> GetList([FromQuery] TemplatePagedDto pagedDto) { var (total, items) = await _messageTemplateRepository .Queryable() .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.Code.Contains(pagedDto.Keyword!) || d.Content.Contains(pagedDto.Keyword!)) .WhereIF(pagedDto.PushBusiness.HasValue, d => d.PushBusiness == pagedDto.PushBusiness) .OrderByDescending(it => it.CreationTime) .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted); return new PagedDto(total, _mapper.Map>(items)); } } }