Files
pos-system/services/fnb-engine-net/src/FnbEngine.API/Application/Queries/GetTablesQueryHandler.cs

43 lines
1.3 KiB
C#

// EN: Handler for GetTablesQuery.
// VI: Handler cho GetTablesQuery.
using MediatR;
using FnbEngine.Domain.AggregatesModel.TableAggregate;
using FnbEngine.Domain.SeedWork;
namespace FnbEngine.API.Application.Queries;
/// <summary>
/// EN: Handler for getting tables by shop.
/// VI: Handler lấy danh sách bàn theo shop.
/// </summary>
public class GetTablesQueryHandler : IRequestHandler<GetTablesQuery, IEnumerable<TableDto>>
{
private readonly ITableRepository _tableRepository;
public GetTablesQueryHandler(ITableRepository tableRepository)
{
_tableRepository = tableRepository ?? throw new ArgumentNullException(nameof(tableRepository));
}
public async Task<IEnumerable<TableDto>> Handle(GetTablesQuery request, CancellationToken cancellationToken)
{
var tables = await _tableRepository.GetByShopAsync(request.ShopId, cancellationToken);
var allStatuses = Enumeration.GetAll<TableStatus>()
.ToDictionary(s => s.Id, s => s.Name.ToLowerInvariant());
return tables.Select(t => new TableDto(
t.Id,
t.ShopId,
t.TableNumber,
t.Capacity,
t.Zone,
allStatuses.TryGetValue(t.StatusId, out var name) ? name : "available",
t.PositionX,
t.PositionY,
t.QrToken
));
}
}