Example #1
0
        public async Task <Libros> Post(int idAutor, [FromBody] Libros libro)
        {
            try
            {
                //Se realiza validación del registro a almacenar en la base de datos para evitar error que rompa la integridad de la llave primaria
                Libros tmpLibro = db.libros.Find(libro.Isbn);

                //Se evalua el resultado haciendo uso del valor por defecto de la clase
                if (tmpLibro != default(Libros))
                {
                    //Se genera excepción de tipo "Custom Exception" para su debida interpretación por el manejador
                    throw new CustomException("Actualmente existe otro libro con el ISBN ingresado, el titulo de este libro es " + tmpLibro.Titulo);
                }

                int countLibros = db.libros.Where(x => x.EditorialesId == libro.EditorialesId).Count();

                var itemEditorial  = db.editoriales.FirstOrDefault(x => x.Id == libro.EditorialesId);
                int countEditorial = itemEditorial.MaxLibros;

                if (countLibros == countEditorial)
                {
                    //Se genera excepción de tipo "Custom Exception" para su debida interpretación por el manejador
                    throw new CustomException("La libreria " + itemEditorial.Nombre + " Alcanzo el maximo de libros registrados.");
                }

                //Se agrega la relacion
                AutoresLibros al = new AutoresLibros {
                    AutoresId = idAutor, LibrosIsbn = libro.Isbn, Libro = null, Autor = null
                };
                libro.AutoresLibros = new List <AutoresLibros>
                {
                    al
                };

                //Se agrega la entidad a la colección de la base de datos
                db.libros.Add(libro);

                //Se ejecuta el almacenamiento de los campos en la base de datos para su inserción
                await db.SaveChangesAsync();

                return(libro);
            }
            catch (CustomException ex)
            {
                //En caso de encontrar una excepción de tipo "CustomException" se retorna la excepción tal cual para la interpretación del manejador
                throw ex;
            }
            catch (Exception ex)
            {
                Exception ex1 = ex;

                //Se recorre la excepción para realizar la búsqueda de las excepciones internas y determinar el mensaje de salida
                while (ex1.InnerException != null)
                {
                    ex1 = ex1.InnerException;
                }

                throw new Exception(ex1.Message);
            }
        }
Example #2
0
        public async Task <Libros> Put(long id, int idAutor, [FromBody] Libros libro)
        {
            try
            {
                //Se realiza la búsqueda de la información a editar
                Libros patch = db.libros.Find(id);

                if (patch == default(Libros))
                {
                    //En caso de no encontrar el registro se genera una excepción para informar al usuario
                    throw new CustomException("El registro que intenta eliminar ya no se encuentra en la base de datos, por favor refresque la ventana e intentelo de nuevo");
                }

                //Se realiza la modificacíon de los datos
                patch.Titulo        = libro.Titulo;
                patch.Genero        = libro.Genero;
                patch.NumeroPaginas = libro.NumeroPaginas;
                patch.EditorialesId = libro.EditorialesId;

                //Se realiza la búsqueda de la información a eliminar
                db.autoresHasLibros.RemoveRange(db.autoresHasLibros.Where(x => x.LibrosIsbn == id && x.AutoresId == idAutor));

                //Se agrega la relacion
                AutoresLibros al = new AutoresLibros {
                    AutoresId = idAutor, LibrosIsbn = libro.Isbn, Libro = null, Autor = null
                };
                patch.AutoresLibros = new List <AutoresLibros>
                {
                    al
                };

                //Se ejecuta el almacenamiento de los campos en la base de datos para su actualización
                await db.SaveChangesAsync();

                return(patch);
            }
            catch (CustomException ex)
            {
                //En caso de encontrar una excepción de tipo "CustomException" se retorna la excepción tal cual para la interpretación del manejador
                throw ex;
            }
            catch (Exception ex)
            {
                Exception ex1 = ex;
                //Se recorre la excepción para realizar la búsqueda de las excepciones internas y determinar el mensaje de salida
                while (ex1.InnerException != null)
                {
                    ex1 = ex1.InnerException;
                }

                throw new Exception(ex1.Message);
            }
        }