diff --git a/src/Services/c-gen/O2NextGen.CertificateManagement.Application/Controllers/Features/PublishBase/PublishBaseController.cs b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/Controllers/Features/PublishBase/PublishBaseController.cs new file mode 100644 index 00000000..4c46f675 --- /dev/null +++ b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/Controllers/Features/PublishBase/PublishBaseController.cs @@ -0,0 +1,66 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using O2NextGen.CertificateManagement.Domain.Entities; +using O2NextGen.CertificateManagement.Infrastructure.Data; + +namespace O2NextGen.CertificateManagement.Application.Controllers.Features.PublishBase; + +[ApiVersion("1.0")] +[Route("api/v{v:apiVersion}/[controller]")] +[ApiController] +public class PublishBaseController: ControllerBase +{ + private readonly CGenDbContext _context; + + public PublishBaseController(CGenDbContext context) + { + _context = context; + } + + [HttpGet] + public async Task Items(int? categoryTypeId, [FromQuery]int pageSize = 6, [FromQuery]int pageIndex = 0) + { + var rootCategories = (IQueryable)_context.Categories; + var exist = rootCategories.FirstOrDefault(_ => _.Id == categoryTypeId); + if (exist == null) + throw new Exception("not found"); + var root = (IQueryable)_context.Certificates; + + if (categoryTypeId.HasValue) + { + root = root.Where(ci => ci.CategoryId == categoryTypeId); + } + + var totalItems = await root + .LongCountAsync(); + + var itemsOnPage = await root + .Skip(pageSize * pageIndex) + .Take(pageSize) + .ToListAsync(); + + var model = new PaginatedItemsViewModel( + pageIndex, pageSize, totalItems, itemsOnPage); + + return Ok(model); + } +} + +public class PaginatedItemsViewModel where TEntity : class +{ + public int PageIndex { get; private set; } + + public int PageSize { get; private set; } + + public long Count { get; private set; } + + public IEnumerable Data { get; private set; } + + public PaginatedItemsViewModel(int pageIndex, int pageSize, long count, IEnumerable data) + { + this.PageIndex = pageIndex; + this.PageSize = pageSize; + this.Count = count; + this.Data = data; + } +} \ No newline at end of file diff --git a/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.Development.json b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.Development.json index dabf758d..66cbe657 100644 --- a/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.Development.json +++ b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.Development.json @@ -10,7 +10,7 @@ } }, "UrlsConfig": { - "IdentityUrl": "https://localhost:5000" + "IdentityUrl": "https://auth.o2nextgen.com" } } diff --git a/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.json b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.json index 7aec0a88..799d8419 100644 --- a/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.json +++ b/src/Services/c-gen/O2NextGen.CertificateManagement.Application/appsettings.json @@ -5,7 +5,7 @@ }, "ConnectionString": "Server=52.185.108.164;Initial Catalog=O2NextGen.CertificateDb;Persist Security Info=False;User ID=sa;Password=yourStrong(!)Password;Connection Timeout=30;", "UrlsConfig": { - "IdentityUrl": "https://localhost:5000" + "IdentityUrl": "hhttps://auth.o2nextgen.com" }, "Logging": { "LogLevel": { diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Controllers/PublishBaseController.cs b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Controllers/PublishBaseController.cs new file mode 100644 index 00000000..1204c0b0 --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Controllers/PublishBaseController.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Rendering; +using PFRCentr.App.MvcClient.Models.Dto; +using PFRCentr.App.MvcClient.Services; + +namespace PFRCentr.App.MvcClient.Controllers; +public class PaginationInfo +{ + public int TotalItems { get; set; } + public int ItemsPerPage { get; set; } + public int ActualPage { get; set; } + public int TotalPages { get; set; } + public string Previous { get; set; } + public string Next { get; set; } +} +public class CatalogIndexViewModel +{ + public IEnumerable CatalogItems { get; set; } + public IEnumerable Types { get; set; } + + public int? BrandFilterApplied { get; set; } + public int? TypesFilterApplied { get; set; } + public PaginationInfo PaginationInfo { get; set; } +} + +public class PublishBaseController: Controller +{ + private readonly IPublishBase _publishBase; + + public PublishBaseController(IPublishBase publishBase) + { + _publishBase = publishBase; + } + public async Task Index(int? TypesFilterApplied, int? page) + { + int itemsPage=10 ; + var catalog = await _publishBase.GetItems(page ?? 0, itemsPage, TypesFilterApplied); + var vm = new CatalogIndexViewModel() + { + CatalogItems = catalog.Data, + //Types = await _publishBase.GetTypes(), + TypesFilterApplied = TypesFilterApplied ?? 0, + PaginationInfo = new PaginationInfo() + { + ActualPage = page ?? 0, + ItemsPerPage = itemsPage , + TotalItems = catalog.Count, + TotalPages = (int)Math.Ceiling(((decimal)catalog.Count / itemsPage)) + } + }; + + vm.PaginationInfo.Next = (vm.PaginationInfo.ActualPage == vm.PaginationInfo.TotalPages - 1) ? "is-disabled" : ""; + vm.PaginationInfo.Previous = (vm.PaginationInfo.ActualPage == 0) ? "is-disabled" : ""; + + return View(vm); + } +} \ No newline at end of file diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Models/Dto/PublishCertificateDto.cs b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Models/Dto/PublishCertificateDto.cs new file mode 100644 index 00000000..623a4e47 --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Models/Dto/PublishCertificateDto.cs @@ -0,0 +1,22 @@ +namespace PFRCentr.App.MvcClient.Models.Dto; + +public class Catalog +{ + public int PageIndex { get; set; } + public int PageSize { get; set; } + public int Count { get; set; } + public List Data { get; set; } +} +public class PublishCertificateDto +{ + public string OwnerAccountId { get; set; } + public string CustomerId { get; set; } + public long ExpiredDate { get; set; } + public long PublishDate { get; set; } + public string CreatorId { get; set; } + public string PublishCode { get; set; } + public bool IsVisible { get; set; } + + public long CategoryId { get; set; } + public long Id { get; set; } +} \ No newline at end of file diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Program.cs b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Program.cs index ce2adfa2..d9e0229e 100644 --- a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Program.cs +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Program.cs @@ -34,6 +34,9 @@ builder.Services.AddHttpClient(); builder.Services.AddScoped(); + +builder.Services.AddTransient(); + builder.Services.AddAuthentication(option => { option.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/IPublishBase.cs b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/IPublishBase.cs new file mode 100644 index 00000000..b16ca3d5 --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/IPublishBase.cs @@ -0,0 +1,10 @@ +using Microsoft.AspNetCore.Mvc.Rendering; +using PFRCentr.App.MvcClient.Models.Dto; + +namespace PFRCentr.App.MvcClient.Services; + +public interface IPublishBase: IBaseService +{ + Task GetItems(int page, int take, long? type); + Task> GetTypes(); +} \ No newline at end of file diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/PublishBase.cs b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/PublishBase.cs new file mode 100644 index 00000000..e597bca8 --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Services/PublishBase.cs @@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Mvc.Rendering; +using PFRCentr.App.MvcClient.Models.Dto; + +namespace PFRCentr.App.MvcClient.Services; + +public class PublishBase : BaseService,IPublishBase +{ + + + public PublishBase(IHttpClientFactory httpClient) : base(httpClient) + { + } + + + // public Task GetItems(int page, int take, int? brand, int? type) + // { + // throw new NotImplementedException(); + // } + + public async Task GetItems(int page, int take, long? type) + { + + return await SendAsync( + new ApiRequest + { + ApiType = SD.ApiType.GET, + Url = SD.CGenApiBase +"/api/v1.0/PublishBase?categoryTypeId=2861&pageSize=14&pageIndex=0", + Token = "" + }); + } + + public Task> GetTypes() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/PublishBase/Index.cshtml b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/PublishBase/Index.cshtml new file mode 100644 index 00000000..b82ee682 --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/PublishBase/Index.cshtml @@ -0,0 +1,39 @@ +@model PFRCentr.App.MvcClient.Controllers.CatalogIndexViewModel + +@{ + ViewBag.Title = "title"; + Layout = "_Layout"; +} + +

title

+ +
+ @if (Model.CatalogItems.Count() > 0) + { + @Html.Partial("_Pagination", Model.PaginationInfo) + +
+ @foreach (var catalogItem in Model.CatalogItems) + { +
+ + + + + +
+ @*
*@ + @* @Html.Partial("_product", catalogItem) *@ + @*
*@ + } +
+ + @Html.Partial("_Pagination", Model.PaginationInfo) + } + else + { +
+ THERE ARE NO RESULTS THAT MATCH YOUR SEARCH +
+ } +
diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Layout.cshtml b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Layout.cshtml index b3dbbb28..5f8b0efa 100644 --- a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Layout.cshtml +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Layout.cshtml @@ -37,9 +37,9 @@ - @* *@ + @* *@ @@ -77,7 +77,7 @@ © 2023 - O2Bionics LLC - Privacy - diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Pagination.cshtml b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Pagination.cshtml new file mode 100644 index 00000000..0bfc5a1e --- /dev/null +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/Views/Shared/_Pagination.cshtml @@ -0,0 +1,31 @@ +@model PFRCentr.App.MvcClient.Controllers.PaginationInfo + +
+
+
+ +
+
+
\ No newline at end of file diff --git a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/appsettings.Development.json b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/appsettings.Development.json index be865549..17f5793a 100644 --- a/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/appsettings.Development.json +++ b/src/WebApps/PFRCentr.Mvc/src/PFRCentr.App.MvcClient/appsettings.Development.json @@ -7,7 +7,8 @@ }, "Services": { "CallBackUrl":"https://localhost:5003", - "AuthApiUrl": "https://localhost:5000", + "AuthApiUrl": "https://auth.o2nextgen.com", +// "AuthApiUrl": "https://localhost:5000", //"CGenApiUrl":"https://cgen-api.o2nextgen.com", "CGenApiUrl":"https://localhost:11001" }