Exemple #1
0
        public ApiResponse <IEnumerable <ApiModels.Audio> > GetAudios(DataModels.User user, int skip, int take)
        {
            if (take <= 0)
            {
                return new ApiResponse <IEnumerable <ApiModels.Audio> >()
                       {
                           Ok   = true,
                           Data = Enumerable.Empty <ApiModels.Audio>(),
                       }
            }
            ;

            if (skip < 0)
            {
                skip = 0;
            }


            List <ApiModels.Audio> audioList = _dbContext.Audios
                                               .Where(x => x.UserId == user.Id)
                                               .OrderByDescending(x => x.Date)
                                               .Skip(skip)
                                               .Take(take)
                                               .ToList()
                                               .Select(x => ApiMapper.GetAudio(x))
                                               .ToList();

            for (int i = 0; i < audioList.Count(); i++)
            {
                AudioById audioEntity = _vkWebService.GetAudio(user.AccessToken, user.Id, audioList[i].VkId);

                string url = audioEntity?.response?.FirstOrDefault()?.url;
                audioList[i].Url = url;
            }

            return(new ApiResponse <IEnumerable <ApiModels.Audio> >()
            {
                Ok = true,
                Data = audioList.Where(x => !string.IsNullOrWhiteSpace(x.Url)),
            });
        }
Exemple #2
0
        public ApiResponse <IEnumerable <ApiModels.Audio> > GetAudios(DataModels.User user, int scheduleId, int skip, int take)
        {
            if (take <= 0)
            {
                return new ApiResponse <IEnumerable <ApiModels.Audio> >()
                       {
                           Ok   = true,
                           Data = Enumerable.Empty <ApiModels.Audio>(),
                       }
            }
            ;

            skip = skip <= 0 ? 1 : skip + 1;

            IEnumerable <int> pageNumbers = Enumerable.Range(skip, take);

            var scheduleQry =
                (from s in _dbContext.Schedules
                 where s.Id == scheduleId
                 join sr in _dbContext.ScheduleRows on s.Id equals sr.ScheduleId
                 select new
            {
                Schedule = s,
                ScheduleRow = sr
            } into scheduleRows
                 group scheduleRows by scheduleRows.ScheduleRow.UserId into _s
                 select new
            {
                UserId = _s.Key,
                ScheduleRows = _s,
            } into userRows
                 from pn in pageNumbers
                 select userRows.ScheduleRows.Select(x => new
            {
                GroupIndex = x.ScheduleRow.GroupIndex
                             + (userRows.ScheduleRows.Count() * (pn - 1)),
                Order = x.ScheduleRow.Order
                        + (x.Schedule.BlockSize * (pn - 1)),
                UserId = x.ScheduleRow.UserId,
            }))
                .SelectMany(x => x);

            List <ApiModels.Audio> audioList =
                (from s in scheduleQry

                 join a in _dbContext.Audios on
                 new { index = s.GroupIndex, userId = s.UserId }
                 equals new { index = a.Order, userId = a.UserId }

                 join ma in _dbContext.MixAudios on
                 new { index = s.GroupIndex, userId = s.UserId }
                 equals new { index = ma.Order, userId = ma.UserId } into _ma

                 from ma in _ma.DefaultIfEmpty()

                 join m in _dbContext.Audios on
                 new { audioId = ma.AudioId, userId = ma.UserId }
                 equals new { audioId = m.Id, userId = m.UserId } into _m
                 from m in _m.DefaultIfEmpty()

                 where ma == null || ma.ScheduleId == scheduleId
                 select new
            {
                Audio = m ?? a,
                Order = s.Order,
            })
                .OrderBy(x => x.Order)
                .ToList()
                .Select(x => ApiMapper.GetAudio(x.Audio))
                .ToList();

            for (int i = 0; i < audioList.Count(); i++)
            {
                AudioById audioEntity = _vkWebService.GetAudio(user.AccessToken, user.Id, audioList[i].VkId);

                string url = audioEntity?.response?.FirstOrDefault()?.url;
                audioList[i].Url = url;
            }

            return(new ApiResponse <IEnumerable <ApiModels.Audio> >()
            {
                Ok = true,
                Data = audioList.Where(x => !string.IsNullOrWhiteSpace(x.Url)),
            });
        }