feat(AddBanner) , feat(AddCatelog) , feat(AddPersonalizationPage)

subProduct
Amir Hossein Khademi 2024-08-06 14:26:39 +03:30
parent e9764c6cd4
commit 5524cb4e43
3 changed files with 78 additions and 1 deletions

View File

@ -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 public class WebSiteController : ICarterModule
{ {
@ -9,8 +12,38 @@ public class WebSiteController : ICarterModule
group.MapGet("/navbar", GetNavBarItemsAsync) group.MapGet("/navbar", GetNavBarItemsAsync)
.WithDisplayName("Get NavBar Items") .WithDisplayName("Get NavBar Items")
.HasApiVersion(1.0); .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<IResult> GetNavBarItemsAsync([FromServices] IMediator mediator, CancellationToken cancellationToken) private async Task<IResult> GetNavBarItemsAsync([FromServices] IMediator mediator, CancellationToken cancellationToken)
=> TypedResults.Ok(await mediator.Send(new GetWebSiteNavBarCommand(),cancellationToken)); => TypedResults.Ok(await mediator.Send(new GetWebSiteNavBarCommand(),cancellationToken));
private async Task<IResult> 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<IResult> 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);
}
} }

View File

@ -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,
}

View File

@ -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<BannerItemModel> Banners { get; set; } = new();
public List<CatalogItemModel> Catalog { get; set; } = new();
}