public IActionResult LibrosPorCriterio(CriterioViewModel criterio, SegundoViewModel modelo)
        {
            //  en este momento, el binder no solamente enlazo las propiedades sino que validó el modelo con los datos
            //  disponibles ==> data annotations!!!
            //
            if (ModelState.IsValid)
            {
                //  quiero que el modelo TAMBIEN sea invalido si AMBAS propiedades estan vacias...
                //
                if (string.IsNullOrWhiteSpace(criterio.Editorial) && string.IsNullOrWhiteSpace(criterio.Titulo))
                {
                    ModelState.AddModelError <CriterioViewModel>(model => model,
                                                                 "[ERROR MODELO] No podemos buscar sin ningun criterio...");

                    return(View());
                }

                var resultado = _stock.GetLibrosFromCriterio($"{criterio.Titulo} {criterio.Editorial}");

                return(View("ListaLibros", resultado));
            }
            else
            {
                ModelState.Clear();

                if (TryValidateModel(criterio))
                {
                    if (TryValidateModel(modelo))
                    {
                        var resultado = _stock.GetLibrosFromCriterio($"{criterio.Titulo} {criterio.Editorial}");

                        return(View("ListaLibros", resultado));
                    }

                    //  quiere decir que el error esta en el segundo...
                    //  iteramos en la coleccion de errores...
                    foreach (var campo in ModelState.Keys)
                    {
                        //  ojo cada campo puede tener mas de un error diferente...
                        var errores = ModelState[campo].Errors;

                        foreach (var error in errores)
                        {
                            ModelState.AddModelError <SegundoViewModel>(model => model,
                                                                        $"Campo {campo} ==> {error.ErrorMessage} - Valor actual: {ModelState[campo].AttemptedValue}");
                        }
                    }
                    return(View());
                }
                return(View());
            }
        }
Beispiel #2
0
        public ActionResult <IEnumerable <LibroDTO> > Get(string criterio, [FromServices] IMapper mapper)
        {
            //  sin atributos en el metodo...
            //
            //  http://localhost:5000/api/libros?editorial=apress
            //
            //  [Route("{criterio:alpha}")]
            //
            //  http://localhost:5000/api/libros/apress

            //  LibroDTO dto = mapper.Map<LibroDTO>(new Libro());
            //
            var resultado = mapper.Map <IEnumerable <LibroDTO> >(_stock.GetLibrosFromCriterio(criterio));

            //  el ToList() es una restriccion del tipo generico ActionResult<T>
            //
            return(resultado.ToList());
        }
