using MSAdminUsuarios.Context; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Transactions; using Microsoft.EntityFrameworkCore; namespace MSAdminUsuarios.Controllers { [ApiController] [Route("[controller]")] public class PermisosController : ControllerBase { private readonly ModelContext _context; public PermisosController(ModelContext context) { _context = context; } [HttpGet] public async Task GetPermisos() { try { List consulta = await _context.PERMISOSMs.ToListAsync(); //var consulta = from dm in _context.PERMISOSMs // select dm; return Ok(consulta); } catch (Exception ex) { return BadRequest(ex); } } [HttpPost] public async Task GuardarPermisos(PERMISO[] guardar) { using (var dbContextTransaction = _context.Database.BeginTransaction()) { List error = new List(); //Inicializamos variable para guardar errores var count = 0; try { // Se cambia a estado 0 todos los perfiles por usuario existentes var existe_pms_c = _context.PERMISOSMs.Where(x => x.BL_ESTADO_PMS == 1 && x.NU_FK_PFL == guardar[0].NU_FK_PFL).ToList(); foreach (var cu in existe_pms_c) { cu.BL_ESTADO_PMS = 0; _context.PERMISOSMs.Update(cu); await _context.SaveChangesAsync(); } foreach (var pms in guardar) { count++; //Se comprueba existencia de cada permiso en base de datos /*var existe_pms = (from dm in _context.PERMISOSMs where dm.NU_FK_PFL == pms.NU_FK_PFL && dm.NU_FK_MS == pms.NU_FK_MS select dm).ToList();*/ PERMISO? existe = _context.PERMISOSMs.FirstOrDefault(prm => prm.NU_FK_PFL == pms.NU_FK_PFL && prm.NU_FK_MS == pms.NU_FK_MS); //if (existe_pms.Count() > 0) if (existe != null) { //Si existe activamos estado 1 del perfil existe.BL_ESTADO_PMS = 1; //_context.Update(existe_pms[0]); _context.Update(existe); await _context.SaveChangesAsync(); continue; } else { if (pms == null) { error.Add($"Perfil por usuario #{count} sin valores"); continue; } //Se valida si el permiso a guardar tiene asignado microservicio padre o hijo /*var validar_ms_hijo = (from dm in _context.MICROSERVICIOs where dm.NU_PK_MS == pms.NU_FK_MS && dm.NU_PADRE_MS != null select dm).ToList();*/ MICROSERVICIO? validar_ms_hijo = _context.MICROSERVICIOs.FirstOrDefault(m => m.NU_PK_MS == pms.NU_FK_MS && m.NU_PADRE_MS != null); //if (validar_ms_hijo.Count() > 0) if (validar_ms_hijo != null) { /*var existe_permiso_padre = (from dm in _context.PERMISOSMs where dm.NU_FK_MS == validar_ms_hijo[0].NU_PADRE_MS && dm.NU_FK_PFL == pms.NU_FK_PFL select dm).ToList();*/ PERMISO? existe_permiso_padre = _context.PERMISOSMs.FirstOrDefault(m => m.NU_FK_MS == validar_ms_hijo.NU_PADRE_MS && m.NU_FK_PFL == pms.NU_FK_PFL); //if (existe_permiso_padre.Count() > 0) if (existe_permiso_padre != null) { existe_permiso_padre.BL_ESTADO_PMS = 1; _context.Update(existe_permiso_padre); await _context.SaveChangesAsync(); } else { PERMISO padre = new PERMISO { NU_PK_PMS = count * (-1), NU_FK_PFL = pms.NU_FK_PFL, //NU_FK_MS = validar_ms_hijo[0].NU_PADRE_MS, NU_FK_MS = validar_ms_hijo.NU_PADRE_MS, BL_ESTADO_PMS = 1, }; _context.Add(padre); await _context.SaveChangesAsync(); } } pms.BL_ESTADO_PMS = 1; _context.PERMISOSMs.Add(pms); await _context.SaveChangesAsync(); } } dbContextTransaction.Commit(); List all = new List(); all.Add($"Total registros: {guardar.Count().ToString()}"); all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}"); all.Add($"Erroneos: {error.Count().ToString()}"); var flag_r = 0; foreach (var r in error) { flag_r++; all.Add($"Error #{flag_r}: {r}"); } if (error.Count() > 0) { return Conflict(all.ToList()); } return Ok(); } catch (Exception ex) { //hacemos rollback si hay excepción dbContextTransaction.Rollback(); return BadRequest(ex.Message); } } } } }