Exemplo n.º 1
0
        public async Task <Response> GetDataSerieAsync(SerieRequest request)
        {
            HttpWebRequest  webRequest = CreateRequestFactory.Create(request);
            HttpWebResponse response   = await webRequest.GetResponseAsync() as HttpWebResponse;

            return(CreateResponseFactory.Create <Response>(response));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetEditions(SerieRequest request)
        {
            var editions = await _editionsService.GetEditionsBySerieAsync(request);

            if (editions == null)
            {
                return(this.ErrorObject(404, $"Serie (id: {request.SerieId}) editions are not found"));
            }

            return(this.PageObject(editions.Values, editions.TotalRows, request.Limit, request.Offset));
        }
Exemplo n.º 3
0
        internal static HttpWebRequest Create(SerieRequest request)
        {
            string url   = string.Format(request.Url, request.SerieID);
            string token = request.Token;

            HttpWebRequest webRequest = HttpWebRequest.Create(url) as HttpWebRequest;

            webRequest.Accept = "application/json";
            webRequest.Headers["Bmx-Token"] = token;

            return(webRequest);
        }
Exemplo n.º 4
0
        // TODO: read NameSort from database
        // TODO: read fields: Correct, Publishers
        // TODO: read edition type from service
        public async Task <ApiObject <EditionResponse> > GetEditionsBySerieAsync(SerieRequest request)
        {
            var editions = await _editionsRepository.GetEditionsBySerieAsync(request.SerieId);

            var regexAuthors     = new Regex(@"(?:\[autor\=(?<id>\d+)]|)(?<name>[A-zА-я\s]+)(?:\[\/autor\]|)(?:,|$)", RegexOptions.Compiled);
            var regexDescription = new Regex(@"\[(?:\/|)[A-zА-я0-9=:]+\]", RegexOptions.Compiled);

            foreach (var edition in editions)
            {
                var matches = regexAuthors.Matches(edition.Authors);
                edition.Authors = null;
                edition.Persons = new List <PersonResponse>();
                foreach (Match match in matches)
                {
                    PersonResponse person = new PersonResponse();
                    person.PersonId = match.Groups["id"].Success ? int.Parse(match.Groups["id"].Value) : 0;
                    person.Name     = match.Groups["name"].Success ? match.Groups["name"].Value.Trim() : string.Empty;

                    if (person.Name == "Антология")
                    {
                        person.NameSort = string.Empty;
                    }

                    if (true)
                    {
                        person.NameSort = string.Join(" ", person.Name.Split(' ').Reverse());
                    }
                    edition.Persons.Add(person);
                }

                edition.Description = regexDescription.Replace(edition.Description, "");
            }

            // var personIds = editions.SelectMany(c => c.Persons.Select(p => p.Id)).Distinct();

            IOrderedEnumerable <EditionResponse> sortedEditions;

            switch (request.Sort)
            {
            case EditionsSort.Name:
                sortedEditions = editions.OrderBy(c => c.Name).ThenBy(c => c.SerieSort).ThenBy(c => c.Year);
                break;

            case EditionsSort.Authors:
                sortedEditions = editions.OrderBy(c => string.Join(", ", c.Persons.Select(p => p.NameSort))).ThenBy(c => c.SerieSort).ThenBy(c => c.Year);
                break;

            case EditionsSort.Year:
                sortedEditions = editions.OrderBy(c => c.Year).ThenBy(c => c.SerieSort).ThenBy(c => c.Name);
                break;

            default:
                sortedEditions = editions.OrderByDescending(c => c.Year).ThenBy(c => c.SerieSort);
                break;
            }

            List <EditionResponse> resultEditions;

            if (request.Limit > 0 && request.Offset > 0)
            {
                resultEditions = sortedEditions.Skip(request.Offset).Take(request.Limit).ToList();
            }
            else
            {
                resultEditions = sortedEditions.Take(request.Limit).ToList();
            }

            return(new ApiObject <EditionResponse>(resultEditions, editions.Count));
        }