using DivanRazor.Utils; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.OutputCaching; using Microsoft.Extensions.Configuration; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using RMuseum.Models.FAQ; using RMuseum.Models.Divan.ViewModels; using System.Collections.Generic; using System.Net.Http; using System.Threading.Tasks; namespace DivanRazor.Pages { [OutputCache(PolicyName = "DivanPublicPage")] public class FAQModel : LoginPartialEnabledPageModel { private readonly PoetCacheService _poetCache; public string LastError { get; set; } public List Poets { get; set; } public List PinnedItemsCategories { get; set; } public FAQItem Question { get; set; } public async Task OnGetAsync() { var maintenanceResult = TryGetMaintenanceModeResult(); if (maintenanceResult != null) { return maintenanceResult; } ViewData["Title"] = $"دیوان » عام سوالات"; InitializeCommonPageState(); var (poetsOk, poets, poetsError) = await _poetCache.GetPoetsAsync(EditorCacheBypass); if (!poetsOk) { LastError = poetsError; return Page(); } Poets = poets; if (!string.IsNullOrEmpty(Request.Query["id"])) { var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/faq/{Request.Query["id"]}"); if (!response.IsSuccessStatusCode) { LastError = await ReadErrorMessageAsync(response); if (string.IsNullOrEmpty(LastError)) { LastError = $"سوال کی معلومات لانے میں خرابی - خرابی کا کوڈ = {response.StatusCode}"; } return Page(); } Question = JsonConvert.DeserializeObject(await response.Content.ReadAsStringAsync()); ViewData["Title"] += $" » {Question.Question}"; } else { var response = await _httpClient.GetAsync($"{APIRoot.Url}/api/faq/pinned"); if (!response.IsSuccessStatusCode) { LastError = await ReadErrorMessageAsync(response); return Page(); } PinnedItemsCategories = JArray.Parse(await response.Content.ReadAsStringAsync()).ToObject>(); } return Page(); } /// /// constructor /// public FAQModel(HttpClient httpClient, IConfiguration configuration, PoetCacheService poetCache) : base(httpClient, configuration) { _poetCache = poetCache; } } }