Skip to content

Commit

Permalink
Merge pull request #55 from SWD392-Domus/feature/package-management
Browse files Browse the repository at this point in the history
[PackageManagement][Hai] Update new method for pagin
  • Loading branch information
HaiHungNguyenn authored Feb 19, 2024
2 parents b112954 + 7c82bf1 commit 8ded427
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 6 deletions.
15 changes: 11 additions & 4 deletions Domus.Api/Controllers/PackagesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,18 @@ public async Task<IActionResult> DeletePackage(Guid id)
await _packageService.DeletePackage(id).ConfigureAwait(false)).ConfigureAwait(false);
}

[HttpGet]
public async Task<IActionResult> GetPackageByName(string name)
// [HttpGet]
// public async Task<IActionResult> GetPackageByName(string name)
// {
// return await ExecuteServiceLogic(async () =>
// await _packageService.GetPackageByName(name).ConfigureAwait(false)).ConfigureAwait(false);
// }
[HttpPost("search")]
public async Task<IActionResult> SearchProducts(BaseSearchRequest request)
{
return await ExecuteServiceLogic(async () =>
await _packageService.GetPackageByName(name).ConfigureAwait(false)).ConfigureAwait(false);
return await ExecuteServiceLogic(
async () => await _packageService.SearchPackages(request).ConfigureAwait(false)
).ConfigureAwait(false);
}
}

2 changes: 1 addition & 1 deletion Domus.Common/Helpers/DataAccessHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ private static IConfiguration Configuration
}

public static void InitConfiguration(IConfiguration configuration)
{
{
_configuration = configuration;
}

Expand Down
56 changes: 55 additions & 1 deletion Domus.Service/Implementations/PackageService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using AutoMapper;
using AutoMapper.QueryableExtensions;
using Domus.Common.Helpers;
Expand All @@ -10,7 +11,6 @@
using Domus.Service.Models;
using Domus.Service.Models.Requests.Base;
using Domus.Service.Models.Requests.OfferedPackages;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace Domus.Service.Implementations;
Expand Down Expand Up @@ -132,4 +132,58 @@ public async Task<ServiceActionResult> GetPackageByName(string name)
Data = packages.ProjectTo<DtoPackage>(_mapper.ConfigurationProvider)
};
}
public async Task<ServiceActionResult> SearchPackages(BaseSearchRequest request)
{
var packages = (await _packageRepository.FindAsync(pk => !pk.IsDeleted)).ToList();

foreach (var searchInfo in request.DisjunctionSearchInfos)
{
packages = packages
.Where(p => ReflectionHelper.GetStringValueByName(typeof(Package), searchInfo.FieldName, p)
.Contains(searchInfo.Keyword, StringComparison.OrdinalIgnoreCase))
.ToList();
}

if (request.ConjunctionSearchInfos.Any())
{
var initialSearchInfo = request.ConjunctionSearchInfos.First();
Expression<Func<Package, bool>> conjunctionWhere = p => ReflectionHelper.GetStringValueByName(typeof(Package), initialSearchInfo.FieldName, p)
.Contains(initialSearchInfo.Keyword, StringComparison.OrdinalIgnoreCase);

foreach (var (searchInfo, i) in request.ConjunctionSearchInfos.Select((value, i) => (value, i)))
{
if (i == 0)
continue;

Expression<Func<Package, bool>> whereExpr = p => ReflectionHelper.GetStringValueByName(typeof(Package), searchInfo.FieldName, p)
.Contains(searchInfo.Keyword, StringComparison.OrdinalIgnoreCase);
conjunctionWhere = ExpressionHelper.CombineOrExpressions(conjunctionWhere, whereExpr);
}

packages = packages.Where(conjunctionWhere.Compile()).ToList();
}

if (request.SortInfos.Any())
{
request.SortInfos = request.SortInfos.OrderBy(si => si.Priority).ToList();
var initialSortInfo = request.SortInfos.First();
Expression<Func<Package, object>> orderExpr = p => ReflectionHelper.GetValueByName(typeof(Package), initialSortInfo.FieldName, p);

packages = initialSortInfo.Descending ? packages.OrderByDescending(orderExpr.Compile()).ToList() : packages.OrderBy(orderExpr.Compile()).ToList();

foreach (var (sortInfo, i) in request.SortInfos.Select((value, i) => (value, i)))
{
if (i == 0)
continue;

orderExpr = p => ReflectionHelper.GetValueByName(typeof(Package), sortInfo.FieldName, p);
packages = sortInfo.Descending ? packages.OrderByDescending(orderExpr.Compile()).ToList() : packages.OrderBy(orderExpr.Compile()).ToList();
}
}

var paginatedResult = PaginationHelper.BuildPaginatedResult<Package, DtoPackage>(_mapper, packages, request.PageSize, request.PageIndex);

return new ServiceActionResult(true) { Data = paginatedResult };
}

}
1 change: 1 addition & 0 deletions Domus.Service/Interfaces/IPackageService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ public interface IPackageService : IAutoRegisterable
Task<ServiceActionResult> UpdatePackage(PackageRequest request, Guid packageId);
Task<ServiceActionResult> DeletePackage(Guid packageId);
Task<ServiceActionResult> GetPackageByName(string name);
Task<ServiceActionResult> SearchPackages(BaseSearchRequest request);
}

0 comments on commit 8ded427

Please sign in to comment.