< Summary - Syki

Information
Class: Syki.Back.Features.Users.RegisterUser.RegisterUserService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Users/RegisterUser/RegisterUserService.cs
Tag: 56_26538939494
Line coverage
100%
Covered lines: 19
Uncovered lines: 0
Coverable lines: 19
Total lines: 39
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
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%
.ctor()100%11100%
.cctor()100%11100%
Register()100%44100%

File(s)

/home/runner/work/syki/syki/Back/Features/Users/RegisterUser/RegisterUserService.cs

#LineLine coverage
 1using Syki.Back.Domain.Identity;
 2using Syki.Back.Domain.Institutions;
 3
 4namespace Syki.Back.Features.Users.RegisterUser;
 5
 2846public class RegisterUserService(SykiDbContext ctx, UserManager<SykiUser> userManager) : ISykiService
 7{
 8    private class Validator : AbstractValidator<RegisterUserIn>
 9    {
 210        public Validator()
 11        {
 28612            RuleFor(x => x.Email).Must(x => x.IsValidEmail()).WithError(InvalidEmail.I);
 213        }
 14    }
 215    private static readonly Validator V = new();
 16
 17    public async Task<OneOf<RegisterUserOut, SykiError>> Register(RegisterUserIn data)
 18    {
 29619        if (V.Run(data, out var error)) return error;
 20
 27221        var email = data.Email.ToLowerInvariant();
 27222        var emailUsed = await ctx.Users.AnyAsync(u => u.Email == email);
 27623        if (emailUsed) return EmailAlreadyUsed.I;
 24
 26825        var institution = Institution.NewForUserRegister();
 26826        var user = new SykiUser(institution, email);
 26827        var magicLink = new MagicLink(user);
 28
 26829        var directorRole = await ctx.GetDirectorRole();
 26830        var userRole = new SykiUserRole(institution, user, directorRole.Id);
 31
 26832        ctx.AddRange(institution, magicLink, userRole);
 26833        ctx.AddCommand(institution, new SendFirstAccessMagicLinkEmailCommand(email, magicLink.Id), maxRetries: 1);
 34
 26835        await userManager.CreateAsync(user, $"Syki@{Guid.NewGuid()}");
 36
 26837        return new RegisterUserOut { Id = user.Id, InstitutionId = institution.Id };
 28438    }
 39}