< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Repositories.Database.Node.PeerDbRepository
Assembly: NLightning.Infrastructure.Repositories
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Repositories/Database/Node/PeerDbRepository.cs
Tag: 36_15743069263
Line coverage
0%
Covered lines: 0
Uncovered lines: 51
Coverable lines: 51
Total lines: 82
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
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%
AddOrUpdateAsync()0%620%
AddOrUpdateAsync()0%620%
Update(...)100%210%
Update(...)100%210%
GetAllAsync()100%210%
GetAllAsync()100%210%
GetByNodeIdAsync()0%620%
GetByNodeIdAsync()0%620%
UpdatePeerLastSeenAsync()0%620%
UpdatePeerLastSeenAsync()0%620%
MapDomainToEntity(...)100%210%
MapDomainToEntity(...)100%210%
MapEntityToDomain(...)100%210%
MapEntityToDomain(...)100%210%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Repositories/Database/Node/PeerDbRepository.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2
 3namespace NLightning.Infrastructure.Repositories.Database.Node;
 4
 5using Domain.Crypto.ValueObjects;
 6using Domain.Node.Interfaces;
 7using Domain.Node.Models;
 8using Persistence.Contexts;
 9using Persistence.Entities.Node;
 10
 11public class PeerDbRepository : BaseDbRepository<PeerEntity>, IPeerDbRepository
 12{
 013    public PeerDbRepository(NLightningDbContext context) : base(context)
 014    {
 015    }
 16
 17    public async Task AddOrUpdateAsync(PeerModel peerModel)
 018    {
 019        var peerEntity = MapDomainToEntity(peerModel);
 20
 021        var existingEntity = await GetByIdAsync(peerEntity.NodeId);
 022        if (existingEntity is null)
 023        {
 024            Insert(peerEntity);
 025        }
 26        else
 027        {
 028            Update(peerEntity);
 029        }
 030    }
 31
 32    public void Update(PeerModel peerModel)
 033    {
 034        var peerEntity = MapDomainToEntity(peerModel);
 035        base.Update(peerEntity);
 036    }
 37
 38    public async Task<IEnumerable<PeerModel>> GetAllAsync()
 039    {
 040        var peerEntities = await Get().ToListAsync();
 41
 042        return peerEntities.Select(MapEntityToDomain);
 043    }
 44
 45    public async Task<PeerModel?> GetByNodeIdAsync(CompactPubKey nodeId)
 046    {
 047        var peerEntity = await GetByIdAsync(nodeId);
 048        if (peerEntity == null)
 049            return null;
 50
 051        return MapEntityToDomain(peerEntity);
 052    }
 53
 54    public async Task UpdatePeerLastSeenAsync(CompactPubKey peerCompactPubKey)
 055    {
 056        var existingPeer = await GetByIdAsync(peerCompactPubKey);
 057        if (existingPeer is not null)
 058        {
 059            existingPeer.LastSeenAt = DateTime.UtcNow;
 060            Update(existingPeer);
 061        }
 062    }
 63
 64    private static PeerEntity MapDomainToEntity(PeerModel peerModel)
 065    {
 066        return new PeerEntity
 067        {
 068            NodeId = peerModel.NodeId,
 069            Host = peerModel.Host,
 070            Port = peerModel.Port,
 071            LastSeenAt = peerModel.LastSeenAt
 072        };
 073    }
 74
 75    private static PeerModel MapEntityToDomain(PeerEntity peerEntity)
 076    {
 077        return new PeerModel(peerEntity.NodeId, peerEntity.Host, peerEntity.Port)
 078        {
 079            LastSeenAt = peerEntity.LastSeenAt
 080        };
 081    }
 82}