Modified user entity for identity

This commit is contained in:
Veljko Tosic
2026-02-12 19:50:26 +01:00
parent c7e7735075
commit 072d4e3f46
2 changed files with 53 additions and 16 deletions

View File

@@ -1,21 +1,11 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Identity;
namespace AipsCore.Infrastructure.Persistence.User;
public class User
public class User : IdentityUser<Guid>
{
[Key]
public Guid Id { get; set; }
[Required]
[MaxLength(255)]
public string Username { get; set; } = null!;
[Required]
[MaxLength(255)]
public string Email { get; set; } = null!;
public DateTime CreatedAt { get; set; }
public DateTime? DeletedAt { get; set; }

View File

@@ -1,15 +1,21 @@
using AipsCore.Domain.Common.Validation;
using AipsCore.Domain.Models.User.External;
using AipsCore.Domain.Models.User.Validation;
using AipsCore.Domain.Models.User.ValueObjects;
using AipsCore.Infrastructure.Persistence.Abstract;
using AipsCore.Infrastructure.Persistence.Db;
using Microsoft.AspNetCore.Identity;
namespace AipsCore.Infrastructure.Persistence.User;
public class UserRepository : AbstractRepository<Domain.Models.User.User, UserId, User>, IUserRepository
{
public UserRepository(AipsDbContext context)
private readonly UserManager<User> _userManager;
public UserRepository(AipsDbContext context, UserManager<User> userManager)
: base(context)
{
_userManager = userManager;
}
protected override Domain.Models.User.User MapToModel(User entity)
@@ -17,7 +23,7 @@ public class UserRepository : AbstractRepository<Domain.Models.User.User, UserId
return Domain.Models.User.User.Create(
entity.Id.ToString(),
entity.Email,
entity.Username,
entity.UserName,
entity.CreatedAt,
entity.DeletedAt
);
@@ -29,7 +35,9 @@ public class UserRepository : AbstractRepository<Domain.Models.User.User, UserId
{
Id = new Guid(model.Id.IdValue),
Email = model.Email.EmailValue,
Username = model.Username.UsernameValue,
NormalizedEmail = model.Email.EmailValue.ToUpperInvariant(),
UserName = model.Username.UsernameValue,
NormalizedUserName = model.Username.UsernameValue.ToUpperInvariant(),
CreatedAt = model.CreatedAt.CreatedAtValue,
DeletedAt = model.DeletedAt.DeletedAtValue
};
@@ -38,8 +46,47 @@ public class UserRepository : AbstractRepository<Domain.Models.User.User, UserId
protected override void UpdateEntity(User entity, Domain.Models.User.User model)
{
entity.Email = model.Email.EmailValue;
entity.Username = model.Username.UsernameValue;
entity.NormalizedEmail = model.Email.EmailValue.ToUpperInvariant();
entity.UserName = model.Username.UsernameValue;
entity.NormalizedUserName = model.Username.UsernameValue.ToUpperInvariant();
entity.CreatedAt = model.CreatedAt.CreatedAtValue;
entity.DeletedAt = model.DeletedAt.DeletedAtValue;
}
public async Task SignUpWithPasswordAsync(Domain.Models.User.User user, string password, CancellationToken cancellationToken = default)
{
var entity = MapToEntity(user);
var result = await _userManager.CreateAsync(entity, password);
if (!result.Succeeded)
{
var errors = string.Join(", ", result.Errors.Select(e => e.Description));
throw new Exception($"User registration failed: {errors}");
}
//Realno nebitno, ali postoji infrastruktura ako treba da se koristi kasnije
//await _userManager.AddToRoleAsync(entity, "User");
}
public async Task<LoginResult> LoginWithEmailAndPasswordAsync(string email, string password, CancellationToken cancellationToken = default)
{
var entity = await _userManager.FindByEmailAsync(email);
if (entity is null)
{
throw new ValidationException(UserErrors.LoginErrorUserNotFoundByEmail(email));
}
var isPasswordValid = await _userManager.CheckPasswordAsync(entity, password);
if (!isPasswordValid)
{
throw new ValidationException(UserErrors.LoginErrorIncorrectPassword());
}
var roles = await _userManager.GetRolesAsync(entity);
return new LoginResult(MapToModel(entity), roles);
}
}