public IHttpActionResult PostAnime(AnimeWrapper Req)
        {
            if (!AdminValidator())
            {
                return(Unauthorized());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var anime = Req.Anime;

            try
            {
                var Generos             = Req.Generos;
                var Estudios            = Req.Estudios;
                var NombresAlternativos = Req.NombresAlternativos;
                var Personajes          = Req.Personajes;

                db.Anime.Add(anime);
                db.SaveChanges();

                foreach (int GeneroID in Generos)
                {
                    AnimeGenero animeGenero = new AnimeGenero();
                    animeGenero.AnimeID  = anime.ID;
                    animeGenero.GeneroID = GeneroID;

                    db.AnimeGenero.Add(animeGenero);
                }

                foreach (int EstudioID in Estudios)
                {
                    AnimeEstudio animeEstudio = new AnimeEstudio();
                    animeEstudio.AnimeID   = anime.ID;
                    animeEstudio.EstudioID = EstudioID;

                    db.AnimeEstudio.Add(animeEstudio);
                }

                foreach (string NombreAlternativo in NombresAlternativos)
                {
                    NombreAlternativo nombreAlternativo = new NombreAlternativo();
                    nombreAlternativo.AnimeID = anime.ID;
                    nombreAlternativo.Nombre  = NombreAlternativo;

                    db.NombreAlternativo.Add(nombreAlternativo);
                }

                foreach (Personajes Personaje in Personajes)
                {
                    Personaje.AnimeID = anime.ID;

                    db.Personajes.Add(Personaje);
                }

                db.SaveChanges();
            }
            catch
            {
                return(Conflict());
            }

            return(CreatedAtRoute("DefaultApi", new { id = anime.ID }, anime));
        }
        public IHttpActionResult PutAnime(int id, AnimeWrapper Req)
        {
            if (!AdminValidator())
            {
                return(Unauthorized());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }


            var anime = Req.Anime;

            anime.ID = id;
            var Generos             = Req.Generos;
            var Estudios            = Req.Estudios;
            var NombresAlternativos = Req.NombresAlternativos;
            var Personajes          = Req.Personajes;

            db.Personajes.RemoveRange(db.Personajes.Where(x => x.AnimeID == id));
            db.AnimeGenero.RemoveRange(db.AnimeGenero.Where(x => x.AnimeID == id));
            db.AnimeEstudio.RemoveRange(db.AnimeEstudio.Where(x => x.AnimeID == id));
            db.NombreAlternativo.RemoveRange(db.NombreAlternativo.Where(x => x.AnimeID == id));

            foreach (int GeneroID in Generos)
            {
                AnimeGenero animeGenero = new AnimeGenero();
                animeGenero.AnimeID  = id;
                animeGenero.GeneroID = GeneroID;

                db.AnimeGenero.Add(animeGenero);
            }

            foreach (int EstudioID in Estudios)
            {
                AnimeEstudio animeEstudio = new AnimeEstudio();
                animeEstudio.AnimeID   = id;
                animeEstudio.EstudioID = EstudioID;

                db.AnimeEstudio.Add(animeEstudio);
            }

            foreach (string NombreAlternativo in NombresAlternativos)
            {
                NombreAlternativo nombreAlternativo = new NombreAlternativo();
                nombreAlternativo.AnimeID = id;
                nombreAlternativo.Nombre  = NombreAlternativo;

                db.NombreAlternativo.Add(nombreAlternativo);
            }

            foreach (Personajes Personaje in Personajes)
            {
                Personaje.AnimeID = id;

                db.Personajes.Add(Personaje);
            }

            db.Entry(anime).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!AnimeExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public ActionResult Guardar(AnimeCLS anime, List <int> generos, List <int> estudios, List <PersonajeCLS> personajes, List <string> nombresAlternativos)
        {
            Token token = HttpContext.Session["token"] as Token;

            if (token == null || token.ExpiresAt < DateTime.Now)
            {
                return(RedirectToAction("Index", "Authentication"));
            }

            try
            {
                int ID = anime.ID ?? 0;

                AnimeWrapper req = new AnimeWrapper();
                req.Anime               = anime;
                req.Generos             = generos ?? new List <int>();
                req.Estudios            = estudios ?? new List <int>();
                req.Personajes          = personajes ?? new List <PersonajeCLS>();
                req.NombresAlternativos = nombresAlternativos ?? new List <string>();

                HttpClient httpClient = new HttpClient();
                httpClient.BaseAddress = new Uri(baseURL);
                httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);

                string      reqJson = JsonConvert.SerializeObject(req);
                HttpContent body    = new StringContent(reqJson, Encoding.UTF8, "application/json");

                if (ID == 0)
                {
                    HttpResponseMessage response = httpClient.PostAsync(basePath + "api/Animes", body).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        return(Json(
                                   new
                        {
                            success = true,
                            message = "Anime creado satisfactoriamente"
                        }, JsonRequestBehavior.AllowGet));
                    }
                    else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
                    {
                        return(RedirectToAction("Index", "Authentication"));
                    }
                }
                else
                {
                    HttpResponseMessage response = httpClient.PutAsync($"{basePath}api/Animes/{ID}", body).Result;
                    if (response.IsSuccessStatusCode)
                    {
                        return(Json(
                                   new
                        {
                            success = true,
                            message = "Anime modificado satisfactoriamente"
                        }, JsonRequestBehavior.AllowGet));
                    }
                }
                throw new Exception("Error desconocido al guardar anime");
            }
            catch (Exception e)
            {
                return(Json(
                           new
                {
                    success = false,
                    message = e.InnerException
                }, JsonRequestBehavior.AllowGet));
            }
        }