< Summary - Syki

Information
Class: Syki.Back.Features.Identity.MagicLinkLogin.MagicLinkLoginService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Identity/MagicLinkLogin/MagicLinkLoginService.cs
Tag: 56_26538939494
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 Syki.Back.Features.Cross.SignIn;
 2
 3namespace Syki.Back.Features.Identity.MagicLinkLogin;
 4
 2425public class MagicLinkLoginService(SykiDbContext ctx, SignInService signInService) : ISykiService
 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, SykiError>> Login(MagicLinkLoginIn data)
 17    {
 24418        if (V.Run(data, out var error)) return error;
 19
 24020        if (!Guid.TryParse(data.Token, out var tokenId)) return InvalidMagicLink.I;
 21
 24022        var magicLink = await ctx.WebMagicLinks.FirstOrDefaultAsync(t => t.Id == tokenId);
 24223        if (magicLink == null) return InvalidMagicLink.I;
 24
 24025        if (magicLink.IsUsed()) return InvalidMagicLink.I;
 26
 23827        if (magicLink.IsExpired()) return InvalidMagicLink.I;
 28
 23429        magicLink.Use();
 30
 23431        var user = await ctx.Users.FirstAsync(x => x.Id == magicLink.UserId);
 23432        user.ConfirmEmail();
 33
 23434        var result = await signInService.SignIn(user.Email);
 35
 23436        await ctx.SaveChangesAsync();
 37
 23438        return result.ToMagicLinkLoginOut();
 24239    }
 40}