Exemple #1
0
        private Domain.OrderedFilmRank Map(Persistence.OrderedList orderedFilmList)
        {
            var films = new List <Domain.OrderedFilm>();

            if (orderedFilmList?.OrderedFilms != null)
            {
                var mapping = orderedFilmList.OrderedFilms.ToDictionary(k => k, v => Map(v));
                foreach (var kv in mapping.Where(m => m.Key.LesserRankedFilmItems != null))
                {
                    foreach (var greater in kv.Key.LesserRankedFilmItems)
                    {
                        var domain = mapping[greater.GreaterRankedFilm];
                        kv.Value.AddHigherRankedObject(domain);
                        domain.AddLesserRankedFilm(kv.Value);
                    }
                }

                films.AddRange(mapping.Values);
            }

            var filmList = new Domain.OrderedFilmRank(
                orderedFilmList.Id,
                orderedFilmList.Completed,
                films,
                new Domain.OrderedFilm[0],
                null,
                null,
                0);

            return(filmList);
        }
Exemple #2
0
        /// <summary>
        /// Attempts to order a list. Further information might be required, which is requested in the return object.
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <OrderedFilmRank> AttemptRankOrder(int id)
        {
            var persistenceOrderedFilmList = await filmListerContext.OrderedLists
                                             .Include(ol => ol.OrderedFilms)
                                             .ThenInclude(f => f.GreaterRankedFilmItems)
                                             .Include(ol => ol.OrderedFilms)
                                             .ThenInclude(f => f.Film)
                                             .FirstOrDefaultAsync(ol => ol.Id == id);

            if (persistenceOrderedFilmList == null)
            {
                throw new ListNotFoundException(id);
            }

            Domain.OrderedFilmRank filmList;
            if (persistenceOrderedFilmList.Completed)
            {
                filmList = MapCompletedList(persistenceOrderedFilmList);
            }
            else
            {
                var orderedFilmList = Map(persistenceOrderedFilmList);
                var orderResult     = orderService.OrderFilms(orderedFilmList.SortedFilms.Where(f => !f.Ignore));

                if (orderResult.Completed)
                {
                    persistenceOrderedFilmList.Completed         = orderResult.Completed;
                    persistenceOrderedFilmList.CompletedDateTime = DateTimeOffset.UtcNow;

                    var sortedFilms = orderResult.SortedResults.ToArray();
                    for (int i = 0; i < sortedFilms.Length; i++)
                    {
                        var film            = sortedFilms[i].Film;
                        var persistenceFilm = persistenceOrderedFilmList.OrderedFilms.First(f => f.Film.Id == film.Id);
                        persistenceFilm.Ordinal = i;
                    }

                    await filmListerContext.SaveChangesAsync();

                    filmList = MapCompletedList(persistenceOrderedFilmList);
                }
                else
                {
                    var list      = orderResult.SortedResults.ToArray();
                    int?remaining = choicesRemainingService.FindChoicesRemaining(orderedFilmList);

                    filmList = new Domain.OrderedFilmRank(
                        orderedFilmList.Id,
                        orderResult.Completed,
                        list,
                        persistenceOrderedFilmList.OrderedFilms.Where(f => f.Ignored).Select(f => Map(f)).ToArray(),
                        orderResult.LeftSort,
                        orderResult.RightSort,
                        remaining);
                }
            }

            return(filmList);
        }
Exemple #3
0
        private Domain.OrderedFilmRank MapCompletedList(OrderedList persistenceOrderedFilmList)
        {
            var orderedFilmsDictionary = persistenceOrderedFilmList
                                         .OrderedFilms
                                         .OrderBy(f => f.Ordinal)
                                         .ToDictionary(k => k, v => Map(v));

            var orderedFilms = new List <Domain.OrderedFilm>();

            foreach (var kvFilm in orderedFilmsDictionary.Where(kv => !kv.Key.Ignored))
            {
                var persistenceFilm = kvFilm.Key;
                var domainFilm      = kvFilm.Value;

                if (persistenceFilm.GreaterRankedFilmItems?.Any() == true)
                {
                    try
                    {
                        var lesserRanked = persistenceFilm
                                           .GreaterRankedFilmItems
                                           .Where(f => f.GreaterRankedFilm == persistenceFilm)
                                           .Select(f => orderedFilmsDictionary[f.LesserRankedFilm])
                                           .Distinct()
                                           .ToArray();

                        domainFilm.AddLesserRankedFilms(lesserRanked);
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, "Error occurred mapping completed list.");
                    }
                }
                orderedFilms.Add(kvFilm.Value);
            }

            var filmList = new Domain.OrderedFilmRank(
                persistenceOrderedFilmList.Id,
                persistenceOrderedFilmList.Completed,
                orderedFilms.ToArray(),
                persistenceOrderedFilmList.OrderedFilms.Where(f => f.Ignored).Select(f => Map(f)).ToArray(),
                null,
                null,
                0);

            return(filmList);
        }