using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RMuseum.Models.Ganjoor.ViewModels; namespace GanjooRazor.Pages { public class MapModel : PageModel { public string LastError { get; set; } private async Task> _PreparePoets() { var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/poets"); if (!response.IsSuccessStatusCode) { LastError = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); return new List(); } var poets = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject>(); var poetsWithBirthPlaces = poets.Where(p => !string.IsNullOrEmpty(p.BirthPlace)).ToList(); foreach (var poet in poetsWithBirthPlaces) { poet.ImageUrl = $"{APIRoot.InternetUrl}{poet.ImageUrl}"; } return poetsWithBirthPlaces; } public List PoetGroupsWithBirthPlaces { get; set; } private async Task _PreparePoetGroups() { var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/ganjoor/centuries"); if (!response.IsSuccessStatusCode) { LastError = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); return; } var poetGroups = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject>(); PoetGroupsWithBirthPlaces = new List(); PoetGroupsWithBirthPlaces.Add ( new GanjoorCenturyViewModel() { Id = 0, Name = "همهٔ اعصار", ShowInTimeLine = true, Poets = await _PreparePoets() } ); GanjoorCenturyViewModel prePoetGroup = null; foreach (var poetGroup in poetGroups) { if (poetGroup.Id == 0) continue; poetGroup.Poets = poetGroup.Poets.Where(p => !string.IsNullOrEmpty(p.BirthPlace)).ToList(); if (poetGroup.Poets.Count > 0) { foreach (var poet in poetGroup.Poets) { poet.ImageUrl = $"{APIRoot.InternetUrl}{poet.ImageUrl}"; } if (!poetGroup.ShowInTimeLine && prePoetGroup != null) { prePoetGroup.Poets.AddRange(poetGroup.Poets); } else { PoetGroupsWithBirthPlaces.Add(poetGroup); prePoetGroup = poetGroup; } } } } public async Task OnGetAsync() { if (bool.Parse(Configuration["MaintenanceMode"])) { return StatusCode(503); } ViewData["TrackingScript"] = Configuration["TrackingScript"] != null && string.IsNullOrEmpty(Request.Cookies["Token"]) ? Configuration["TrackingScript"].Replace("loggedon", "") : Configuration["TrackingScript"]; await _PreparePoetGroups(); return Page(); } /// /// HttpClient instance /// private readonly HttpClient _httpClient; /// /// configration file reader (appsettings.json) /// private readonly IConfiguration Configuration; public MapModel(HttpClient httpClient, IConfiguration configuration) { _httpClient = httpClient; Configuration = configuration; } } }