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}");
                }
            }
        }
Beispiel #3
0
        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);
        }