public async Task <IHttpActionResult> GetMedias(
            int customerId,
            [FromUri] MediaSearchDto request
            )
        {
            var result = await controllerHelper.GetMedias(customerId, request);

            return(Ok(result));
        }
Beispiel #2
0
        /// <summary>
        /// Gets the medias.
        /// </summary>
        /// <param name="customerId">The customer identifier.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <PagedResult <Media> > GetMedias(int customerId, MediaSearchDto request)
        {
            Expression <Func <Media, bool> > expression = m => !m.IsDeleted && m.CustomerId == customerId;

            if (request != null)
            {
                if (request.Tags != null && request.Tags.Any())
                {
                    Expression <Func <Media, bool> > tagsExpression = PredicateBuilder.False <Media>();;

                    foreach (var tag in request.Tags)
                    {
                        tagsExpression = tagsExpression.Or(se => se.Tags.Any(t => t.Name.ToLower() == tag.ToLower()));
                    }

                    expression = expression.And(tagsExpression);
                }

                if (!string.IsNullOrEmpty(request.Q))
                {
                    var terms = request.Q.Split(' ').Where(r => !string.IsNullOrWhiteSpace(r));

                    foreach (var term in terms)
                    {
                        expression = expression.And(m => m.Name.Contains(term));
                    }
                }

                if (request.Types != null && request.Types.Any())
                {
                    var contentTypes = new List <string>();

                    foreach (var mediaType in request.Types)
                    {
                        List <string> mimeTypes;

                        if (mediaTypesToMimeTypes.TryGetValue(mediaType, out mimeTypes))
                        {
                            contentTypes.AddRange(mimeTypes);
                        }
                    }

                    expression = expression.And(m => contentTypes.Any(t => t.ToLower() == m.ContentType.ToLower()));
                }
            }

            return(await mediaRepository.FindPagedAsync(
                       expression,
                       m => m.OrderBy(e => e.ContentType).ThenBy(e => e.Name),
                       new List <Expression <Func <Media, object> > >
            {
                e => e.Tags
            },
                       request != null?request.Skip : (int?)null,
                       request != null?request.Take : (int?)null
                       ));
        }
Beispiel #3
0
        /// <summary>
        /// Gets the medias.
        /// </summary>
        /// <param name="customerId"></param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public async Task <PagedResultDto <MediaResponseDto> > GetMedias(
            int customerId,
            MediaSearchDto request
            )
        {
            var medias = await mediaService.GetMedias(customerId, request);

            return(Mapper.Map <PagedResult <Media>, PagedResultDto <MediaResponseDto> >(medias));
        }