Fix db seeding, migration, repository services

This commit is contained in:
danial23 2025-05-19 22:22:33 -04:00
parent 872dc1e263
commit 6b87902ca7
Signed by: danial23
SSH key fingerprint: SHA256:IJ8VP0j2WMUVweTYnzUUnEjNgPnGx+mAt+RhqWZ01bU
22 changed files with 606 additions and 64 deletions

View file

@ -5,10 +5,10 @@ using CSR.Domain.Entities;
public interface IUserRepository
{
Task<User?> GetByIdAsync(int id);
Task<User?> GetByUsernameAsync(string username);
// Task<User?> GetByEmailAsync(string email);
// Task<User?> GetByUsernameAsync(string username);
// Task<IEnumerable<User>> GetAllAsync();
Task AddAsync(User user);
Task<IEnumerable<User>?> GetAllByRoleIdAsync(int roleId);
Task<User?> AddAsync(User user);
Task UpdateAsync(User user);
Task DeleteAsync(int id);
}

View file

@ -2,7 +2,12 @@ namespace CSR.Application.Interfaces;
public interface IUserService
{
public record CreateUserResult(Domain.Entities.User? User, string? ErrorMessage);
record RegisterNewUserResult(Domain.Entities.User? User, IEnumerable<string>? Errors);
public void CreateUser(string username, string email, string password, bool isAdmin = false);
Task<RegisterNewUserResult> RegisterNewUser
(
string username,
string email,
string password
);
}

View file

@ -3,12 +3,51 @@ namespace CSR.Application.Services;
using CSR.Application.Interfaces;
using CSR.Domain.Entities;
public class UserService(IUserRepository userRepository) : IUserService
public class UserService(IUserRepository userRepository, Domain.Interfaces.IPasswordHasher passwordHasher) : IUserService
{
private readonly IUserRepository _userRepository = userRepository;
private readonly Domain.Interfaces.IPasswordHasher _passwordHasher = passwordHasher;
public void CreateNewUser(string username, string email, string password, bool isAdmin = false)
public async Task<IUserService.RegisterNewUserResult> RegisterNewUser
(
string username,
string email,
string password
)
{
var errors = new List<string>();
var (IsValid, Errors) = User.IsValidUsername(username);
if (!IsValid)
{
errors.AddRange(Errors!);
}
if (!User.IsValidEmail(email))
{
errors.Add("Invalid email address.");
}
(IsValid, Errors) = User.IsValidPassword(password);
if (!IsValid)
{
errors.AddRange(Errors!);
}
var existingUser = await _userRepository.GetByUsernameAsync(username);
if (existingUser != null)
{
errors.Add("Username already exists.");
}
if (errors.Count > 0)
{
return new IUserService.RegisterNewUserResult(null, errors);
}
// create the new user
var user = User.CreateNew(username, email, password, _passwordHasher);
user = await _userRepository.AddAsync(user);
return new IUserService.RegisterNewUserResult(user, null);
}
}