feat: Add RegisterAsync endpoint to AuthController (Refs #2)

This commit is contained in:
2026-04-01 13:15:22 -03:00
parent ab98056075
commit bf2cfbd9fc
3 changed files with 52 additions and 0 deletions

View File

@@ -48,6 +48,40 @@ public class AuthController : ControllerBase
});
}
[HttpPost("register")]
public async Task<IActionResult> Register([FromBody] RegisterDto dto)
{
var user = new PruebaGentle.Core.Entities.User
{
Username = dto.Username,
PasswordHash = _passwordHasher.Hash(dto.Password),
Email = dto.Email,
NombreCompleto = dto.NombreCompleto
};
try
{
var created = await _userRepository.RegisterAsync(user);
var expiresAt = DateTime.UtcNow.AddHours(_jwtSettings.ExpirationHours);
var token = GenerateJwtToken(created.Id, created.Username, created.Email, expiresAt);
return Created(string.Empty, new RegisterResponseDto
{
Token = token,
ExpiresAt = expiresAt,
UserId = created.Id
});
}
catch (Microsoft.Data.SqlClient.SqlException ex) when (ex.Number == 50001)
{
return Conflict(new { error = "El nombre de usuario ya existe." });
}
catch (Microsoft.Data.SqlClient.SqlException ex) when (ex.Number == 50002)
{
return Conflict(new { error = "El email ya existe." });
}
}
private string GenerateJwtToken(int userId, string username, string email, DateTime expiresAt)
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Secret));

View File

@@ -10,4 +10,5 @@ public interface IUserRepository
Task<User?> UpdateAsync(User user);
Task<bool> DeleteAsync(int id);
Task<User?> GetByUsernameAsync(string username);
Task<User> RegisterAsync(User user);
}

View File

@@ -86,4 +86,21 @@ public class UserRepository : IUserRepository
new { Username = username },
commandType: CommandType.StoredProcedure);
}
public async Task<User> RegisterAsync(User user)
{
using var connection = CreateConnection();
var result = await connection.QuerySingleAsync<User>(
"sp_User_Register",
new
{
user.Username,
user.PasswordHash,
user.Email,
user.NombreCompleto
},
commandType: CommandType.StoredProcedure);
return result;
}
}