using FlexJobApi.Core;
|
using Furion.DatabaseAccessor;
|
using Mapster;
|
using MediatR;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace FlexJobApi.CommonServer.Application
|
{
|
/// <summary>
|
/// 保存编号地址
|
/// </summary>
|
/// <param name="rep"></param>
|
public class CodeUrlCommandHandler(
|
IRepository<CodeUrl> rep
|
) :
|
IRequestHandler<SaveCodeUrlCommand, string>
|
{
|
private readonly IRepository<CodeUrl> rep = rep;
|
|
/// <summary>
|
/// 保存编号地址
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public async Task<string> Handle(SaveCodeUrlCommand request, CancellationToken cancellationToken)
|
{
|
var entity = new CodeUrl();
|
request.Adapt(entity);
|
await SetCode(entity);
|
await rep.InsertAsync(entity);
|
return entity.Code;
|
}
|
|
private async Task<string> SetCode(CodeUrl entity)
|
{
|
var now = DateTime.Now;
|
entity.Code = $"{StringUtils.GenerateRandomString(5)}";
|
var exist = await rep.AnyAsync(it =>
|
it.Scene == entity.Scene
|
&& it.Code == entity.Code
|
&& (it.ExpiredTime == null
|
|| it.ExpiredTime > now));
|
if (exist)
|
{
|
await SetCode(entity);
|
}
|
return entity.Code;
|
}
|
}
|
}
|