using YD_Event.Application.Certificate.Dtos;
using YD_Event.Core.Entities;
using SkiaSharp;
using QuestPDF.Fluent;
using YD_Event.Core.Certificate;
using YD_Event.Application.File;
namespace YD_Event.Application.Certificate;
///
/// 证书管理服务
///
public class CertificateService : BaseService, ITransient
{
private readonly ISqlSugarRepository _repository;
private readonly ISqlSugarRepository _eventCertRepository;
private readonly IIdGenerator _idGenerator;
private readonly FileService _fileService;
private readonly IHttpClientFactory _httpClientFactory;
public CertificateService(ISqlSugarRepository repository,
ISqlSugarRepository eventCertRepository,
IIdGenerator idGenerator,
FileService fileService,
IHttpClientFactory httpClientFactory) : base(repository)
{
_repository = repository;
_eventCertRepository = eventCertRepository;
_idGenerator = idGenerator;
_fileService = fileService;
_httpClientFactory = httpClientFactory;
}
///
/// 证书分页查询
///
[DisplayName("证书分页查询")]
[HttpGet]
public async Task> Page([FromQuery] CertificateQueryInput input)
{
return await _repository.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), x => x.Name.Contains(input.Name))
.OrderBy(x => x.Sort)
.OrderByDescending(x => x.CreatedTime)
.Select(x => new CertificateListOutput
{
Id = x.Id,
Name = x.Name,
Issuer = x.Issuer,
TemplateContent = x.TemplateContent,
TemplateType = x.TemplateType,
Sort = x.Sort,
CreatedTime = x.CreatedTime
})
.ToPagedListAsync(input);
}
///
/// 添加证书
///
[DisplayName("添加证书")]
[HttpPost("add")]
public async Task Add(AddCertificateInput input)
{
var entity = input.Adapt();
entity.Id = _idGenerator.NextId();
await _repository.InsertAsync(entity);
}
///
/// 更新证书
///
[DisplayName("更新证书")]
[HttpPut("edit")]
public async Task Update(UpdateCertificateInput input)
{
var entity = await _repository.GetByIdAsync(input.Id);
if (entity == null) throw Oops.Bah("证书不存在");
input.Adapt(entity);
await _repository.UpdateAsync(entity);
}
///
/// 删除证书
///
[DisplayName("删除证书")]
public async Task Delete(List ids)
{
if (ids == null || !ids.Any()) return;
await _repository.DeleteAsync(x => ids.Contains(x.Id));
}
///
/// 获取证书详情
///
[DisplayName("获取证书详情")]
[HttpGet("detail")]
public async Task Detail([FromQuery] long id)
{
return await _repository.GetByIdAsync(id);
}
///
/// 上传证书模板并解析
///
[DisplayName("上传证书模板")]
[HttpPost("template/upload")]
public async Task