/// <summary> /// Permet d'enlever une vidéo du model, ainsi que les informations /// d'épisode TmDb (voir Saison si plus d'épisode). /// </summary> /// <param name="video"></param> internal void RemoveVideo(ShowInformation video) { ShowInformation.Remove(video); TvEpisode episodeToDelete = TvEpisodes.FirstOrDefault(x => x.SeasonNumber == video.Saison && x.EpisodeNumber == video.Episode); if (episodeToDelete != null) { TvEpisodes.Remove(episodeToDelete); if (TvEpisodes.All(x => x.SeasonNumber != video.Saison)) { TvSeason saison = TvSeasons.FirstOrDefault(x => x.SeasonNumber == video.Saison); if (saison != null) { TvSeasons.Remove(saison); } } } }
/// <summary> /// Retourne les épisodes par rapport à une saison. /// </summary> /// <param name="saison"></param> public IEnumerable <TvEpisode> GetEpisodes(int saison) { return(TvEpisodes.Where(x => x.SeasonNumber == saison).ToList()); }
/// <summary> /// Retourne une indication si le ShowModel connait l'épisode de la saison demandé. /// </summary> /// <param name="seasonNumber"></param> /// <param name="episodeNumber"></param> /// <returns></returns> internal bool HaveEpisode(short seasonNumber, short episodeNumber) { return(TvEpisodes.Any(x => x.SeasonNumber == seasonNumber && x.EpisodeNumber == episodeNumber)); }
// Response 3 // GET: /tvseries //public IActionResult Index() //{ // var result = _db.TvSer; // return Ok(); //} public async Task <IActionResult> Get(long Id) { /*{ * TvSeries.Id, * TvSeries.Title, * TvSeries.StoryLine, * TvSeries.PublishDate, * TvSeries.Image.ImageUrl, * TvSeries.Duration, * TvSeries.ContentRating.Name, * TvSeries.AvgRating, * TvSeries.VotesCount, * TvSeries.TvEpisode.Count(), * Crew : { * Cast: { * * } * } * Platforms: [ { Platform.Name },... ], * Seasons: [ **OrderBy SeasonNumber * { * Season.Id, * Season.SeasonNumber, * },... * ] * * }*/ // Complexity: ? var tvEpisodeIds = await(from TvEpisode in db.TvEpisodes where TvEpisode.Season.TvSeriesId == Id select TvEpisode.Id).ToListAsync(); var castPeople = (from TvEpisodeCast in db.TvEpisodeCasts where TvEpisodeCast.TvEpisode.Season.TvSeriesId == Id select new { PersonId = TvEpisodeCast.Person.Id, TvEpisodeCast.Person.FullName, TvEpisodeCast.Person.Image.ImageUrl, TvEpisodeCast.Person.BirthDate, TvEpisodeCast.Person.DeathDate }) .Distinct(); var castCharacters = (from TvEpisodeCastCharacter in db.TvEpisodeCastCharacters where TvEpisodeCastCharacter.TvEpisodeCast.TvEpisode.Season.TvSeriesId == Id select new { TvEpisodeCastCharacter.TvEpisodeCast.PersonId, TvEpisodeCastCharacter.Character }).Distinct(); var cast = (from Person in castPeople let TvEpisodes = (from TvEpisodeCastCharacter in db.TvEpisodeCastCharacters where TvEpisodeCastCharacter.TvEpisodeCast.PersonId == Person.PersonId let TvEpisode = TvEpisodeCastCharacter.TvEpisodeCast.TvEpisode select new { TvEpisode.Id, //TvEpisode.Title, TvEpisode.AirDate }).Distinct() select new { Person, //TvEpisodes, characters = (from TvEpisodeCastCharacter in castCharacters where TvEpisodeCastCharacter.PersonId == Person.PersonId select TvEpisodeCastCharacter.Character).Distinct().ToList(), episodesCount = TvEpisodes.Count(), firstAppearence = TvEpisodes.Min(x => x.AirDate), lastAppearence = TvEpisodes.Max(x => x.AirDate) }).ToList(); var directors = (await(from TvEpisodeDirector in db.TvEpisodeDirectors where TvEpisodeDirector.TvEpisode.Season.TvSeriesId == Id select new { Person = new { PersonId = TvEpisodeDirector.Person.Id, TvEpisodeDirector.Person.FullName, TvEpisodeDirector.Person.Image.ImageUrl }, TvEpisodeDirector.TvEpisode.AirDate }).ToListAsync()) .GroupBy( d => d.Person, d => d.AirDate, (person, airdates) => new { person, episodesCount = airdates.Count(), firstAppearence = airdates.Max(), lastAppearence = airdates.Min() }); var writers = (await(from TvEpisodeWriter in db.TvEpisodeWriters where TvEpisodeWriter.TvEpisode.Season.TvSeriesId == Id select new { Person = new { PersonId = TvEpisodeWriter.Person.Id, TvEpisodeWriter.Person.FullName, TvEpisodeWriter.Person.Image.ImageUrl }, TvEpisodeWriter.TvEpisode.AirDate }).ToListAsync()) .GroupBy( d => d.Person, d => d.AirDate, (person, airdates) => new { person, episodesCount = airdates.Count(), firstAppearence = airdates.Max(), lastAppearence = airdates.Min() }); var producers = (await(from TvEpisodeProducer in db.TvEpisodeProducers where TvEpisodeProducer.TvEpisode.Season.TvSeriesId == Id select new { Person = new { PersonId = TvEpisodeProducer.Person.Id, TvEpisodeProducer.Person.FullName, TvEpisodeProducer.Person.Image.ImageUrl }, TvEpisodeProducer.TvEpisode.AirDate }).ToListAsync()) .GroupBy( d => d.Person, d => d.AirDate, (person, airdates) => new { person, episodesCount = airdates.Count(), firstAppearence = airdates.Max(), lastAppearence = airdates.Min() }); //var cast = await (from TvEpisodeCast in db.TvEpisodeCasts // where TvEpisodeCast.TvEpisode.Season.TvSeriesId == Id // orderby TvEpisodeCast.Importance // group TvEpisodeCast by TvEpisodeCast.Person into PersonGroup // select new // { // person = new // { // PersonGroup.Key.Id, // PersonGroup.Key.FullName, // PersonGroup.Key.BirthDate, // PersonGroup.Key.DeathDate, // PersonGroup.Key.Image.ImageUrl // }, // characters = (from TvEpisodeCast in PersonGroup // from TvEpisodeCastCharacter in db.TvEpisodeCastCharacters // where TvEpisodeCast.PersonId == PersonGroup.Key.Id // where TvEpisodeCastCharacter.TvEpisodeCastId == TvEpisodeCast.Id // select TvEpisodeCastCharacter.Character.Name).ToList() // }).ToListAsync(); // Complexity: 1 var seasons = (from Season in db.Seasons where Season.TvSeriesId == Id orderby Season.SeasonNumber select new { Season.Id, Season.SeasonNumber }); // Complexity: n var episodesCount = (from TvEpisode in db.TvEpisodes from season in seasons where TvEpisode.SeasonId == season.Id select true).Count(); // Complexity: n? var platforms = (from TvSeriesPlatform in db.TvSeriesPlatforms from Platform in db.Platforms where TvSeriesPlatform.TvSeriesId == Id where TvSeriesPlatform.PlatformId == Platform.Id select Platform).ToList(); // Complexity: 1 var tvSeries = (from TvSeries in db.TvSeries where TvSeries.Id == Id select new { TvSeries.Id, TvSeries.Title, TvSeries.StoryLine, TvSeries.PublishDate, TvSeries.Image.ImageUrl, TvSeries.Duration, ContentRating = TvSeries.ContentRating.Name, episodesCount, TvSeries.AvgRating, TvSeries.VotesCount, Platforms = platforms, Seasons = seasons.ToList(), Crew = new { directors, writers, producers, cast } }); if (!tvSeries.Any()) { return(NotFound(new ResWrapper { Status = "NotFound", args = new { Id } })); } return(Ok(new ResWrapper { Status = "OK", Data = tvSeries.Single(), args = new { Id } })); }