I am using Mapster for mapping my objects.
I have the the following code:
public sealed class User : AggregateRoot<UserId>
{
public string FirstName { get; }
public string LastName { get; }
public string Email { get; }
public string Password { get; }
public DateTime CreatedDateTime { get; }
public DateTime UpdatedDateTime { get; }
private User(UserId userId, string firstName, string lastName, string email, string password)
: base(userId)
{
FirstName = firstName;
LastName = lastName;
Email = email;
Password = password;
CreatedDateTime = DateTime.UtcNow;
}
}
public sealed class UserId : ValueObject
{
public Guid Value { get; }
private UserId(Guid value)
{
Value = value;
}
}
public record AuthenticationResult(
User User,
string Token
);
public record AuthenticationResponse(
Guid Id,
string FirstName,
string LastName,
string Email,
string Token
);
public abstract class AggregateRoot<TId> : Entity<TId>
where TId : notnull
{
protected AggregateRoot(TId id) : base(id)
{
}
}
public abstract class Entity<TId> : IEquatable<Entity<TId>>
where TId : notnull
{
public TId Id { get; protected set; }
protected Entity(TId id)
{
Id = id;
}
public override bool Equals(object? obj)
{
return obj is Entity<TId> entity && Id.Equals(entity.Id);
}
public static bool operator ==(Entity<TId> left, Entity<TId> right)
{
return Equals(left, right);
}
public static bool operator !=(Entity<TId> left, Entity<TId> right)
{
return !Equals(left, right);
}
public bool Equals(Entity<TId>? other)
{
return Equals((object?)other);
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
public async Task<IActionResult> Register(RegisterRequest request)
{
var command = _mapper.Map<RegisterCommand>(request);
ErrorOr<AuthenticationResult> authResult = await _mediator.Send(command);
return authResult.Match(
authResult => Ok(_mapper.Map<AuthenticationResponse>(authResult)),
errors => Problem(errors)
);
}
config.NewConfig<AuthenticationResult, AuthenticationResponse>()
.Map(dest => dest, src => src.User);
I am trying to map the AuthenticationResult to the AuthenticationResponse but i get this error
---> Mapster.CompileException: Error while compiling source=FinanceManager.Domain.User.ValueObjects.UserId destination=System.Guid type=Map ---> System.InvalidOperationException: Cannot convert immutable type, please consider using 'MapWith' method to create mapping
can anyone help me pls?