public async Task <List <TareasModel> > Consultar([FromQuery] CriteriosTareas input) { return(await _tareasNegocio.Consultar(input)); }
public async Task <List <TareasModel> > Consultar(CriteriosTareas input) { try { var config = new MapperConfiguration(cfg => { cfg.CreateMap <List <Tareas>, List <TareasModel> >(); }); IMapper iMapper = config.CreateMapper(); //Se parametrizan los predicados var inner = PredicateBuilder.False <Tareas>(); //OR var outer = PredicateBuilder.True <Tareas>(); //AND if (input.ConsultarSoloMisTareas) { ClaimsIdentity claimsIdentity = new ClaimsIdentity("UserData"); var jsonUserInfo = claimsIdentity.Claims.FirstOrDefault().Value; var usuarioActual = JsonConvert.DeserializeObject <UsuarioModel>(jsonUserInfo); //Suponiendo que el usuario es unico var usuarioInfo = (from usuario in await _usuariosRepositorio.GetAllAsync() where usuario.Usuario == usuarioActual.Usuario select usuario).FirstOrDefault(); /* * var listaTareasInfo = (from tarea in await _tareasRepositorio.GetAllAsync() * where tarea.UsuarioRefId == usuarioInfo.Id * select tarea).ToList(); */ outer = outer.And(t => t.UsuarioRefId == usuarioInfo.Id); //return iMapper.Map<List<TareasModel>>(listaTareasInfo); } if (input.ConsultarTareasPendientes) {/* * var listaTareasInfo = (from tarea in await _tareasRepositorio.GetAllAsync() * where tarea.EstadoTarea == "Pendiente" * select tarea).ToList(); */ inner = inner.Or(t => t.EstadoTarea == "Pendiente"); //return iMapper.Map<List<TareasModel>>(listaTareasInfo); } if (input.ConsultarTareasFinalizadas) {/* * var listaTareasInfo = (from tarea in await _tareasRepositorio.GetAllAsync() * where tarea.EstadoTarea == "Finalizado" * select tarea).ToList();*/ inner = inner.Or(t => t.EstadoTarea == "Finalizado"); //return iMapper.Map<List<TareasModel>>(listaTareasInfo); } outer = outer.And(inner); if (input.OrdenarConsultaPorFechaVencimiento) { /* * var listaTareasInfo = (from tarea in await _tareasRepositorio.GetAllAsync() * orderby tarea.FechaVencimiento * select tarea).ToList();*/ var listaTareasOrdenadas = (await _tareasRepositorio.GetAllAsync()).Where(outer).OrderBy(s => s.FechaVencimiento); return(iMapper.Map <List <TareasModel> >(listaTareasOrdenadas)); //return iMapper.Map<List<TareasModel>>(listaTareasInfo); } var listaTareas = (await _tareasRepositorio.GetAllAsync()).Where(outer).ToList(); return(iMapper.Map <List <TareasModel> >(listaTareas)); } catch (Exception) { throw new Exception("Error en consulta"); } }