< Summary

Information
Class: Anichron.Core.Data.Repository.EfRefreshTokenRepository
Assembly: Anichron.Core
File(s): /home/runner/work/anichron/anichron/src/Anichron.Core/Data/Repository/RefreshTokenRepository.cs
Tag: 228_36821334185
Line coverage
50%
Covered lines: 4
Uncovered lines: 4
Coverable lines: 8
Total lines: 33
Line coverage: 50%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
FindByHashWithUserAsync(...)100%11100%
FindByHashAsync(...)100%11100%
Add(...)100%11100%
RevokeAllActiveByUserIdAsync(...)100%210%
DeleteExpiredAsync(...)100%210%

File(s)

/home/runner/work/anichron/anichron/src/Anichron.Core/Data/Repository/RefreshTokenRepository.cs

#LineLine coverage
 1using Anichron.Core.Domain;
 2using Microsoft.EntityFrameworkCore;
 3
 4namespace Anichron.Core.Data.Repository;
 5
 6public interface IRefreshTokenRepository
 7{
 8    Task<RefreshToken?> FindByHashWithUserAsync(string tokenHash, CancellationToken ct);
 9    Task<RefreshToken?> FindByHashAsync(string tokenHash, CancellationToken ct);
 10    void Add(RefreshToken token);
 11    Task RevokeAllActiveByUserIdAsync(Guid userId, Instant revokedAt, CancellationToken ct);
 12    Task<int> DeleteExpiredAsync(Instant before, CancellationToken ct);
 13}
 14
 515public sealed class EfRefreshTokenRepository(AnichronDbContext db) : IRefreshTokenRepository
 16{
 17    public Task<RefreshToken?> FindByHashWithUserAsync(string tokenHash, CancellationToken ct)
 218        => db.RefreshTokens.Include(r => r.User).FirstOrDefaultAsync(r => r.TokenHash == tokenHash, ct);
 19
 20    public Task<RefreshToken?> FindByHashAsync(string tokenHash, CancellationToken ct)
 321        => db.RefreshTokens.FirstOrDefaultAsync(r => r.TokenHash == tokenHash, ct);
 22
 23    public void Add(RefreshToken token)
 124        => db.RefreshTokens.Add(token);
 25
 26    public Task RevokeAllActiveByUserIdAsync(Guid userId, Instant revokedAt, CancellationToken ct)
 027        => db.RefreshTokens
 028            .Where(t => t.UserId == userId && t.RevokedAt == null)
 029            .ExecuteUpdateAsync(s => s.SetProperty(t => t.RevokedAt, revokedAt), ct);
 30
 31    public Task<int> DeleteExpiredAsync(Instant before, CancellationToken ct)
 032        => db.RefreshTokens.Where(t => t.ExpiresAt < before).ExecuteDeleteAsync(ct);
 33}