< Summary

Information
Class: Enjoy.Domain.Users.Entities.User
Assembly: Enjoy.Domain
File(s): D:\Dotnet\Propuesta-trabajo\Enjoy Project\EnjoyApp\Enjoy\src\Enjoy.Domain\Users\Entities\User.cs
Line coverage
100%
Covered lines: 80
Uncovered lines: 0
Coverable lines: 80
Total lines: 120
Line coverage: 100%
Branch coverage
100%
Covered branches: 26
Total branches: 26
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
NewId()100%11100%
get_Name()100%11100%
get_Email()100%11100%
get_PasswordHash()100%11100%
get_Role()100%11100%
get_CreatedOnUtc()100%11100%
get_ModifiedOnUtc()100%11100%
.ctor()100%11100%
.ctor(...)100%11100%
Create(...)100%1010100%
ChangeName(...)100%44100%
ChangeEmail(...)100%44100%
SetPasswordHash(...)100%44100%
ChangeRole(...)100%44100%

File(s)

D:\Dotnet\Propuesta-trabajo\Enjoy Project\EnjoyApp\Enjoy\src\Enjoy.Domain\Users\Entities\User.cs

#LineLine coverage
 1using Enjoy.Domain.Shared.Errors;
 2using Enjoy.Domain.Shared.Extensions;
 3using Enjoy.Domain.Shared.Messaging;
 4using Enjoy.Domain.Shared.Primitives;
 5using Enjoy.Domain.Shared.Results;
 6using Enjoy.Domain.Users.Events;
 7using Enjoy.Domain.Users.ValueObjects;
 8
 9namespace Enjoy.Domain.Users.Entities;
 10
 11public sealed class User : AggregateRoot, IAuditableEntity
 12{
 5013    public static string NewId() => $"usr_{Guid.CreateVersion7()}";
 14
 5815    public Name Name { get; private set; }
 5816    public Email Email { get; private set; }
 5517    public PasswordHash PasswordHash { get; private set; }
 5818    public Role Role { get; private set; }
 19
 320    public DateTime CreatedOnUtc { get; set; }
 321    public DateTime? ModifiedOnUtc { get; set; }
 22
 23    /// <summary>
 24    /// Parameterless constructor required by Entity Framework Core.
 25    /// </summary>
 326    private User() : base() { }
 27
 4728    private User(string id, Name name, Email email, PasswordHash passwordHash, Role role) : base(id)
 4729    {
 4730        Name = name;
 4731        Email = email;
 4732        PasswordHash = passwordHash;
 4733        Role = role;
 4734    }
 35
 36    public static Result<User> Create(string name, string email, string passwordHash, string role)
 5337    {
 5338        List<Error> errors = [];
 39
 5340        var nameResult = Name.Create(name);
 5341        if (nameResult.IsFailure)
 342            errors.AddRange(nameResult.Errors);
 43
 5344        var emailResult = Email.Create(email);
 5345        if (emailResult.IsFailure)
 246            errors.AddRange(emailResult.Errors);
 47
 5348        var passwordHashResult = PasswordHash.Create(passwordHash);
 5349        if (passwordHashResult.IsFailure)
 250            errors.AddRange(passwordHashResult.Errors);
 51
 5352        var roleResult = Role.Create(role);
 5353        if (roleResult.IsFailure)
 254            errors.AddRange(roleResult.Errors);
 55
 5356        if (!errors.IsEmpty())
 657            return Result<User>.Failure(errors);
 58
 4759        User user = new(
 4760            NewId(),
 4761            nameResult.Value,
 4762            emailResult.Value,
 4763            passwordHashResult.Value,
 4764            roleResult.Value);
 4765        user.RaiseDomainEvent(new UserRegisteredDomainEvent(DomainEvent.NewId(), user.Id));
 4766        return Result<User>.Success(user);
 5367    }
 68
 69    public Result ChangeName(string name)
 670    {
 671        var nameResult = Name.Create(name);
 672        if (nameResult.IsFailure)
 273            return Result.Failure(nameResult.Errors);
 474        if (Name == nameResult.Value)
 175            return Result.Success();
 76
 377        Name = nameResult.Value;
 378        RaiseDomainEvent(new UserNameChangedDomainEvent(DomainEvent.NewId(), Id));
 379        return Result.Success();
 680    }
 81
 82    public Result ChangeEmail(string email)
 683    {
 684        var emailResult = Email.Create(email);
 685        if (emailResult.IsFailure)
 286            return Result.Failure(emailResult.Errors);
 487        if (Email == emailResult.Value)
 188            return Result.Success();
 89
 390        Email = emailResult.Value;
 391        RaiseDomainEvent(new UserEmailChangedDomainEvent(DomainEvent.NewId(), Id));
 392        return Result.Success();
 693    }
 94
 95    public Result SetPasswordHash(string passwordHash)
 596    {
 597        var result = PasswordHash.Create(passwordHash);
 598        if (result.IsFailure)
 299            return Result.Failure(result.Errors);
 3100        if (PasswordHash.Value == result.Value.Value)
 1101            return Result.Success();
 102
 2103        PasswordHash = result.Value;
 2104        RaiseDomainEvent(new UserPasswordChangedDomainEvent(DomainEvent.NewId(), Id));
 2105        return Result.Success();
 5106    }
 107
 108    public Result ChangeRole(string role)
 5109    {
 5110        var roleResult = Role.Create(role);
 5111        if (roleResult.IsFailure)
 2112            return Result.Failure(roleResult.Errors);
 3113        if (Role == roleResult.Value)
 1114            return Result.Success();
 115
 2116        Role = roleResult.Value;
 2117        RaiseDomainEvent(new UserRoleChangedDomainEvent(DomainEvent.NewId(), Id, Role.Value));
 2118        return Result.Success();
 5119    }
 120}