< Summary

Information
Class: Pomodoro.Web.Services.Repositories.TaskRepository
Assembly: Pomodoro.Web
File(s): /home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Services/Repositories/TaskRepository.cs
Line coverage
100%
Covered lines: 41
Uncovered lines: 0
Coverable lines: 41
Total lines: 72
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetAllAsync()100%44100%
GetAllIncludingDeletedAsync()100%22100%
GetByIdAsync()100%11100%
SaveAsync()100%22100%
SoftDeleteAsync()100%22100%
HardDeleteAsync()100%11100%
GetCountAsync()100%11100%
ClearAllAsync()100%11100%

File(s)

/home/runner/work/Pomodoro/Pomodoro/src/Pomodoro.Web/Services/Repositories/TaskRepository.cs

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using Pomodoro.Web.Models;
 3
 4namespace Pomodoro.Web.Services.Repositories;
 5
 6/// <summary>
 7/// Repository implementation for task persistence using IndexedDB
 8/// </summary>
 9public class TaskRepository : ITaskRepository
 10{
 11    private readonly IIndexedDbService _indexedDb;
 12    private readonly ILogger<TaskRepository> _logger;
 13
 2214    public TaskRepository(IIndexedDbService indexedDb, ILogger<TaskRepository> logger)
 2215    {
 2216        _indexedDb = indexedDb;
 2217        _logger = logger;
 2218    }
 19
 20    public async Task<List<TaskItem>> GetAllAsync()
 621    {
 622        var all = await _indexedDb.GetAllAsync<TaskItem>(Constants.Storage.TasksStore);
 1223        return all?.Where(t => !t.IsDeleted).ToList() ?? new List<TaskItem>();
 624    }
 25
 26    public async Task<List<TaskItem>> GetAllIncludingDeletedAsync()
 327    {
 328        var all = await _indexedDb.GetAllAsync<TaskItem>(Constants.Storage.TasksStore);
 329        return all ?? new List<TaskItem>();
 330    }
 31
 32    public async Task<TaskItem?> GetByIdAsync(Guid id)
 633    {
 634        return await _indexedDb.GetAsync<TaskItem>(Constants.Storage.TasksStore, id.ToString());
 635    }
 36
 37    public async Task<bool> SaveAsync(TaskItem task)
 538    {
 539        var success = await _indexedDb.PutAsync(Constants.Storage.TasksStore, task);
 540        if (!success)
 241        {
 242            _logger.LogWarning(Constants.Messages.LogFailedToSaveTask, task.Id);
 243        }
 544        return success;
 545    }
 46
 47    public async Task<bool> SoftDeleteAsync(Guid id)
 348    {
 349        var task = await GetByIdAsync(id);
 450        if (task == null) return false;
 51
 252        task.IsDeleted = true;
 253        task.DeletedAt = DateTime.UtcNow;
 254        return await SaveAsync(task);
 355    }
 56
 57    public async Task<bool> HardDeleteAsync(Guid id)
 358    {
 359        return await _indexedDb.DeleteAsync(Constants.Storage.TasksStore, id.ToString());
 360    }
 61
 62    public async Task<int> GetCountAsync()
 263    {
 264        var all = await GetAllAsync();
 265        return all.Count;
 266    }
 67
 68    public async Task ClearAllAsync()
 169    {
 170        await _indexedDb.ClearAsync(Constants.Storage.TasksStore);
 171    }
 72}