< 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: 57_24045730253
Line coverage
0%
Covered lines: 0
Uncovered lines: 52
Coverable lines: 52
Total lines: 83
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            Type = peerModel.Type,
 072            LastSeenAt = peerModel.LastSeenAt
 073        };
 074    }
 75
 76    private static PeerModel MapEntityToDomain(PeerEntity peerEntity)
 077    {
 078        return new PeerModel(peerEntity.NodeId, peerEntity.Host, peerEntity.Port, peerEntity.Type)
 079        {
 080            LastSeenAt = peerEntity.LastSeenAt
 081        };
 082    }
 83}