private ListDescriptionTO getListDetails(string userName, int listId) { var list = _listRepository.GetSingle(listId); if (list != null) { list.Films = _listRepository.GetListFilms(listId); Mapper.CreateMap <Film, FilmListDetailsTO>(); Mapper.CreateMap <ApplicationUser, UserNameTO>(); Mapper.CreateMap <List, ListDescriptionTO>(); var listModel = Mapper.Map <List, ListDescriptionTO>(list); foreach (var film in listModel.Films) { string[] shortDesc = film.Description.Split(' '); Array.Resize(ref shortDesc, 15); film.Description = string.Join(" ", shortDesc); } List <int> filmIds = new List <int>(); foreach (var film in listModel.Films) { filmIds.Add(film.Id); } // calculate votes count Dictionary <int, int> votes = _listRepository.CalculateVotes(list.Id, filmIds); foreach (var film in listModel.Films) { if (votes.ContainsKey(film.Id)) { film.Votes = votes[film.Id]; } else { film.Votes = 0; } } listModel.Films.OrderByDescending(d => d.Votes); var user = new UserNameTO { UserName = _listRepository.GetListCreator(listId) }; listModel.User = user; ApplicationCache <ListDescriptionTO> .AddCacheItem(listModel); return(listModel); } return(null); }
private void addNewestListToCache(int listId, bool?isUpdate) { var list = _listRepository.GetSingle(listId); if (list != null) { list.Films = _listRepository.GetListFilms(listId); Mapper.CreateMap <Film, FilmListDetailsTO>(); Mapper.CreateMap <ApplicationUser, UserNameTO>(); Mapper.CreateMap <List, ListDescriptionTO>(); var listModel = Mapper.Map <List, ListDescriptionTO>(list); foreach (var film in listModel.Films) { string[] shortDesc = film.Description.Split(' '); Array.Resize(ref shortDesc, 15); film.Description = string.Join(" ", shortDesc); } List <int> filmIds = new List <int>(); foreach (var film in listModel.Films) { filmIds.Add(film.Id); } foreach (var film in listModel.Films) { film.Votes = 0; film.isVoted = false; } listModel.Films.OrderByDescending(d => d.Votes); var user = new UserNameTO { UserName = _listRepository.GetListCreator(listId) }; listModel.User = user; listModel.Likes = 0; listModel.DisLikes = 0; listModel.Voted = 0; var cache = ApplicationCache <ListDescriptionTO> .GetCache(); if (isUpdate == false) { if (cache.Count() > 0) { ApplicationCache <ListDescriptionTO> .AddCacheItem(listModel); } } else { if (cache.Count() > 0) { var cacheItem = cache.FirstOrDefault(d => d.Id == listId); if (cacheItem != null) { int cacheItemIndex = cache.IndexOf(cacheItem); cache[cacheItemIndex] = listModel; } } } } }
public IEnumerable <ListDescriptionTO> GetAllLists(string userName) { List <ListDescriptionTO> result = new List <ListDescriptionTO>(); var cache = ApplicationCache <ListDescriptionTO> .GetCache(); if (cache.Count() > 0) { result = cache; foreach (var list in result) { var filmsToSort = list.Films.ToList(); filmsToSort.Sort((x, y) => y.Votes - x.Votes); list.Films = filmsToSort; } } else { var lists = _listRepository.GetAll(); List <ListDescriptionTO> listsModel = new List <ListDescriptionTO>(); if (lists.Any()) { foreach (var list in lists) { list.Films = _listRepository.GetListFilms(list.Id); } Mapper.CreateMap <Film, FilmListDetailsTO>(); Mapper.CreateMap <ApplicationUser, UserNameTO>(); Mapper.CreateMap <List, ListDescriptionTO>(); listsModel = Mapper.Map <List <List>, List <ListDescriptionTO> >(lists); foreach (var list in listsModel) { foreach (var film in list.Films) { string[] shortDesc = film.Description.Split(' '); Array.Resize(ref shortDesc, 15); film.Description = string.Join(" ", shortDesc); } List <int> filmIds = new List <int>(); foreach (var film in list.Films) { filmIds.Add(film.Id); } // calculate votes count Dictionary <int, int> votes = _listRepository.CalculateVotes(list.Id, filmIds); foreach (var film in list.Films) { if (votes.ContainsKey(film.Id)) { film.Votes = votes[film.Id]; } else { film.Votes = 0; } } var user = new UserNameTO { UserName = _listRepository.GetListCreator(list.Id) }; list.User = user; list.Films.OrderByDescending(d => d.Votes); } } ApplicationCache <ListDescriptionTO> .FillCache(listsModel); result = listsModel; } if (userName != "") { string userId = ""; //get user id userId = _authRepository.GetUserId(userName); foreach (var list in result) { List <int> votedFilmsIds = new List <int>(); if (userId != "") { //check if user already voted for films votedFilmsIds = _listRepository.CheckIfFilmsAreVoted(list.Id, userId); // check if user already liked/dislikes list list.Voted = _listRepository.CheckIfListIsVoted(list.Id, userId); // check if user already added list to favourites list.IsFavourite = _authRepository.CheckIfFavouriteExists(list.Id, userId); foreach (var film in list.Films) { if (votedFilmsIds.Contains(film.Id)) { film.isVoted = true; } else { film.isVoted = false; } } } } } else { foreach (var list in result) { foreach (var film in list.Films) { film.isVoted = false; } list.Voted = 0; } } result.OrderByDescending(d => d.Likes); return(result); }