< Summary - Syki

Information
Class: Syki.Back.Features.Teachers.UpdateTeacher.UpdateTeacherService
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Features/Teachers/UpdateTeacher/UpdateTeacherService.cs
Tag: 97_27801654829
Line coverage
0%
Covered lines: 0
Uncovered lines: 23
Coverable lines: 23
Total lines: 39
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
.ctor()100%210%
.cctor()100%210%
Update()0%4260%

File(s)

/home/runner/work/syki/syki/Back/Features/Teachers/UpdateTeacher/UpdateTeacherService.cs

#LineLine coverage
 1namespace Syki.Back.Features.Teachers.UpdateTeacher;
 2
 03public class UpdateTeacherService(SykiDbContext ctx) : ISykiService
 4{
 5    private class Validator : AbstractValidator<UpdateTeacherIn>
 6    {
 07        public Validator()
 8        {
 09            RuleFor(x => x.Name).NotEmpty().WithError(InvalidTeacherName.I);
 010            RuleFor(x => x.Name).MaximumLength(100).WithError(InvalidTeacherName.I);
 011            RuleFor(x => x.Email).Must(x => x.IsValidEmail()).WithError(InvalidEmail.I);
 012        }
 13    }
 014    private static readonly Validator V = new();
 15
 16    public async Task<OneOf<SykiSuccess, SykiError>> Update(int id, UpdateTeacherIn data)
 17    {
 018        if (V.Run(data, out var error)) return error;
 19
 020        var teacher = await ctx.Teachers.Include(t => t.User)
 021            .FirstOrDefaultAsync(t => t.InstitutionId == ctx.RequestUser.InstitutionId && t.Id == id);
 022        if (teacher == null) return TeacherNotFound.I;
 23
 024        var email = data.Email.ToLowerInvariant();
 025        var emailUsed = await ctx.Users.AnyAsync(u => u.Email == email && u.Id != teacher.UserId);
 026        if (emailUsed) return EmailAlreadyUsed.I;
 27
 028        teacher.Name = data.Name;
 029        teacher.User!.Name = data.Name;
 030        teacher.User.Email = email;
 031        teacher.User.NormalizedEmail = email.ToUpperInvariant();
 032        teacher.User.UserName = email;
 033        teacher.User.NormalizedUserName = email.ToUpperInvariant();
 34
 035        await ctx.SaveChangesAsync();
 36
 037        return SykiSuccess.I;
 038    }
 39}