< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Repositories.Database.Bitcoin.WalletAddressesDbRepository
Assembly: NLightning.Infrastructure.Repositories
File(s): /home/runner/work/NLightning/NLightning/src/NLightning.Infrastructure.Repositories/Database/Bitcoin/WalletAddressesDbRepository.cs
Tag: 57_24045730253
Line coverage
0%
Covered lines: 0
Uncovered lines: 43
Coverable lines: 43
Total lines: 71
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetUnusedAddressAsync()0%620%
GetUnusedAddressAsync()0%620%
GetLastUsedAddressIndex()0%620%
GetLastUsedAddressIndex()0%620%
AddRange(...)100%210%
AddRange(...)100%210%
UpdateAsync(...)100%210%
UpdateAsync(...)100%210%
GetAllAddresses()100%210%
GetAllAddresses()100%210%
MapDomainToEntity(...)100%210%
MapDomainToEntity(...)100%210%
MapEntityToModel(...)100%210%
MapEntityToModel(...)100%210%

File(s)

/home/runner/work/NLightning/NLightning/src/NLightning.Infrastructure.Repositories/Database/Bitcoin/WalletAddressesDbRepository.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2
 3namespace NLightning.Infrastructure.Repositories.Database.Bitcoin;
 4
 5using Domain.Bitcoin.Enums;
 6using Domain.Bitcoin.Interfaces;
 7using Domain.Bitcoin.Wallet.Models;
 8using Persistence.Contexts;
 9using Persistence.Entities.Bitcoin;
 10
 11public class WalletAddressesDbRepository(NLightningDbContext context)
 012    : BaseDbRepository<WalletAddressEntity>(context), IWalletAddressesDbRepository
 13{
 14    public async Task<WalletAddressModel?> GetUnusedAddressAsync(AddressType type, bool isChange)
 015    {
 016        var walletAddressEntity = await DbSet.AsNoTracking()
 017                                             .Include(x => x.Utxos)
 018                                             .Where(x => x.AddressType.Equals(type)
 019                                                      && x.IsChange.Equals(isChange))
 020                                             .Where(x => x.Utxos != null
 021                                                      && x.Utxos.Count().Equals(0))
 022                                             .OrderBy(x => x.Index)
 023                                             .FirstOrDefaultAsync();
 24
 025        return walletAddressEntity is null ? null : MapEntityToModel(walletAddressEntity);
 026    }
 27
 28    public async Task<uint> GetLastUsedAddressIndex(AddressType addressType, bool isChange)
 029    {
 030        var walletAddressEntity = await DbSet.AsNoTracking()
 031                                             .Where(x => x.AddressType.Equals(addressType)
 032                                                      && x.IsChange.Equals(isChange))
 033                                             .OrderByDescending(x => x.Index)
 034                                             .FirstOrDefaultAsync();
 35
 036        return walletAddressEntity?.Index ?? 0;
 037    }
 38
 39    public void AddRange(List<WalletAddressModel> addresses)
 040    {
 041        var walletAddressEntities = addresses.Select(MapDomainToEntity);
 042        DbSet.AddRange(walletAddressEntities);
 043    }
 44
 45    public void UpdateAsync(WalletAddressModel address)
 046    {
 047        var walletAddressEntity = MapDomainToEntity(address);
 048        Update(walletAddressEntity);
 049    }
 50
 51    public IEnumerable<WalletAddressModel> GetAllAddresses()
 052    {
 053        return DbSet.AsNoTracking().AsEnumerable().Select(MapEntityToModel);
 054    }
 55
 56    private static WalletAddressEntity MapDomainToEntity(WalletAddressModel model)
 057    {
 058        return new WalletAddressEntity
 059        {
 060            Index = model.Index,
 061            IsChange = model.IsChange,
 062            AddressType = model.AddressType,
 063            Address = model.Address
 064        };
 065    }
 66
 67    internal static WalletAddressModel MapEntityToModel(WalletAddressEntity entity)
 068    {
 069        return new WalletAddressModel(entity.AddressType, entity.Index, entity.IsChange, entity.Address);
 070    }
 71}