Apigateway/Microservicios/MsUsuarios/Controllers/PerfilesController.cs

204 lines
7.1 KiB
C#

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<IActionResult> GetPerfiles()
{
try
{
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<IActionResult> 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<IActionResult> 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<IActionResult> 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)
{
// Se cambia a estado 0 todos los perfiles por usuario existentes
List<PERMISO> 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();
}
foreach (var pxp in nuevo.permisos)
{
PERMISO? existe = _context.PERMISOSMs.FirstOrDefault(pm => pm.NU_FK_PFL == pxp.NU_FK_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);
await _context.SaveChangesAsync();
continue;
}
else
{
if (pxp == null)
{
_errorModel.error = true;
_errorModel.cuerpo.Add($"Permiso sin valores");
continue;
}
pxp.BL_ESTADO_PMS = 1;
pxp.NU_FK_PFL = creado.NU_PK_PFL;
_context.PERMISOSMs.Add(pxp);
await _context.SaveChangesAsync();
}
}
}
transaccion.Commit();
_errorModel.error = false;
_errorModel.cuerpo.Add("Perfil creado correctamente");
return Ok(_errorModel);
}
catch (Exception e)
{
transaccion.RollbackToSavepoint("InicioCreacionPerfilPermisos");
return BadRequest(e.Message);
}
}
}
}
}