< Summary - Combined Code Coverage

Information
Class: NLightning.Infrastructure.Repositories.Database.Bitcoin.WatchedTransactionDbRepository
Assembly: NLightning.Infrastructure.Repositories
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Infrastructure.Repositories/Database/Bitcoin/WatchedTransactionDbRepository.cs
Tag: 36_15743069263
Line coverage
0%
Covered lines: 0
Uncovered lines: 41
Coverable lines: 41
Total lines: 71
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
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%
Add(...)0%620%
Add(...)0%620%
Update(...)100%210%
Update(...)100%210%
GetAllPendingAsync()100%210%
GetAllPendingAsync()100%210%
GetByTransactionIdAsync()0%620%
GetByTransactionIdAsync()0%620%
MapDomainToEntity(...)0%620%
MapDomainToEntity(...)0%620%
MapEntityToDomain(...)0%4260%
MapEntityToDomain(...)0%4260%

File(s)

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

#LineLine coverage
 1using Microsoft.EntityFrameworkCore;
 2
 3namespace NLightning.Infrastructure.Repositories.Database.Bitcoin;
 4
 5using Domain.Bitcoin.Interfaces;
 6using Domain.Bitcoin.Transactions.Models;
 7using Domain.Bitcoin.ValueObjects;
 8using Persistence.Contexts;
 9using Persistence.Entities.Bitcoin;
 10
 11public class WatchedTransactionDbRepository(NLightningDbContext context)
 012    : BaseDbRepository<WatchedTransactionEntity>(context), IWatchedTransactionDbRepository
 13{
 14    public void Add(WatchedTransactionModel watchedTransactionModel)
 015    {
 016        var watchedTransactionEntity = MapDomainToEntity(watchedTransactionModel);
 17
 018        if (watchedTransactionEntity.CreatedAt.Equals(DateTime.MinValue))
 019            watchedTransactionEntity.CreatedAt = DateTime.UtcNow;
 20
 021        Insert(watchedTransactionEntity);
 022    }
 23
 24    public void Update(WatchedTransactionModel watchedTransactionModel)
 025    {
 026        var watchedTransactionEntity = MapDomainToEntity(watchedTransactionModel);
 027        Update(watchedTransactionEntity);
 028    }
 29
 30    public async Task<IEnumerable<WatchedTransactionModel>> GetAllPendingAsync()
 031    {
 032        var entities = await DbSet
 033                            .AsNoTracking()
 034                            .Where(x => x.CompletedAt == null)
 035                            .ToListAsync();
 36
 037        return entities.Select(entity => MapEntityToDomain(entity));
 038    }
 39
 40    public async Task<WatchedTransactionModel?> GetByTransactionIdAsync(TxId transactionId)
 041    {
 042        var entity = await GetByIdAsync(transactionId);
 043        return entity == null ? null : MapEntityToDomain(entity);
 044    }
 45
 46    private static WatchedTransactionEntity MapDomainToEntity(WatchedTransactionModel watchedTransactionModel)
 047    {
 048        return new WatchedTransactionEntity
 049        {
 050            ChannelId = watchedTransactionModel.ChannelId,
 051            TransactionId = watchedTransactionModel.TransactionId,
 052            RequiredDepth = watchedTransactionModel.RequiredDepth,
 053            FirstSeenAtHeight = watchedTransactionModel.FirstSeenAtHeight,
 054            TransactionIndex = watchedTransactionModel.TransactionIndex,
 055            CompletedAt = watchedTransactionModel.IsCompleted ? DateTime.UtcNow : null
 056        };
 057    }
 58
 59    private static WatchedTransactionModel MapEntityToDomain(WatchedTransactionEntity entity)
 060    {
 061        var model = new WatchedTransactionModel(entity.ChannelId, entity.TransactionId, entity.RequiredDepth);
 62
 063        if (entity.CompletedAt.HasValue)
 064            model.MarkAsCompleted();
 65
 066        if (entity.FirstSeenAtHeight.HasValue && entity.TransactionIndex.HasValue)
 067            model.SetHeightAndIndex(entity.FirstSeenAtHeight.Value, entity.TransactionIndex.Value);
 68
 069        return model;
 070    }
 71}