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));