Skip to content

Commit

Permalink
[PackageManagement][Hai] Create method search using HTTPGET
Browse files Browse the repository at this point in the history
  • Loading branch information
HaiHungNguyenn committed Feb 19, 2024
1 parent 8ded427 commit 2268f84
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
10 changes: 9 additions & 1 deletion Domus.Api/Controllers/PackagesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Domus.Service.Interfaces;
using Domus.Service.Models.Requests.Base;
using Domus.Service.Models.Requests.OfferedPackages;
using Domus.Service.Models.Requests.Products;
using Microsoft.AspNetCore.Mvc;

namespace Domus.Api.Controllers;
Expand Down Expand Up @@ -66,11 +67,18 @@ public async Task<IActionResult> DeletePackage(Guid id)
// await _packageService.GetPackageByName(name).ConfigureAwait(false)).ConfigureAwait(false);
// }
[HttpPost("search")]
public async Task<IActionResult> SearchProducts(BaseSearchRequest request)
public async Task<IActionResult> SearchProducts([FromForm] BaseSearchRequest request)
{
return await ExecuteServiceLogic(
async () => await _packageService.SearchPackages(request).ConfigureAwait(false)
).ConfigureAwait(false);
}
[HttpGet("search")]
public async Task<IActionResult> SearchProductsUsingGetRequest([FromQuery] SearchProductsUsingGetRequest request)
{
return await ExecuteServiceLogic(
async () => await _packageService.SearchPackagesUsingGet(request).ConfigureAwait(false)
).ConfigureAwait(false);
}
}

28 changes: 28 additions & 0 deletions Domus.Service/Implementations/PackageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using Domus.Service.Models;
using Domus.Service.Models.Requests.Base;
using Domus.Service.Models.Requests.OfferedPackages;
using Domus.Service.Models.Requests.Products;
using Microsoft.EntityFrameworkCore;

namespace Domus.Service.Implementations;
Expand Down Expand Up @@ -186,4 +187,31 @@ public async Task<ServiceActionResult> SearchPackages(BaseSearchRequest request)
return new ServiceActionResult(true) { Data = paginatedResult };
}

public async Task<ServiceActionResult> SearchPackagesUsingGet(SearchProductsUsingGetRequest request)
{
var packages = await (await _packageRepository.FindAsync(p => !p.IsDeleted))
.ProjectTo<DtoPackage>(_mapper.ConfigurationProvider)
.ToListAsync();

if (!string.IsNullOrEmpty(request.SearchField))
{
packages = packages
.Where(p => ReflectionHelper.GetStringValueByName(typeof(DtoPackage), request.SearchField, p).Contains(request.SearchValue ?? string.Empty, StringComparison.OrdinalIgnoreCase))
.ToList();
}
if (!string.IsNullOrEmpty(request.SortField))
{
Expression<Func<DtoPackage, object>> orderExpr = p => ReflectionHelper.GetValueByName(typeof(DtoPackage), request.SortField, p);
packages = request.Descending
? packages.OrderByDescending(orderExpr.Compile()).ToList()
: packages.OrderBy(orderExpr.Compile()).ToList();
}

var paginatedResult = PaginationHelper.BuildPaginatedResult(packages, request.PageSize, request.PageIndex);
var finalProducts = (IEnumerable<DtoPackage>)paginatedResult.Items!;

paginatedResult.Items = finalProducts;

return new ServiceActionResult(true) { Data = paginatedResult };
}
}
2 changes: 2 additions & 0 deletions Domus.Service/Interfaces/IPackageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Domus.Service.Models;
using Domus.Service.Models.Requests.Base;
using Domus.Service.Models.Requests.OfferedPackages;
using Domus.Service.Models.Requests.Products;

namespace Domus.Service.Interfaces;

Expand All @@ -15,4 +16,5 @@ public interface IPackageService : IAutoRegisterable
Task<ServiceActionResult> DeletePackage(Guid packageId);
Task<ServiceActionResult> GetPackageByName(string name);
Task<ServiceActionResult> SearchPackages(BaseSearchRequest request);
Task<ServiceActionResult> SearchPackagesUsingGet(SearchProductsUsingGetRequest request);
}

0 comments on commit 2268f84

Please sign in to comment.