using GxPress.Service.Interface.VerificationCode;
using GxPress.Repository.Interface.VerificationCode;
using System.Threading.Tasks;
using System;
using Datory;
using GxPress.Request.App.VerificationCode;
namespace GxPress.Service.Implement.VerificationCode
{
public class VerificationCodeService : IVerificationCodeService
{
private readonly IVerificationCodeRepository verificationCodeRepository;
public VerificationCodeService(IVerificationCodeRepository verificationCodeRepository)
{
this.verificationCodeRepository = verificationCodeRepository;
}
///
/// 生成验证码
///
///
public async Task GetCodeAsync(int userId)
{
var r1 = new Random();
var code = r1.Next(100000, 999999);
var entity = new Entity.VerificationCode.VerificationCode();
entity.UserId = userId;
entity.TypeId = 1;
entity.ExpireTime = 5;
entity.Code = code;
entity.IsDisable = false;
await verificationCodeRepository.InsertAsync(entity);
return code.ToString();
}
///
/// 生成验证码
///
///
public async Task ConfirmationCodeAsync(VerificationCodeRequest request)
{
var verificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.Code), request.Code).Where(nameof(Entity.VerificationCode.VerificationCode.IsDisable), false).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
if (verificationCode == null)
throw new Exception("不存在");
var createdDate = Convert.ToDateTime(verificationCode.CreatedDate).AddMinutes(verificationCode.ExpireTime);
if (createdDate < DateTime.Now)
{
throw new Exception("验证码过期");
}
verificationCode.IsDisable = true;
await verificationCodeRepository.UpdateAsync(verificationCode);
return true;
}
///
/// 持久连接验证码
///
///
public async Task LastingConfirmationCodeAsync(VerificationCodeRequest request)
{
var userVerificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.Code), request.Code).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
if (userVerificationCode == null)
return false;
var newUserVerificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.UserId), userVerificationCode.UserId).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
if (!userVerificationCode.Code.Equals(newUserVerificationCode.Code))
return false;
var createdDate = Convert.ToDateTime(userVerificationCode.CreatedDate).AddMinutes(userVerificationCode.ExpireTime);
if (createdDate < DateTime.Now)
{
return false;
}
return true;
}
}
}