private async Task <Wallet> GenerateWalletAsync(WalletGenerationRequest request) { var wallet = Wallet.Create( _encryptionService, request.Id, request.ProtocolCode, request.NetworkType switch { NetworkType.Private => Swisschain.Sirius.Sdk.Primitives.NetworkType.Private, NetworkType.Test => Swisschain.Sirius.Sdk.Primitives.NetworkType.Test, NetworkType.Public => Swisschain.Sirius.Sdk.Primitives.NetworkType.Public, _ => throw new InvalidEnumArgumentException(nameof(request.NetworkType), (int)request.NetworkType, typeof(NetworkType)) },
public async Task InsertOrUpdateAsync(WalletGenerationRequest walletGenerationRequest) { await using var context = new DatabaseContext(_dbContextOptionsBuilder.Options); var affectedRowsCount = await context.WalletGenerationRequests .Where(entity => entity.Id == walletGenerationRequest.Id && entity.UpdatedAt <= walletGenerationRequest.UpdatedAt) .UpdateAsync(x => new WalletGenerationRequest { Id = walletGenerationRequest.Id, TenantId = walletGenerationRequest.TenantId, VaultId = walletGenerationRequest.VaultId, VaultType = walletGenerationRequest.VaultType, BlockchainId = walletGenerationRequest.BlockchainId, NetworkType = walletGenerationRequest.NetworkType, ProtocolCode = walletGenerationRequest.ProtocolCode, Component = walletGenerationRequest.Component, State = walletGenerationRequest.State, RejectionReason = walletGenerationRequest.RejectionReason, RejectionReasonMessage = walletGenerationRequest.RejectionReasonMessage, CreatedAt = walletGenerationRequest.CreatedAt, UpdatedAt = walletGenerationRequest.UpdatedAt }); if (affectedRowsCount == 0) { try { context.WalletGenerationRequests.Add(walletGenerationRequest); await context.SaveChangesAsync(); } catch (DbUpdateException exception) when(exception.InnerException is PostgresException pgException && pgException.SqlState == PostgresErrorCodes.UniqueViolation) { // ignore } } } }