public async Task AddOrIgnoreAsync(TransferValidationRequest transferValidationRequest) { await using var context = new DatabaseContext(_dbContextOptionsBuilder.Options); context.TransferValidationRequests.Add(transferValidationRequest); try { await context.SaveChangesAsync(); } catch (DbUpdateException e) when(e.InnerException is PostgresException pgEx && pgEx.SqlState == PostgresErrorCodes.UniqueViolation) { } }
public async Task UpdateAsync(TransferValidationRequest transferValidationRequest) { await using var context = new DatabaseContext(_dbContextOptionsBuilder.Options); if (transferValidationRequest.Sequence == 0) { context.TransferValidationRequests.Add(transferValidationRequest); await context.SaveChangesAsync(); } else { var affectedRowsCount = await context.TransferValidationRequests .Where(x => x.Id == transferValidationRequest.Id && x.Sequence + 1 == transferValidationRequest.Sequence) .UpdateAsync(x => new TransferValidationRequest { Id = transferValidationRequest.Id, TransferId = transferValidationRequest.TransferId, TenantId = transferValidationRequest.TenantId, VaultId = transferValidationRequest.VaultId, VaultType = transferValidationRequest.VaultType, Blockchain = transferValidationRequest.Blockchain, Asset = transferValidationRequest.Asset, SourceAddress = transferValidationRequest.SourceAddress, DestinationAddress = transferValidationRequest.DestinationAddress, Amount = transferValidationRequest.Amount, FeeLimit = transferValidationRequest.FeeLimit, TransferContext = transferValidationRequest.TransferContext, Document = transferValidationRequest.Document, Signature = transferValidationRequest.Signature, RejectionReason = transferValidationRequest.RejectionReason, RejectionReasonMessage = transferValidationRequest.RejectionReasonMessage, State = transferValidationRequest.State, Sequence = transferValidationRequest.Sequence, UpdatedAt = transferValidationRequest.UpdatedAt, CreatedAt = transferValidationRequest.CreatedAt }); if (affectedRowsCount != 1) { throw new InvalidOperationException( $"No rows found to update the transferValidationRequest {transferValidationRequest.Id}"); } } }
private async Task <bool> ConfirmAsync(TransferValidationRequest transferValidationRequest, LoggingContext context) { var response = await _vaultApiClient.TransferValidationRequests.ConfirmAsync( new ConfirmTransferValidationRequestRequest() { RequestId = $"Vault:TransferValidation:Confirm:{transferValidationRequest.Id}", TransferValidationRequestId = transferValidationRequest.Id, Document = "Approved", Signature = "empty", HostProcessId = "simple-vault" }); if (response.BodyCase == ConfirmTransferValidationRequestResponse.BodyOneofCase.Error) { _logger.LogError( "An error occurred while confirming transaction signing request. {@context} {@error}", context, response.Error); return(false); } return(true); }