Beispiel #3
0
        public void Run()
        {
            Console.Clear();
            Header("biblioZ-cli", "Interface de linea de comando para BiblioZone");

            try
            {
                int opcion = Prompt.Menu("Seleccionar una de las acciones que queres realizar", new[]
                {
                    "Importar Libros desde --file y ejecutar las pruebas en memoria",
                    "Importar Libros desde --file y guardar en la DB",
                    "Importar Autores desde --file y mostrar en pantalla",
                    "Importar Autores desde --file y guardar en la DB",
                    "Consultas varias desde el contexto",
                    "Pruebas ingresando Libros"
                });

                //  TODO_HECHO obtener archivo desde la configuracion
                //
                //  --file=D:\CURSOS\libros.csv --tipo=libros
                //
                //  --file=D:\CURSOS\autores.csv --tipo=autores
                //
                //  NOTA: cuando ponemos el menu, no tiene sentido usar la opcion --tipo
                //
                //  string file = @"D:\CURSOS\PTR2020_Avanzado\listados\libros.csv";
                string file = _config["file"];

                if (opcion.In(0, 2, 1, 3) && file == null)
                {
                    throw new ApplicationException("La opcion seleccionada necesita que se pase un archivo en --file");
                }

                switch (opcion)
                {
                case 0:
                {
                    if (Prompt.Confirm($"Es el archivo correcto? ==> {file}"))
                    {
                        _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file);

                        IEnumerable <Libro> lista = _imp.ImportarCSV(file);

                        _logger.LogInformation("Ejecutando pruebas en memoria...");

                        //  ejecutamos las pruebas sobre la lista importada (memoria)
                        //
                        Pruebas(lista);
                    }
                }
                break;

                case 1:
                {
                    if (Prompt.Confirm($"Es el archivo correcto? ==> {file}"))
                    {
                        _logger.LogInformation("Iniciando el procesamiento del archivo de Libros {archivo}", file);

                        IEnumerable <Libro> lista = _imp.ImportarCSV(file);

                        _logger.LogInformation("Iniciando el proceso de exportacion");

                        //  eliminamos los datos previos??
                        if (Prompt.Confirm("Eliminamos datos previos?", true,
                                           "WARNING Esta operacion eliminara todos los datos de las 3 tablas de Articulos!!"))
                        {
                            _exp.ClearDatabase();
                        }

                        //  pasamos la responsabilidad de la exportacion al componente adecuado...
                        //
                        _exp.ExportarListaDeLibros(lista);
                    }
                }
                break;

                case 2:
                {
                    if (Prompt.Confirm($"Es el archivo correcto? ==> {file}"))
                    {
                        _logger.LogInformation("Iniciando el procesamiento del archivo de Autores {archivo}", file);

                        var autoresTemp = _imp.ImportarAutores(file);

                        Console.WriteLine("Lista de autores importados...");

                        foreach (var item in autoresTemp)
                        {
                            Console.WriteLine($"Se importo el siguiente par (idLibro, autor) ==> {item}");

                            _logger.LogDebug("Se importo el siguiente par (idLibro, autor) ==> {tupla}", item);
                        }
                    }
                }
                break;

                case 3:
                {
                    if (Prompt.Confirm($"Es el archivo correcto? ==> {file}"))
                    {
                        _logger.LogInformation("Iniciando el procesamiento del archivo de Autores {archivo}", file);

                        var autoresTemp = _imp.ImportarAutores(file);

                        Console.WriteLine("Lista de autores importados...");

                        foreach (var item in autoresTemp)
                        {
                            Console.WriteLine($"Se importo el siguiente par (idLibro, autor) ==> {item}");

                            _logger.LogDebug("Se importo el siguiente par (idLibro, autor) ==> {tupla}", item);
                        }
                        _exp.ExportarListaDeAutores(autoresTemp);
                    }
                }
                break;

                case 13:
                {
                    string editorial = Prompt.Input <string>("Ingresar el nombre de una editorial");

                    Console.WriteLine($"Titulos para la Editorial {editorial}:\n");

                    //  foreach (string titulo in _exp.ObtenerTitulosDeEditorial(editorial)) { Console.WriteLine(titulo); }
                }
                break;

                case 4:
                {
                    Console.WriteLine($"Pruebas de consultas e ingresos varios para libros y autores:\n");

                    string criterio = Prompt.Input <string>("Ingresar criterio (titulo, editorial o autor)... ");

                    var libros = _stock.GetLibrosFromCriterio(criterio);

                    foreach (Libro libro in libros)
                    {
                        Console.WriteLine($"Titulo: {libro.Titulo} - Clave: {libro.ID_Real} - ISBN: {libro.ISBN13}");

                        Console.WriteLine("Autor(es) del libro...");
                        foreach (Autor autor in libro.Autores)
                        {
                            Console.WriteLine($"Nombre: {autor.Nombre} - Libros Escritos: {autor.Libros.Count}");
                        }
                    }

                    string editorial = Prompt.Input <string>("Ingresar un nombre de editorial (exacto) ");

                    var titulos = _stock.ObtenerTitulosDeEditorial(editorial);

                    Console.WriteLine($"Titulos editados por {editorial}");

                    foreach ((Guid id, string titulo)item in titulos)
                    {
                        Console.WriteLine($"Titulo: {item.titulo} - ID: {item.id}");
                    }

                    //if (libroResultado == null)
                    //{
                    //  //  crear nuevo libro...
                    //  libroResultado = new Libro()
                    //  {
                    //    ID = "1234",
                    //    Titulo = titulo,
                    //    Publicacion = null
                    //  };
                    //}
                    //else
                    //{
                    //  Console.WriteLine($"Autores del libro: {libroResultado.Titulo}");

                    //  foreach (var au in libroResultado.LibroAutores)
                    //    Console.WriteLine($"ID={au.ID_Autor} ; Nombre={au.Autor.Nombre}");
                    //}

                    //string autor = Prompt.Input<string>("Ingresar nombre del autor (exacto)");
                    //var autorResultado = _exp.GetAutor(autor);

                    //if (autorResultado == null)
                    //{
                    //  autorResultado = new Autor()
                    //  {
                    //    Nombre = autor
                    //  };
                    //}
                    //else
                    //{
                    //  Console.WriteLine($"Libros escritos por {autor}");

                    //  foreach (var li in autorResultado.AutorLibros)
                    //    Console.WriteLine($"{li.Libro.Titulo}");
                    //}

                    ////  PARA MEDITAR -- De que manera podemos evitar el UPDATE del Libro que no esta modificado??
                    ////
                    //libroResultado.LibroAutores.Add(new LibroAutor() { Libro = libroResultado, Autor = autorResultado });

                    //_exp.AgregarLibro(libroResultado);
                    ////  _exp.AgregarLibroAutor(new LibroAutor() { Libro = libroResultado, Autor = autorResultado });

                    //Console.WriteLine($"GUID: {libroResultado.ID_Real} Fecha: {libroResultado.Publicacion}");
                }
                break;
                }
            }
            catch (ApplicationException ex) when(ex.Data.Contains("archivo"))
            {
                Console.WriteLine($"Se produjo una excepcion {ex.Message} Archivo: {ex.Data["archivo"]}");
            }
            catch (NullReferenceException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.WriteLine();
                Console.WriteLine("[finally] ==> programa terminado!!");
            }
        }