Files
FrontOffice.BFF/src/FrontOffice.BFF.Application/UserCQ/Commands/AcceptContract/AcceptContractCommandHandler.cs

47 lines
1.9 KiB
C#
Raw Normal View History

using CMSMicroservice.Protobuf.Protos.OtpToken;
2025-11-16 03:28:34 +03:30
using CMSMicroservice.Protobuf.Protos.UserContract;
using FrontOffice.BFF.Application.UserCQ.Commands.VerifyOtpToken;
2025-11-16 03:28:34 +03:30
namespace FrontOffice.BFF.Application.UserCQ.Commands.AcceptContract;
public class AcceptContractCommandHandler : IRequestHandler<AcceptContractCommand, AcceptContractResponseDto>
{
private readonly IApplicationContractContext _context;
2025-11-16 03:28:34 +03:30
private readonly ICurrentUserService _currentUserService;
2025-11-16 03:28:34 +03:30
public AcceptContractCommandHandler(IApplicationContractContext context, ICurrentUserService currentUserService)
{
_context = context;
2025-11-16 03:28:34 +03:30
_currentUserService = currentUserService;
}
public async Task<AcceptContractResponseDto> Handle(AcceptContractCommand request, CancellationToken cancellationToken)
{
2025-11-16 03:28:34 +03:30
await _context.UserContract.CreateNewUserContractAsync(new CreateNewUserContractRequest()
{
SignGuid = request.SignGuid,
UserId = long.Parse(_currentUserService.UserId ?? throw new InvalidOperationException()),
ContractId = 1,
SignedPdfFile = request.ContractHtml,
}, cancellationToken: cancellationToken);
var verifyRequest = new VerifyOtpTokenRequest()
{
Mobile = _currentUserService.MobileNumber,
Code = request.Code,
Purpose = "signContract",
};
var response = await _context.OtpToken.VerifyOtpTokenAsync(request:verifyRequest, cancellationToken: cancellationToken);
var result = response.Adapt<AcceptContractResponseDto>();
if (response.Success && response.UserId.HasValue && response.UserId.Value > 0)
{
var token = await _context.User.GetJwtTokenAsync(request: new()
{
Id = response.UserId.Value
}, cancellationToken: cancellationToken);
result.Token = token?.Token;
}
return result;
}
}