using Microsoft.AspNetCore.Mvc.RazorPages; using TaxBaik.Application.Seasonal; using TaxBaik.Application.Services; using TaxBaik.Domain.Entities; namespace TaxBaik.Web.Pages; public class IndexModel : PageModel { private readonly BlogService _blogService; private readonly SeasonalMarketingService _seasonalMarketingService; private readonly AnnouncementService _announcementService; private readonly FaqService _faqService; public List RecentPosts { get; set; } = []; public List SeasonalPosts { get; set; } = []; public CurrentSeasonDto? CurrentSeason { get; set; } public List ActiveAnnouncements { get; set; } = []; public List ActiveFaqs { get; set; } = []; public IndexModel( BlogService blogService, SeasonalMarketingService seasonalMarketingService, AnnouncementService announcementService, FaqService faqService) { _blogService = blogService; _seasonalMarketingService = seasonalMarketingService; _announcementService = announcementService; _faqService = faqService; } public async Task OnGetAsync() { CurrentSeason = _seasonalMarketingService.GetCurrentSeason(); var announcementsTask = LoadSafeAsync(() => _announcementService.GetActiveAsync()); var faqsTask = LoadSafeAsync(() => _faqService.GetActiveAsync()); var blogTask = LoadBlogAsync(); await Task.WhenAll(announcementsTask, faqsTask, blogTask); ActiveAnnouncements = (await announcementsTask)?.ToList() ?? []; ActiveFaqs = (await faqsTask)?.ToList() ?? []; } private async Task LoadBlogAsync() { try { if (CurrentSeason is not null && !string.IsNullOrEmpty(CurrentSeason.RelatedCategorySlug)) { var (seasonal, latest) = await _blogService.GetSeasonalPostsAsync( CurrentSeason.RelatedCategorySlug, seasonalCount: 2, totalCount: 3); SeasonalPosts = seasonal.ToList(); RecentPosts = latest.ToList(); } else { var (posts, _) = await _blogService.GetPublishedPagedAsync(1, 3); RecentPosts = posts.ToList(); } } catch { RecentPosts = []; SeasonalPosts = []; } } private static async Task?> LoadSafeAsync(Func>> loader) { try { return await loader(); } catch { return null; } } }