using System.Text.Json; using CMSMicroservice.Protobuf.Protos.SitePageSettings; namespace FrontOffice.Main.Utilities; /// /// سرویس ساده‌شده مدیریت صفحات سایت /// ۴ صفحه ثابت: landing, about, contact, licenses /// public class SitePageSettingsService { private readonly SitePageSettingsContract.SitePageSettingsContractClient _client; public SitePageSettingsService(SitePageSettingsContract.SitePageSettingsContractClient client) { _client = client; } /// /// دریافت تنظیمات صفحه با کلید /// public async Task GetPageAsync(string pageKey) { try { var response = await _client.GetPageSettingsAsync( new GetPageSettingsRequest { PageKey = pageKey }); if (response == null || response.Id <= 0) return null; return MapToDto(response); } catch (Exception ex) { #if DEBUG Console.WriteLine($"SitePageSettingsService.GetPageAsync error: {ex.Message}"); #endif return null; } } private static PageSettingsDto MapToDto(PageSettingsResponse response) => new() { Id = response.Id, PageKey = response.PageKey, Title = response.Title, MetaDescription = response.MetaDescription, HeroTitle = response.HeroTitle, HeroSubtitle = response.HeroSubtitle, HeroImagePath = response.HeroImagePath, IsActive = response.IsActive, SettingsJson = response.SettingsJson, Images = response.Images.Select(i => new PageSettingsImageDto { Id = i.Id, ImageGroup = i.ImageGroup, Title = i.Title, Subtitle = i.Subtitle, Description = i.Description, ImagePath = i.ImagePath, ThumbnailPath = i.ThumbnailPath, LinkUrl = i.LinkUrl, IconName = i.IconName, SortOrder = i.SortOrder, IsActive = i.IsActive }).OrderBy(i => i.SortOrder).ToList() }; } // ── DTOs ── public class PageSettingsDto { public long Id { get; set; } public string PageKey { get; set; } = string.Empty; public string Title { get; set; } = string.Empty; public string? MetaDescription { get; set; } public string? HeroTitle { get; set; } public string? HeroSubtitle { get; set; } public string? HeroImagePath { get; set; } public bool IsActive { get; set; } public string? SettingsJson { get; set; } public List Images { get; set; } = new(); /// /// دریافت تصاویر یک گروه خاص /// public List GetImages(string group) => Images.Where(i => i.ImageGroup == group && i.IsActive) .OrderBy(i => i.SortOrder).ToList(); /// /// دریافت تنظیمات JSON به عنوان یک نوع مشخص /// public T? GetSettings() where T : class { if (string.IsNullOrWhiteSpace(SettingsJson)) return null; try { return JsonSerializer.Deserialize(SettingsJson, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); } catch { return null; } } } public class PageSettingsImageDto { public long Id { get; set; } public string ImageGroup { get; set; } = string.Empty; public string? Title { get; set; } public string? Subtitle { get; set; } public string? Description { get; set; } public string ImagePath { get; set; } = string.Empty; public string? ThumbnailPath { get; set; } public string? LinkUrl { get; set; } public string? IconName { get; set; } public int SortOrder { get; set; } public bool IsActive { get; set; } }