fix BaseTakeSelfiePageModel

This commit is contained in:
jojo aquino 2025-02-25 21:25:22 +00:00
parent b313d21a11
commit 7da749777e

View File

@ -11,9 +11,11 @@ namespace EnotaryoPH.Web.Pages
public class BaseTakeSelfiePageModel : PageModel
{
protected readonly NotaryoDBContext _notaryoDBContext;
private readonly ICurrentUserService _currentUserService;
private readonly ICompreFaceClient _compreFaceClient;
private readonly IConfiguration _configuration;
private readonly ICurrentUserService _currentUserService;
private Transaction _transactionEntity;
private User _user;
public BaseTakeSelfiePageModel(NotaryoDBContext notaryoDBContext, ICurrentUserService currentUserService, ICompreFaceClient compreFaceClient, IConfiguration configuration)
{
@ -26,15 +28,22 @@ namespace EnotaryoPH.Web.Pages
protected async Task<bool> PostAsync()
{
var selfieImage = Convert.FromBase64String(SelfieBase64Image.Split(",")[1]) ?? [];
var identificationDocument = _notaryoDBContext.IdentificationDocuments.First(e => e.UserID == UserID);
var identificationDocument = _notaryoDBContext.IdentificationDocuments.First(e => e.UserID == CurrentUser.UserID);
var faceMatches = await VerifySelfieAsync(selfieImage, identificationDocument);
var isMatchSuccess = faceMatches.Any();
if (isMatchSuccess)
{
var signatory = _notaryoDBContext.TransactionSignatories.First(x => x.UserID == UserID);
var signatory = _notaryoDBContext.TransactionSignatories.FirstOrDefault(x => x.UserID == CurrentUser.UserID);
if (signatory != null)
{
signatory.Status = nameof(SignatoryStatus.FaceMatch);
_notaryoDBContext.Update(signatory);
}
else if (!_user.Role.IsInList(nameof(UserType.Principal), nameof(UserType.SuperUser), nameof(UserType.Administrator)))
{
return false;
}
var selfieEntity = CreateOrUpdateSelfie(selfieImage);
if (_notaryoDBContext.Entry(selfieEntity).State == EntityState.Detached)
@ -50,32 +59,26 @@ namespace EnotaryoPH.Web.Pages
return isMatchSuccess;
}
private Transaction _transactionEntity;
private int TransactionID
private TransactionSelfie CreateOrUpdateSelfie(byte[] selfieImage)
{
get
TransactionSelfie selfieEntity;
if (TransactionSelfie_UID == Guid.Empty)
{
if (_transactionEntity == null)
selfieEntity = new TransactionSelfie
{
_transactionEntity = _notaryoDBContext.Transactions.AsNoTracking().First(x => x.Transaction_UID == Transaction_UID);
CreatedOn = DateTime.UtcNow,
TransactionSelfie_UID = Guid.CreateVersion7(DateTime.UtcNow),
UserID = CurrentUser.UserID,
TransactionID = TransactionID
};
TransactionSelfie_UID = selfieEntity.TransactionSelfie_UID.Value;
}
return _transactionEntity?.TransactionID ?? 0;
}
}
private User _user;
private int UserID
else
{
get
{
if (_user == null)
{
_user = _notaryoDBContext.Users.AsNoTracking().First(x => x.User_UID == _currentUserService.GetUser_UID());
}
return _user?.UserID ?? 0;
selfieEntity = _notaryoDBContext.TransactionSelfies.FirstOrDefault(e => e.TransactionSelfie_UID == TransactionSelfie_UID);
}
selfieEntity.File = Convert.FromBase64String(SelfieBase64Image.Split(",")[1]);
return selfieEntity;
}
private async Task<IEnumerable<FaceMatches>> VerifySelfieAsync(byte[] selfieImage, IdentificationDocument identificationDocument)
@ -103,35 +106,37 @@ namespace EnotaryoPH.Web.Pages
return faceMatches;
}
private TransactionSelfie CreateOrUpdateSelfie(byte[] selfieImage)
{
TransactionSelfie selfieEntity;
if (TransactionSelfie_UID == Guid.Empty)
{
selfieEntity = new TransactionSelfie
{
CreatedOn = DateTime.UtcNow,
TransactionSelfie_UID = Guid.CreateVersion7(DateTime.UtcNow),
UserID = UserID,
TransactionID = TransactionID
};
TransactionSelfie_UID = selfieEntity.TransactionSelfie_UID.Value;
}
else
{
selfieEntity = _notaryoDBContext.TransactionSelfies.FirstOrDefault(e => e.TransactionSelfie_UID == TransactionSelfie_UID);
}
selfieEntity.File = Convert.FromBase64String(SelfieBase64Image.Split(",")[1]);
return selfieEntity;
}
[BindProperty(SupportsGet = true)]
public Guid Transaction_UID { get; set; }
[BindProperty]
public string SelfieBase64Image { get; set; }
[BindProperty(SupportsGet = true)]
public Guid Transaction_UID { get; set; }
[BindProperty(SupportsGet = true)]
public Guid TransactionSelfie_UID { get; set; }
private User CurrentUser
{
get
{
if (_user == null)
{
_user = _notaryoDBContext.Users.AsNoTracking().First(x => x.User_UID == _currentUserService.GetUser_UID());
}
return _user ?? new();
}
}
private int TransactionID
{
get
{
if (_transactionEntity == null)
{
_transactionEntity = _notaryoDBContext.Transactions.AsNoTracking().First(x => x.Transaction_UID == Transaction_UID);
}
return _transactionEntity?.TransactionID ?? 0;
}
}
}
}