diff --git a/Netina.Api/Controllers/WebSiteController.cs b/Netina.Api/Controllers/WebSiteController.cs index eff8bdc..f0af642 100644 --- a/Netina.Api/Controllers/WebSiteController.cs +++ b/Netina.Api/Controllers/WebSiteController.cs @@ -1,4 +1,7 @@ -namespace Netina.Api.Controllers; +using Netina.Domain.Enums; +using Netina.Domain.MartenEntities.Settings; + +namespace Netina.Api.Controllers; public class WebSiteController : ICarterModule { @@ -9,8 +12,38 @@ public class WebSiteController : ICarterModule group.MapGet("/navbar", GetNavBarItemsAsync) .WithDisplayName("Get NavBar Items") .HasApiVersion(1.0); + + group.MapGet("/catelog", GetCatalogAsync) + .WithDisplayName("Get Catalog Items") + .HasApiVersion(1.0); + + group.MapGet("/banner", GetBannerAsync) + .WithDisplayName("Get Banner Items") + .HasApiVersion(1.0); } private async Task GetNavBarItemsAsync([FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetWebSiteNavBarCommand(),cancellationToken)); + + private async Task GetCatalogAsync([FromServices] ISettingService settingService, CancellationToken cancellationToken) + { + var setting = await settingService.GetSettingAsync(nameof(PersonalizationSetting), cancellationToken); + if (setting is PersonalizationSetting personalizationSetting) + { + return TypedResults.Ok(personalizationSetting.Catalog); + } + + throw new BaseApiException(ApiResultStatusCode.BadRequest, "Catalogs not found"); + } + + private async Task GetBannerAsync([FromQuery]BannerSection? section,[FromServices] ISettingService settingService, CancellationToken cancellationToken) + { + var setting = await settingService.GetSettingAsync(nameof(PersonalizationSetting), cancellationToken); + if (setting is not PersonalizationSetting personalizationSetting) + throw new BaseApiException(ApiResultStatusCode.BadRequest, "Catalogs not found"); + if (section != null) + return TypedResults.Ok(personalizationSetting.Banners.Where(b => b.Section == section)); + return TypedResults.Ok(personalizationSetting.Banners); + + } } \ No newline at end of file diff --git a/Netina.Domain/Enums/BannerSection.cs b/Netina.Domain/Enums/BannerSection.cs new file mode 100644 index 0000000..9fe1574 --- /dev/null +++ b/Netina.Domain/Enums/BannerSection.cs @@ -0,0 +1,15 @@ +namespace Netina.Domain.Enums; + +public enum BannerSection +{ + [Display(Name = "هیچ کدام")] + None = 0, + [Display(Name = "بنر تخفیف بالای سایت")] + TopOff = 1, + [Display(Name = "بنر تخفیف بالای سایت - موبایل")] + TopOffSm = 2, + [Display(Name = "بنر اسلایدری")] + Slider = 10, + [Display(Name = "بنر اسلایدری - موبایل")] + SliderSm = 11, +} \ No newline at end of file diff --git a/Netina.Domain/MartenEntities/Settings/PersonalizationSetting.cs b/Netina.Domain/MartenEntities/Settings/PersonalizationSetting.cs new file mode 100644 index 0000000..6776bb9 --- /dev/null +++ b/Netina.Domain/MartenEntities/Settings/PersonalizationSetting.cs @@ -0,0 +1,29 @@ +namespace Netina.Domain.MartenEntities.Settings; + +public class BannerItemModel +{ + public string ImageLocation { get; set; } = string.Empty; + public string Title { get; set; } = string.Empty; + public string Link { get; set; } = string.Empty; + public string Description { get; set; } = string.Empty; + public BannerSection Section { get; set; } +} + +public class CatalogItemModel +{ + public Guid Id { get; set; } + public string PersianName { get; set; } = string.Empty; + public string EnglishName { get; set; } = string.Empty; + public string Query { get; set; } = string.Empty; + public string ImageLocation { get; set; } = string.Empty; + public int Row { get; set; } + public bool IsMain { get; set; } + public Guid ParentId { get; set; } + public string ParentName { get; set; } = string.Empty; +} + +public class PersonalizationSetting +{ + public List Banners { get; set; } = new(); + public List Catalog { get; set; } = new(); +} \ No newline at end of file