using MSAdminUsuarios.Context; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MSAdminUsuarios.Dto; using MSAdminUsuarios.Models; namespace MSAdminUsuarios.Controllers { [ApiController] [Route("[controller]")] public class PerfilesController : ControllerBase { private readonly ModelContext _context; public PerfilesController(ModelContext context) { _context = context; } [HttpGet] public async Task GetPerfiles() { try { List consulta = await _context.PERFILESMs.OrderBy(p => p.NU_PK_PFL).Where(p=>p.BL_ESTADO_PFL > 0).ToListAsync(); //var consulta = from dm in _context.PERFILESMs // where dm.BL_ESTADO_PFL>=0 // orderby dm.NU_PK_PFL ascending // select dm; return Ok(consulta); } catch (Exception ex) { return BadRequest(ex); } } [HttpPost] public async Task GuardarPerfiles(PERFIL guardado) { try { if (guardado == null) return ValidationProblem(); if (guardado.TX_UUID_PFL == null) { Guid uuid = Guid.NewGuid(); var UUID = uuid.ToString(); guardado.TX_UUID_PFL = UUID; } _context.PERFILESMs.Add(guardado); await _context.SaveChangesAsync(); return Ok(); } catch (Exception ex) { return BadRequest(ex.Message); } } [HttpPatch] public async Task EditarPerfiles(PERFIL editado) { try { if (editado == null) return ValidationProblem(); var existe = _context.PERFILESMs.Find(editado.NU_PK_PFL); if (existe == null) { return BadRequest("Perfil no encontrado"); } existe.TX_PERFIL_PFL = editado.TX_PERFIL_PFL; existe.NU_ROL_PFL = editado.NU_ROL_PFL; existe.BL_ESTADO_PFL = editado.BL_ESTADO_PFL; _context.PERFILESMs.Update(existe); await _context.SaveChangesAsync(); return Ok(); } catch (Exception ex) { return BadRequest(ex.Message); } } [HttpPost("PerfilPermisos")] public async Task PostPerfilPermisos(PerfilPermisosDTO nuevo) { ErrorModel _errorModel = new ErrorModel(); using (var transaccion = _context.Database.BeginTransaction()) { try { if (nuevo == null) { _errorModel.error = true; _errorModel.cuerpo.Add("Sin datos a guardar."); return Conflict(_errorModel); } transaccion.CreateSavepoint("InicioCreacionPerfilPermisos"); if (nuevo.perfil == null) { _errorModel.error = true; _errorModel.cuerpo.Add("Sin perfil a guardar."); return Conflict(_errorModel); } if (nuevo.perfil.TX_UUID_PFL == null) { Guid uuid = Guid.NewGuid(); var UUID = uuid.ToString(); nuevo.perfil.TX_UUID_PFL = UUID; _context.PERFILESMs.Add(nuevo.perfil); await _context.SaveChangesAsync(); } else { PERFIL? existe = _context.PERFILESMs.FirstOrDefault(prfl => prfl.TX_UUID_PFL == nuevo.perfil.TX_UUID_PFL); if (existe == null) { _errorModel.error = true; _errorModel.cuerpo.Add("El perfil no existe."); return Conflict(_errorModel); } existe.TX_PERFIL_PFL = nuevo.perfil.TX_PERFIL_PFL; existe.NU_ROL_PFL = nuevo.perfil.NU_ROL_PFL; existe.BL_ESTADO_PFL = nuevo.perfil.BL_ESTADO_PFL; _context.PERFILESMs.Update(existe); _context.SaveChanges(); } // TODO: Validacion agregada mientras se aclara el proceso PERFIL? creado = await _context.PERFILESMs.FirstOrDefaultAsync(prfl => prfl.TX_UUID_PFL == nuevo.perfil.TX_UUID_PFL); if (nuevo.permisos != null && creado != null) { // Se cambia a estado 0 todos los perfiles por usuario existentes List permisos = _context.PERMISOSMs.Where(x => x.BL_ESTADO_PMS == 1 && x.NU_FK_PFL == creado.NU_PK_PFL).ToList(); foreach (var permiso in permisos) { permiso.BL_ESTADO_PMS = 0; //_context.PERMISOSMs.Update(permiso); //await _context.SaveChangesAsync(); } _context.PERMISOSMs.UpdateRange(permisos); _context.SaveChanges(); foreach (var pxp in nuevo.permisos) { PERMISO? existe = _context.PERMISOSMs.FirstOrDefault(pm => pm.NU_FK_PFL == creado.NU_PK_PFL && pm.NU_FK_MS == pxp.NU_FK_MS); if (existe != null) { //Si existe activamos estado 1 del perfil existe.BL_ESTADO_PMS = 1; _context.Update(existe); _context.SaveChanges(); //continue; } else { if (pxp == null) { _errorModel.error = true; _errorModel.cuerpo.Add($"Permiso sin valores"); //continue; } else { pxp.BL_ESTADO_PMS = 1; pxp.NU_FK_PFL = creado.NU_PK_PFL; _context.PERMISOSMs.Add(pxp); _context.SaveChanges(); } } } List permisosEliminados = _context.PERMISOSMs.Where(pm => pm.NU_FK_PFL == creado.NU_PK_PFL && pm.BL_ESTADO_PMS == 0).ToList(); _context.PERMISOSMs.RemoveRange(permisosEliminados); _context.SaveChanges(); } transaccion.Commit(); _errorModel.error = false; _errorModel.cuerpo.Add("Perfil creado correctamente"); return Ok(_errorModel); } catch (Exception e) { transaccion.RollbackToSavepoint("InicioCreacionPerfilPermisos"); return BadRequest(e.Message); } } } } }