public async Task <Response> GetDataSerieAsync(SerieRequest request) { HttpWebRequest webRequest = CreateRequestFactory.Create(request); HttpWebResponse response = await webRequest.GetResponseAsync() as HttpWebResponse; return(CreateResponseFactory.Create <Response>(response)); }
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)); }
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); }
// 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)); }