/// <summary> /// Update seen status for season's episodes /// </summary> /// <param name="id">Season Id</param> /// <param name="seen">Seen status</param> public void UpdateSeenStatus(int id, bool seen) { var user = this.Utils.GetCurrentUser(); var season = this._databaseContext.Seasons.Find(id); var episodes = this._databaseContext.Episodes.Where(x => x.Season.Id == id).ToList(); foreach (var i in episodes) { var connection = i.ConnectedUsers.FirstOrDefault(x => x.User.Id == user.Id); if (connection != null) { connection.Seen = seen; connection.SeenOn = seen ? (DateTime?)DateTime.Now : null; this._databaseContext.UserEpisodeSwitch.Update(connection); } else { if (seen) { var userEpisode = new UserEpisode { UserId = user.Id, EpisodeId = i.Id, Seen = true, SeenOn = DateTime.Now }; this._databaseContext.UserEpisodeSwitch.Add(userEpisode); } } } this._databaseContext.SaveChanges(); this.Logger.LogInformation(user, this.GetService(), this.GetEvent("set season seen status for"), id); this.Notification.AddStatusLibraryNotificationByType(StatusLibraryNotificationType.SeasonSeenStatusUpdated, user, season?.Series.Title ?? "", season?.Number.ToString() ?? "", seen ? "Seen" : "Unseen"); }
public MUser Update(int id, UserUpdateRequest request) { var user = _ctx.Users.Find(id); var userToReturn = _mapper.Map <MUser>(user); userToReturn.FavouriteEpisodes = _ctx.UserEpisodes.Where(y => y.UserId == user.Id).Select(y => new MEpisode { Id = y.EpisodeId, MediaFile = _mapper.Map <MMediaFile>(y.Episode.MediaFile), Title = y.Episode.Title, AirDate = (DateTime)y.Episode.AirDate, OverallNumberOfEpisode = (int)y.Episode.OverallNumberOfEpisode, SeasonEpisodeNumber = y.Episode.SeasonEpisodeNumber, Season = _mapper.Map <MSeason>(y.Episode.Season), Summary = y.Episode.Summary, Viewcount = y.Episode.Viewcount, Characters = _mapper.Map <List <MCharacter> >(_ctx.EpisodeCharacters.Include(z => z.Character.CharacterMediaFile).Where(z => z.EpisodeId == y.EpisodeId).Select(x => x.Character).ToList()) }).ToList(); userToReturn.FavouriteCharacters = _ctx.UserCharacters.Where(y => y.UserId == user.Id).Select(y => new MCharacter { Id = y.CharacterId, Biography = y.Character.Biography, BirthDate = y.Character.BirthDate, FirstName = y.Character.FirstName, LastName = y.Character.LastName, CharacterMediaFile = _mapper.Map <MCharacterMediaFile>(y.Character.CharacterMediaFile), Occupation = y.Character.Occupation, FamilyId = (int)y.Character.FamilyId }).ToList(); userToReturn.WatchedEpisodes = _ctx.UserEpisodeActivities.Where(y => y.UserId == id).Select(y => new MEpisode { Id = y.EpisodeId, MediaFile = _mapper.Map <MMediaFile>(y.Episode.MediaFile), Title = y.Episode.Title, AirDate = (DateTime)y.Episode.AirDate, OverallNumberOfEpisode = (int)y.Episode.OverallNumberOfEpisode, SeasonEpisodeNumber = y.Episode.SeasonEpisodeNumber, Season = _mapper.Map <MSeason>(y.Episode.Season), Summary = y.Episode.Summary, Viewcount = y.Episode.Viewcount }).ToList(); if (request.NewFavouriteCharacter != null) { UserCharacter uc = new UserCharacter { CharacterId = request.NewFavouriteCharacter.Id, UserId = user.Id }; if (request.ToAdd) { _ctx.UserCharacters.Add(uc); _ctx.SaveChanges(); userToReturn.FavouriteCharacters.Add(new MCharacter { Id = request.NewFavouriteCharacter.Id, FirstName = request.NewFavouriteCharacter.FirstName, CharacterMediaFile = _mapper.Map <MCharacterMediaFile>(request.NewFavouriteCharacter.CharacterMediaFile), FamilyId = request.NewFavouriteCharacter.FamilyId, Biography = request.NewFavouriteCharacter.Biography, BirthDate = request.NewFavouriteCharacter.BirthDate, LastName = request.NewFavouriteCharacter.LastName, Occupation = request.NewFavouriteCharacter.Occupation }); } else { _ctx.UserCharacters.Remove(uc); _ctx.SaveChanges(); var ch = userToReturn.FavouriteCharacters.Where(x => x.Id == request.NewFavouriteCharacter.Id).FirstOrDefault(); userToReturn.FavouriteCharacters.Remove(ch); } } if (request.NewFavouriteEpisode != null) { UserEpisode ue = new UserEpisode { EpisodeId = request.NewFavouriteEpisode.Id, UserId = user.Id }; if (request.ToAdd) { _ctx.UserEpisodes.Add(ue); _ctx.SaveChanges(); userToReturn.FavouriteEpisodes.Add(new MEpisode { Id = request.NewFavouriteEpisode.Id, Title = request.NewFavouriteEpisode.Title, MediaFile = _mapper.Map <MMediaFile>(request.NewFavouriteEpisode.MediaFile), AirDate = request.NewFavouriteEpisode.AirDate, OverallNumberOfEpisode = request.NewFavouriteEpisode.OverallNumberOfEpisode, SeasonEpisodeNumber = request.NewFavouriteEpisode.SeasonEpisodeNumber, Summary = request.NewFavouriteEpisode.Summary, Viewcount = request.NewFavouriteEpisode.Viewcount, Season = request.NewFavouriteEpisode.Season, Characters = _mapper.Map <List <MCharacter> >(_ctx.EpisodeCharacters.Include(z => z.Character.CharacterMediaFile).Where(z => z.EpisodeId == request.NewFavouriteEpisode.Id).Select(x => x.Character).ToList()) }); } else { _ctx.UserEpisodes.Remove(ue); _ctx.SaveChanges(); var ep = userToReturn.FavouriteEpisodes.Where(x => x.Id == request.NewFavouriteEpisode.Id).FirstOrDefault(); userToReturn.FavouriteEpisodes.Remove(ep); } } return(userToReturn); }
public void RateEpisode(string episodeIdString, string ratingString, string seriesIdString, string seasonIdString) { var episodeId = Convert.ToInt64(episodeIdString); var rating = Convert.ToInt32(ratingString); var seriesId = Convert.ToInt64(seriesIdString); var seasonId = Convert.ToInt64(seasonIdString); string userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var userEpisode = _context.UserEpisodes .Where(x => x.EpisodeId == episodeId && x.UserId == userId) .FirstOrDefault(); var oldEpisodesWatched = _context.UserEpisodes .Include(x => x.Episode) .ThenInclude(x => x.Season) .Where(x => x.Episode.Season.SeriesId == seriesId); var oldSeasonEpisodeWatchedCount = oldEpisodesWatched.Where(x => x.Episode.SeasonId == seasonId).Count(); if (userEpisode == null) { var episodeRating = new UserEpisode { EpisodeId = episodeId, UserId = userId, Rating = rating, CreatedAt = DateTime.UtcNow, CreatedBy = userId }; _context.UserEpisodes.Add(episodeRating); _context.SaveChanges(); } else { userEpisode.Rating = rating; userEpisode.LastChangedAt = DateTime.UtcNow; userEpisode.LastChangedBy = userId; _context.Update(userEpisode); _context.SaveChanges(); } var episode = _context.Episodes.Where(x => x.Id == episodeId).FirstOrDefault(); // TODO handle when episode vote is updated not added var userEpisodes = _context.UserEpisodes.Where(x => x.EpisodeId == episodeId).ToList(); var numberOfVotes = userEpisodes.Count(); var ratingSum = userEpisodes.Sum(x => x.Rating); var newRating = (decimal)ratingSum / numberOfVotes; episode.UserRating = newRating; _context.Update(episode); _context.SaveChanges(); var episodesWatched = _context.UserEpisodes .Include(x => x.Episode) .ThenInclude(x => x.Season) .Where(x => x.Episode.Season.SeriesId == seriesId); var episodesCount = episodesWatched.Count(); var seasonEpisodeWatchedCount = episodesWatched.Where(x => x.Episode.SeasonId == seasonId).Count(); var seasonEpisodesCount = episodesWatched.FirstOrDefault().Episode.Season.NumberOfEpisodes; bool isFullSeasonWatched = false; if (seasonEpisodesCount.HasValue) { isFullSeasonWatched = seasonEpisodeWatchedCount >= seasonEpisodesCount.Value && oldSeasonEpisodeWatchedCount != seasonEpisodeWatchedCount; } var userSeries = _context.UsersSeries .Where(x => x.SeriesId == seriesId && x.UserId == userId) .FirstOrDefault(); if (userSeries != null) { userSeries.EpisodesWatched = episodesCount; if (isFullSeasonWatched) { userSeries.SeasonsWatched++; } _context.Update(userSeries); _context.SaveChanges(); } }