diff --git a/phronCare.API/Controllers/AccountController.cs b/phronCare.API/Controllers/AccountController.cs index 5de2aba..853d6b7 100644 --- a/phronCare.API/Controllers/AccountController.cs +++ b/phronCare.API/Controllers/AccountController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Authorization; using phronCare.API.Models.Account; +using phronCare.API.Models.Security; // Importá donde tengas ApplicationUser namespace phronCare.API.Controllers { @@ -11,69 +12,41 @@ namespace phronCare.API.Controllers public class AccountController : ControllerBase { private readonly RoleManager _roleManager; - private readonly UserManager _userManager; + private readonly UserManager _userManager; - public AccountController(RoleManager roleManager, UserManager userManager) + public AccountController(RoleManager roleManager, UserManager userManager) { _roleManager = roleManager; _userManager = userManager; } - // Endpoint para obtener todos los roles [HttpGet("GetAllRoles")] public IActionResult GetAllRoles() { var roles = _roleManager.Roles.ToList(); return Ok(roles); } + [HttpGet("GetRoleById/{id}")] public IActionResult GetRoleById(string id) { - var role = _roleManager.Roles - .Where(_ => _.Id == id.TrimStart('{').TrimEnd('}')) - .FirstOrDefault(); + var role = _roleManager.Roles.FirstOrDefault(r => r.Id == id.TrimStart('{').TrimEnd('}')); return Ok(role); } - [HttpPut("UpdateRole/{id}")] - public async Task UpdateRole(string id, Role model) - { - var role = await _roleManager.FindByIdAsync(id); - if (role == null) - { - return NotFound("Rol no encontrado"); - } - // Actualizar propiedades del rol - role.Name = model.Name; - role.NormalizedName = model.NormalizedName; - - // Actualizar el rol en la base de datos - var result = await _roleManager.UpdateAsync(role); - - if (result.Succeeded) - { - return Ok("Rol actualizado exitosamente"); - } - else - { - return BadRequest("Error al actualizar el rol"); - } - } [HttpPost("CreateRole")] public async Task CreateRole(Role model) { - // Verifica si el rol ya existe var existingRole = await _roleManager.FindByNameAsync(model.Name); if (existingRole != null) { return BadRequest("El rol ya existe."); } - // Crea un nuevo rol var newRole = new IdentityRole { Name = model.Name, - NormalizedName = model.Name.ToUpper(), // Normaliza el nombre, generalmente a mayúsculas + NormalizedName = model.Name.ToUpper(), ConcurrencyStamp = Guid.NewGuid().ToString() }; @@ -85,30 +58,51 @@ namespace phronCare.API.Controllers } else { - // Manejar errores en la creación del rol var errors = result.Errors.Select(e => e.Description); - return BadRequest("Error al crear el rol: " + string.Join(", ", errors)); + return BadRequest($"Error al crear el rol: {string.Join(", ", errors)}"); } } - // Endpoint para eliminar un rol - [HttpDelete("DeleteRole/{roleId}")] - public IActionResult DeleteRole(string roleId) + + [HttpPut("UpdateRole/{id}")] + public async Task UpdateRole(string id, Role model) { - // Verifica si el rol existe - var existingRole = _roleManager.FindByIdAsync(roleId).Result; + var role = await _roleManager.FindByIdAsync(id); + if (role == null) + { + return NotFound("Rol no encontrado"); + } + + role.Name = model.Name; + role.NormalizedName = model.NormalizedName; + + var result = await _roleManager.UpdateAsync(role); + + if (result.Succeeded) + { + return Ok("Rol actualizado exitosamente"); + } + else + { + return BadRequest("Error al actualizar el rol"); + } + } + + [HttpDelete("DeleteRole/{roleId}")] + public async Task DeleteRole(string roleId) + { + var existingRole = await _roleManager.FindByIdAsync(roleId); if (existingRole == null) { return NotFound("El rol no se encontró."); } - // Evita la eliminación del rol "Admin" if (existingRole.Name.ToLower() == "admin") { return BadRequest("No se puede eliminar el rol 'Admin'."); } - // Realiza la eliminación del rol en la base de datos - var result = _roleManager.DeleteAsync(existingRole).Result; + var result = await _roleManager.DeleteAsync(existingRole); + if (result.Succeeded) { return Ok("El rol se eliminó exitosamente."); @@ -118,43 +112,42 @@ namespace phronCare.API.Controllers return BadRequest("Error al eliminar el rol."); } } - // Endpoint para obtener todos los usuarios + [HttpGet("GetAllUsers")] public IActionResult GetAllUsers() { var users = _userManager.Users.ToList(); return Ok(users); } + [HttpGet("GetUserById/{id}")] public IActionResult GetUserById(string id) { - var user = _userManager.Users - .Where(_ => _.Id == id.TrimStart('{').TrimEnd('}')) - .FirstOrDefault(); + var user = _userManager.Users.FirstOrDefault(u => u.Id == id.TrimStart('{').TrimEnd('}')); return Ok(user); } + [HttpPut("UpdateUser/{id}")] - public async Task UpdateUser(string id, UserUpdate? model) + public async Task UpdateUser(string id, UserUpdate model) { var user = await _userManager.FindByIdAsync(id); if (user == null) { return NotFound("Usuario no encontrado"); } - // Actualizar propiedades del rol + user.UserName = model.UserName; - user.NormalizedUserName = model.UserName.ToLower(); + user.NormalizedUserName = model.UserName.ToUpper(); user.Email = model.Email; - user.NormalizedEmail = model.Email.ToLower(); + user.NormalizedEmail = model.Email.ToUpper(); user.TwoFactorEnabled = model.TwoFactorEnabled; user.LockoutEnabled = model.LockoutEnabled; - // Actualizar el usuario en la base de datos var result = await _userManager.UpdateAsync(user); if (result.Succeeded) { - return Ok("usuario actualizado exitosamente"); + return Ok("Usuario actualizado exitosamente"); } else { @@ -162,25 +155,22 @@ namespace phronCare.API.Controllers } } - // Endpoint para eliminar un usuario [HttpDelete("DeleteUser/{userId}")] - public IActionResult DeleteUser(string UserId) + public async Task DeleteUser(string userId) { - // Verifica si el usuario existe - var existingUser = _userManager.FindByIdAsync(UserId).Result; + var existingUser = await _userManager.FindByIdAsync(userId); if (existingUser == null) { return NotFound("El usuario no se encontró."); } - // Evita la eliminación del usuario "SuperAdmin" - if (existingUser.UserName.ToLower() == "superdmin") + if (existingUser.UserName.ToLower() == "superadmin") { return BadRequest("No se puede eliminar el usuario 'SuperAdmin'."); } - // Realiza la eliminación del rol en la base de datos - var result = _userManager.DeleteAsync(existingUser).Result; + var result = await _userManager.DeleteAsync(existingUser); + if (result.Succeeded) { return Ok("El usuario se eliminó exitosamente."); @@ -191,4 +181,4 @@ namespace phronCare.API.Controllers } } } -} \ No newline at end of file +} diff --git a/phronCare.API/Program.cs b/phronCare.API/Program.cs index acf3924..347b483 100644 --- a/phronCare.API/Program.cs +++ b/phronCare.API/Program.cs @@ -156,15 +156,16 @@ builder.Services.AddCors(options => /* Version para despliegue */ - policy - .WithOrigins("http://dev.biodec.saludlab.com.ar", "http://phroncareUI:80", "http://192.168.10.110:9002") - .AllowAnyMethod() - .AllowAnyHeader() - .AllowCredentials(); + // policy + // .WithOrigins("http://dev.biodec.saludlab.com.ar", "http://phroncareUI:80", "http://192.168.10.110:9002") + // .AllowAnyMethod() + // .AllowAnyHeader() + // .AllowCredentials(); + /* Version para desarrollo */ - //policy.WithOrigins("*").AllowAnyHeader().AllowAnyMethod(); + policy.WithOrigins("*").AllowAnyHeader().AllowAnyMethod(); }); }); #endregion diff --git a/phronCare.API/obj/Debug/net8.0/ApiEndpoints.json b/phronCare.API/obj/Debug/net8.0/ApiEndpoints.json index 039d71d..91ba882 100644 --- a/phronCare.API/obj/Debug/net8.0/ApiEndpoints.json +++ b/phronCare.API/obj/Debug/net8.0/ApiEndpoints.json @@ -40,7 +40,7 @@ "Order": 0, "Parameters": [ { - "Name": "UserId", + "Name": "userId", "Type": "System.String", "IsRequired": true } @@ -136,7 +136,7 @@ { "Name": "model", "Type": "phronCare.API.Models.Account.UserUpdate", - "IsRequired": false + "IsRequired": true } ], "ReturnTypes": []