TemplateDomainController.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using Hotline.Push;
  2. using Hotline.Repository.SqlSugar.Extensions;
  3. using Hotline.Share.Dtos;
  4. using Hotline.Share.Dtos.Push;
  5. using MapsterMapper;
  6. using Microsoft.AspNetCore.Mvc;
  7. using System.Text.RegularExpressions;
  8. using XF.Domain.Exceptions;
  9. using XF.Domain.Repository;
  10. namespace Hotline.Api.Controllers
  11. {
  12. public class TemplateDomainController : BaseController
  13. {
  14. private readonly IRepository<MessageTemplate> _messageTemplateRepository;
  15. private readonly IMapper _mapper;
  16. /// <summary>
  17. ///
  18. /// </summary>
  19. /// <param name="messageTemplateRepository"></param>
  20. /// <param name="mapper"></param>
  21. public TemplateDomainController(IRepository<MessageTemplate> messageTemplateRepository, IMapper mapper)
  22. {
  23. _messageTemplateRepository = messageTemplateRepository;
  24. _mapper = mapper;
  25. }
  26. /// <summary>
  27. /// 新增
  28. /// </summary>
  29. /// <param name="dto"></param>
  30. /// <returns></returns>
  31. [HttpPut("add")]
  32. public async Task<string> AddTemplate([FromBody] TemplateDto dto)
  33. {
  34. var template = _mapper.Map<MessageTemplate>(dto);
  35. Regex regex = new(@"\{[a-zA-Z0-9]{1,}\}");
  36. var matches = regex.Matches(template.Content);
  37. List<string> list = new List<string>();
  38. for (int i = 0; i < matches.Count; i++)
  39. {
  40. if (list.Find(p => p == matches[i].ToString()) != null)
  41. throw UserFriendlyException.SameMessage("存在相同的替换参数");
  42. list.Add(matches[i].ToString());
  43. }
  44. var data = await _messageTemplateRepository.GetAsync(p => p.Code == template.Code, HttpContext.RequestAborted);
  45. if (data != null)
  46. throw UserFriendlyException.SameMessage("存在相同Code!");
  47. return await _messageTemplateRepository.AddAsync(template, HttpContext.RequestAborted);
  48. }
  49. /// <summary>
  50. /// 修改
  51. /// </summary>
  52. /// <param name="dto"></param>
  53. /// <returns></returns>
  54. [HttpPut("update")]
  55. public async Task UpdateTemplate([FromBody] UpdateTemplateDto dto)
  56. {
  57. var template = _mapper.Map<MessageTemplate>(dto);
  58. Regex regex = new(@"\{[a-zA-Z0-9]{1,}\}");
  59. var matches = regex.Matches(template.Content);
  60. List<string> list = new List<string>();
  61. for (int i = 0; i < matches.Count; i++)
  62. {
  63. if (list.Find(p => p == matches[i].ToString()) != null)
  64. throw UserFriendlyException.SameMessage("存在相同的替换参数");
  65. list.Add(matches[i].ToString());
  66. }
  67. var data = await _messageTemplateRepository.GetAsync(p => p.Code == template.Code && p.Id != template.Id, HttpContext.RequestAborted);
  68. if (data != null)
  69. throw UserFriendlyException.SameMessage("存在相同Code!");
  70. await _messageTemplateRepository.UpdateAsync(template, HttpContext.RequestAborted);
  71. }
  72. /// <summary>
  73. /// 删除
  74. /// </summary>
  75. /// <param name="Id"></param>
  76. /// <returns></returns>
  77. [HttpDelete("remove")]
  78. public async Task RemoveType(string Id)
  79. {
  80. await _messageTemplateRepository.RemoveAsync(Id, false, HttpContext.RequestAborted);
  81. }
  82. /// <summary>
  83. /// 查询详情
  84. /// </summary>
  85. /// <param name="Id"></param>
  86. /// <returns></returns>
  87. [HttpGet("info/{Id}")]
  88. public async Task<UpdateTemplateDto> Info(string Id)
  89. {
  90. var template = await _messageTemplateRepository.GetAsync(Id, HttpContext.RequestAborted);
  91. if (template is null)
  92. throw UserFriendlyException.SameMessage("查询失败!");
  93. return _mapper.Map<UpdateTemplateDto>(template);
  94. }
  95. /// <summary>
  96. /// 查询列表
  97. /// </summary>
  98. /// <param name="pagedDto"></param>
  99. /// <returns></returns>
  100. [HttpGet("getlist")]
  101. public async Task<PagedDto<TemplateDataDto>> GetList([FromQuery] TemplatePagedDto pagedDto)
  102. {
  103. var (total, items) = await _messageTemplateRepository
  104. .Queryable()
  105. .WhereIF(!string.IsNullOrEmpty(pagedDto.Keyword), d => d.Code.Contains(pagedDto.Keyword!) || d.Content.Contains(pagedDto.Keyword!))
  106. .WhereIF(pagedDto.PushBusiness.HasValue, d => d.PushBusiness == pagedDto.PushBusiness)
  107. .OrderByDescending(it => it.CreationTime)
  108. .ToPagedListAsync(pagedDto.PageIndex, pagedDto.PageSize, HttpContext.RequestAborted);
  109. return new PagedDto<TemplateDataDto>(total, _mapper.Map<IReadOnlyList<TemplateDataDto>>(items));
  110. }
  111. }
  112. }