using Microsoft.AspNetCore.Mvc; using Modelo; using AlquilaFacil.Builder; using Entidades; using Entidades.Dto; namespace AlquilaFacil.Controllers; [ApiController] public class GruposController : ControllerBase { [HttpGet("api/admin/grupos")] public IActionResult ObtenerGrupos([FromHeader(Name = "Auth")] string Auth) { var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 18) || RepositorioPermisos.Singleton.CheckPermisos(Auth, 9); if (ret == false) return BadRequest(new { message = "No tiene permiso para ver todos los grupos" }); Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); if (cli == null) return BadRequest(new { message = "No hay un cliente por el token que enviaste" }); var grupos = RepositorioGrupos.Singleton.ListarTodosLosGrupos() .Select(g => new GrupoDtoBuilder() .ConNombre(g.Nombre) .ConIdGrupo(g.Id) .ConHabilitado(g.Habilitado ?? false) .ConGruposIncluidos(new HashSet(g.IdGrupoHijos .Select(id => id.Nombre ?? ""))) .ConPermisos(g.Idpermisos.Select(p => new PermisoDtoBuilder() .ConId(p.Id) .ConDescripcion(p.Descripcion) .Build()) .ToList()) .Build()) .ToList(); return Ok(grupos); } [HttpPatch("/api/grupo")] public IActionResult PatchGrupo([FromHeader(Name = "Auth")] string Auth, GrupoDto grupo) { var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 18); if (ret == false) return BadRequest(new { message = "No tiene permiso para Gestionar grupos" }); Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); if (cli == null) return BadRequest(new { message = "No hay un cliente por el token que enviaste" }); bool ret2 = RepositorioGrupos.Singleton.PatchGrupo(grupo, cli); return ret2 ? Ok(new { message = "Se Modifico el grupo" }) : BadRequest(new { message = "Fallo al editar el grupo" }); } [HttpPost("/api/grupo")] public IActionResult PostGrupo([FromHeader(Name = "Auth")] string Auth, GrupoDto grupo) { var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 18); if (ret == false) return BadRequest(new { message = "No tiene permiso para Gestionar grupos" }); Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); if (cli == null) return BadRequest(new { message = "No hay un cliente por el token que enviaste" }); if (grupo.Nombre.Length > 12) { return BadRequest(new { message = "El nombre del grupo no puede superar los 12 caracteres" }); } bool ret2 = RepositorioGrupos.Singleton.AddGrupo(grupo, cli); return ret2 ? Ok(new { message = "Se Añadio el grupo" }) : BadRequest(new { message = "Fallo al añadirse el grupo" }); } [HttpDelete("/api/grupo")] public IActionResult DeleteGrupo([FromHeader(Name = "Auth")] string Auth, [FromQuery] int id) { var ret = RepositorioPermisos.Singleton.CheckPermisos(Auth, 18); if (ret == false) return BadRequest(new { message = "No tiene permiso para Gestionar grupos" }); Cliente? cli = RepositorioUsuarios.Singleton.ObtenerClientePorToken(Auth); if (cli == null) return BadRequest(new { message = "No hay un cliente por el token que enviaste" }); if (id <= 0) return BadRequest(new { message = "El ID del grupo debe ser mayor que cero" }); var (ret2, estado) = RepositorioGrupos.Singleton.ToggleGrupo(id, cli); return ret2 ? Ok(new { message = (estado ? "Grupo habilitado exitosamente" : "Grupo deshabilitado exitosamente") }) : BadRequest(new { message = "No se pudo cambiar el estado del grupo" }); } }