< Summary - Estud

Information
Class: Estud.Back.Features.Identity.MagicLinkLogin.MagicLinkLoginService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/MagicLinkLogin/MagicLinkLoginService.cs
Tag: 114_29044117136
Line coverage
100%
Covered lines: 18
Uncovered lines: 0
Coverable lines: 18
Total lines: 40
Line coverage: 100%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()100%11100%
.cctor()100%11100%
Login()90%1010100%

File(s)

/home/runner/work/syki/syki/Back/Features/Identity/MagicLinkLogin/MagicLinkLoginService.cs

#LineLine coverage
 1using Estud.Back.Features.Cross.SignIn;
 2
 3namespace Estud.Back.Features.Identity.MagicLinkLogin;
 4
 8445public class MagicLinkLoginService(EstudDbContext ctx, SignInService signInService) : IEstudService
 6{
 7    private class Validator : AbstractValidator<MagicLinkLoginIn>
 8    {
 29        public Validator()
 10        {
 211            RuleFor(x => x.Token).NotEmpty().WithError(InvalidMagicLink.I);
 212        }
 13    }
 214    private static readonly Validator V = new();
 15
 16    public async Task<OneOf<MagicLinkLoginOut, EstudError>> Login(MagicLinkLoginIn data)
 17    {
 84618        if (V.Run(data, out var error)) return error;
 19
 84220        if (!Guid.TryParse(data.Token, out var tokenId)) return InvalidMagicLink.I;
 21
 84222        var magicLink = await ctx.WebMagicLinks.FirstOrDefaultAsync(t => t.Id == tokenId);
 84423        if (magicLink == null) return InvalidMagicLink.I;
 24
 84225        if (magicLink.IsUsed()) return InvalidMagicLink.I;
 26
 84027        if (magicLink.IsExpired()) return InvalidMagicLink.I;
 28
 83629        magicLink.Use();
 30
 83631        var user = await ctx.Users.FirstAsync(x => x.Id == magicLink.UserId);
 83632        user.ConfirmEmail();
 33
 83634        var result = await signInService.SignIn(user.Email);
 35
 83636        await ctx.SaveChangesAsync();
 37
 83638        return result.ToMagicLinkLoginOut();
 84439    }
 40}