This commit is contained in:
Ho Ngoc Hai
2026-03-05 01:39:40 +07:00
parent df7eec1ec2
commit 629fed8a55
18 changed files with 586 additions and 124 deletions

View File

@@ -11,7 +11,7 @@ namespace OrderService.API.Application.Queries;
/// EN: Query for POS dashboard data.
/// VI: Query cho dữ liệu dashboard POS.
/// </summary>
public record GetPosDashboardQuery(Guid ShopId) : IRequest<PosDashboardDto>;
public record GetPosDashboardQuery(Guid ShopId, string? Period = "today") : IRequest<PosDashboardDto>;
/// <summary>
/// EN: POS dashboard DTO with today's stats.
@@ -90,12 +90,18 @@ public class GetPosDashboardQueryHandler : IRequestHandler<GetPosDashboardQuery,
public async Task<PosDashboardDto> Handle(GetPosDashboardQuery request, CancellationToken cancellationToken)
{
var today = DateTime.UtcNow.Date;
var tomorrow = today.AddDays(1);
var now = DateTime.UtcNow;
var fromDate = request.Period?.ToLower() switch
{
"7d" => now.Date.AddDays(-7),
"30d" => now.Date.AddDays(-30),
_ => now.Date // "today" or default
};
var toDate = now.Date.AddDays(1);
var parameters = new DynamicParameters();
parameters.Add("ShopId", request.ShopId);
parameters.Add("Today", today);
parameters.Add("Tomorrow", tomorrow);
parameters.Add("Today", fromDate);
parameters.Add("Tomorrow", toDate);
// EN: Aggregate stats for today / VI: Thống kê tổng hợp hôm nay
var aggregateSql = @"

View File

@@ -181,13 +181,14 @@ public class OrdersController : ControllerBase
[ProducesResponseType(typeof(PosDashboardDto), StatusCodes.Status200OK)]
public async Task<ActionResult<PosDashboardDto>> GetPosDashboard(
[FromQuery] Guid shopId,
[FromQuery] string? period = "today",
CancellationToken cancellationToken = default)
{
_logger.LogInformation(
"EN: Getting POS dashboard for shop {ShopId} / VI: Lấy dashboard POS cho shop {ShopId}",
shopId);
"EN: Getting POS dashboard for shop {ShopId} period {Period} / VI: Lấy dashboard POS cho shop {ShopId} kỳ {Period}",
shopId, period);
var query = new GetPosDashboardQuery(shopId);
var query = new GetPosDashboardQuery(shopId, period);
var result = await _mediator.Send(query, cancellationToken);
return Ok(result);