51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using AMREZ.EOP.Abstractions.Applications.Tenancy;
|
|
using AMREZ.EOP.Abstractions.Applications.UseCases.MasterData.Province;
|
|
using AMREZ.EOP.Abstractions.Infrastructures.Repositories;
|
|
using AMREZ.EOP.Contracts.DTOs.Common;
|
|
using AMREZ.EOP.Contracts.DTOs.MasterData.Province;
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
namespace AMREZ.EOP.Application.UseCases.MasterData.Province;
|
|
|
|
public sealed class ListProvincesUseCase : IListProvincesUseCase
|
|
{
|
|
private readonly IProvinceRepository _repo;
|
|
private readonly ITenantResolver _tenantResolver;
|
|
private readonly IHttpContextAccessor _http;
|
|
|
|
public ListProvincesUseCase(
|
|
IProvinceRepository repo,
|
|
ITenantResolver tenantResolver,
|
|
IHttpContextAccessor http)
|
|
{
|
|
_repo = repo;
|
|
_tenantResolver = tenantResolver;
|
|
_http = http;
|
|
}
|
|
|
|
public async Task<PagedResponse<ProvinceResponse>> ExecuteAsync(ProvinceListRequest req, CancellationToken ct = default)
|
|
{
|
|
var http = _http.HttpContext ?? throw new InvalidOperationException("No HttpContext");
|
|
var tc = _tenantResolver.Resolve(http) ?? throw new InvalidOperationException("No tenant");
|
|
var tid = Guid.Parse(tc.Id);
|
|
|
|
var page = await _repo.SearchEffectiveAsync(tid, req, ct);
|
|
var items = page.Items.Select(Map).ToList();
|
|
|
|
return new PagedResponse<ProvinceResponse>(page.Page, page.PageSize, page.Total, items);
|
|
}
|
|
|
|
private static ProvinceResponse Map(Domain.Entities.MasterData.Province e) =>
|
|
new(
|
|
e.Id,
|
|
e.Scope,
|
|
e.Code,
|
|
e.Name,
|
|
e.NameI18n,
|
|
e.OverridesGlobalId,
|
|
e.IsActive,
|
|
e.IsSystem,
|
|
e.Meta,
|
|
e.Code
|
|
);
|
|
} |