diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs index fbc2277..45e9aa0 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs @@ -48,8 +48,8 @@ public sealed class DeliveriesController : BaseApiController /// [HttpGet] [PermissionAuthorize("delivery:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] long? orderId, [FromQuery] DeliveryStatus? status, [FromQuery] int page = 1, @@ -68,7 +68,7 @@ public sealed class DeliveriesController : BaseApiController SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs index 545af0d..5bbe4bf 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/MerchantsController.cs @@ -49,7 +49,7 @@ public sealed class MerchantsController : BaseApiController [HttpGet] [PermissionAuthorize("merchant:read")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + public async Task>> List( [FromQuery] MerchantStatus? status, [FromQuery] int page = 1, [FromQuery] int pageSize = 20, @@ -65,7 +65,7 @@ public sealed class MerchantsController : BaseApiController SortBy = sortBy, SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/OrdersController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/OrdersController.cs index b14a915..bfcf6b3 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/OrdersController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/OrdersController.cs @@ -49,8 +49,8 @@ public sealed class OrdersController : BaseApiController /// [HttpGet] [PermissionAuthorize("order:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] long? storeId, [FromQuery] OrderStatus? status, [FromQuery] PaymentStatus? paymentStatus, @@ -73,7 +73,7 @@ public sealed class OrdersController : BaseApiController SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/PaymentsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/PaymentsController.cs index 5f91315..30d87a8 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/PaymentsController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/PaymentsController.cs @@ -48,8 +48,8 @@ public sealed class PaymentsController : BaseApiController /// [HttpGet] [PermissionAuthorize("payment:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] long? orderId, [FromQuery] PaymentStatus? status, [FromQuery] int page = 1, @@ -68,7 +68,7 @@ public sealed class PaymentsController : BaseApiController SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/ProductsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/ProductsController.cs index 949cf0b..2064156 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/ProductsController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/ProductsController.cs @@ -48,8 +48,8 @@ public sealed class ProductsController : BaseApiController /// [HttpGet] [PermissionAuthorize("product:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] long? storeId, [FromQuery] long? categoryId, [FromQuery] ProductStatus? status, @@ -70,7 +70,7 @@ public sealed class ProductsController : BaseApiController SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/StoresController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/StoresController.cs index 5680396..8d35bcf 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/StoresController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/StoresController.cs @@ -48,8 +48,8 @@ public sealed class StoresController : BaseApiController /// [HttpGet] [PermissionAuthorize("store:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] long? merchantId, [FromQuery] StoreStatus? status, [FromQuery] int page = 1, @@ -68,7 +68,7 @@ public sealed class StoresController : BaseApiController SortDescending = sortDesc }, cancellationToken); - return ApiResponse>.Ok(result); + return ApiResponse>.Ok(result); } /// diff --git a/src/Application/TakeoutSaaS.Application/App/Deliveries/Handlers/SearchDeliveryOrdersQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Deliveries/Handlers/SearchDeliveryOrdersQueryHandler.cs index f0b3750..cc748db 100644 --- a/src/Application/TakeoutSaaS.Application/App/Deliveries/Handlers/SearchDeliveryOrdersQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Deliveries/Handlers/SearchDeliveryOrdersQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Deliveries.Dto; using TakeoutSaaS.Application.App.Deliveries.Queries; using TakeoutSaaS.Domain.Deliveries.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Deliveries.Handlers; @@ -12,13 +13,13 @@ namespace TakeoutSaaS.Application.App.Deliveries.Handlers; public sealed class SearchDeliveryOrdersQueryHandler( IDeliveryRepository deliveryRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IDeliveryRepository _deliveryRepository = deliveryRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchDeliveryOrdersQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchDeliveryOrdersQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var orders = await _deliveryRepository.SearchAsync(tenantId, request.Status, request.OrderId, cancellationToken); @@ -29,7 +30,7 @@ public sealed class SearchDeliveryOrdersQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(order => new DeliveryOrderDto + var items = paged.Select(order => new DeliveryOrderDto { Id = order.Id, TenantId = order.TenantId, @@ -46,6 +47,8 @@ public sealed class SearchDeliveryOrdersQueryHandler( FailureReason = order.FailureReason, CreatedAt = order.CreatedAt }).ToList(); + + return new PagedResult(items, request.Page, request.PageSize, orders.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Deliveries/Queries/SearchDeliveryOrdersQuery.cs b/src/Application/TakeoutSaaS.Application/App/Deliveries/Queries/SearchDeliveryOrdersQuery.cs index 7175ac3..751d90c 100644 --- a/src/Application/TakeoutSaaS.Application/App/Deliveries/Queries/SearchDeliveryOrdersQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Deliveries/Queries/SearchDeliveryOrdersQuery.cs @@ -1,13 +1,14 @@ using MediatR; using TakeoutSaaS.Application.App.Deliveries.Dto; using TakeoutSaaS.Domain.Deliveries.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Deliveries.Queries; /// /// 配送单列表查询。 /// -public sealed class SearchDeliveryOrdersQuery : IRequest> +public sealed class SearchDeliveryOrdersQuery : IRequest> { /// /// 订单 ID(可选)。 diff --git a/src/Application/TakeoutSaaS.Application/App/Merchants/Handlers/SearchMerchantsQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Merchants/Handlers/SearchMerchantsQueryHandler.cs index 71d18e3..8d46242 100644 --- a/src/Application/TakeoutSaaS.Application/App/Merchants/Handlers/SearchMerchantsQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Merchants/Handlers/SearchMerchantsQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Merchants.Dto; using TakeoutSaaS.Application.App.Merchants.Queries; using TakeoutSaaS.Domain.Merchants.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Merchants.Handlers; @@ -12,13 +13,13 @@ namespace TakeoutSaaS.Application.App.Merchants.Handlers; public sealed class SearchMerchantsQueryHandler( IMerchantRepository merchantRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IMerchantRepository _merchantRepository = merchantRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchMerchantsQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchMerchantsQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var merchants = await _merchantRepository.SearchAsync(tenantId, request.Status, cancellationToken); @@ -29,7 +30,7 @@ public sealed class SearchMerchantsQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(merchant => new MerchantDto + var items = paged.Select(merchant => new MerchantDto { Id = merchant.Id, TenantId = merchant.TenantId, @@ -43,6 +44,8 @@ public sealed class SearchMerchantsQueryHandler( JoinedAt = merchant.JoinedAt, CreatedAt = merchant.CreatedAt }).ToList(); + + return new PagedResult(items, request.Page, request.PageSize, merchants.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Merchants/Queries/SearchMerchantsQuery.cs b/src/Application/TakeoutSaaS.Application/App/Merchants/Queries/SearchMerchantsQuery.cs index b8a8b1a..b3ca969 100644 --- a/src/Application/TakeoutSaaS.Application/App/Merchants/Queries/SearchMerchantsQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Merchants/Queries/SearchMerchantsQuery.cs @@ -1,13 +1,14 @@ using MediatR; using TakeoutSaaS.Application.App.Merchants.Dto; using TakeoutSaaS.Domain.Merchants.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Merchants.Queries; /// /// 搜索商户列表。 /// -public sealed class SearchMerchantsQuery : IRequest> +public sealed class SearchMerchantsQuery : IRequest> { /// /// 按状态过滤。 diff --git a/src/Application/TakeoutSaaS.Application/App/Orders/Handlers/SearchOrdersQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Orders/Handlers/SearchOrdersQueryHandler.cs index caf2a50..867332b 100644 --- a/src/Application/TakeoutSaaS.Application/App/Orders/Handlers/SearchOrdersQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Orders/Handlers/SearchOrdersQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Orders.Dto; using TakeoutSaaS.Application.App.Orders.Queries; using TakeoutSaaS.Domain.Orders.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Orders.Handlers; @@ -12,13 +13,13 @@ namespace TakeoutSaaS.Application.App.Orders.Handlers; public sealed class SearchOrdersQueryHandler( IOrderRepository orderRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IOrderRepository _orderRepository = orderRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchOrdersQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchOrdersQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var orders = await _orderRepository.SearchAsync(tenantId, request.Status, request.PaymentStatus, cancellationToken); @@ -42,7 +43,7 @@ public sealed class SearchOrdersQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(order => new OrderDto + var items = paged.Select(order => new OrderDto { Id = order.Id, TenantId = order.TenantId, @@ -68,6 +69,8 @@ public sealed class SearchOrdersQueryHandler( Remark = order.Remark, CreatedAt = order.CreatedAt }).ToList(); + + return new PagedResult(items, request.Page, request.PageSize, orders.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Orders/Queries/SearchOrdersQuery.cs b/src/Application/TakeoutSaaS.Application/App/Orders/Queries/SearchOrdersQuery.cs index 6d33583..74c6753 100644 --- a/src/Application/TakeoutSaaS.Application/App/Orders/Queries/SearchOrdersQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Orders/Queries/SearchOrdersQuery.cs @@ -2,13 +2,14 @@ using MediatR; using TakeoutSaaS.Application.App.Orders.Dto; using TakeoutSaaS.Domain.Orders.Enums; using TakeoutSaaS.Domain.Payments.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Orders.Queries; /// /// 订单列表查询。 /// -public sealed class SearchOrdersQuery : IRequest> +public sealed class SearchOrdersQuery : IRequest> { /// /// 门店 ID(可选)。 diff --git a/src/Application/TakeoutSaaS.Application/App/Payments/Handlers/SearchPaymentsQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Payments/Handlers/SearchPaymentsQueryHandler.cs index be6c10a..9d6c4ae 100644 --- a/src/Application/TakeoutSaaS.Application/App/Payments/Handlers/SearchPaymentsQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Payments/Handlers/SearchPaymentsQueryHandler.cs @@ -3,6 +3,7 @@ using TakeoutSaaS.Application.App.Payments.Dto; using TakeoutSaaS.Application.App.Payments.Queries; using TakeoutSaaS.Domain.Payments.Entities; using TakeoutSaaS.Domain.Payments.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Payments.Handlers; @@ -13,13 +14,13 @@ namespace TakeoutSaaS.Application.App.Payments.Handlers; public sealed class SearchPaymentsQueryHandler( IPaymentRepository paymentRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IPaymentRepository _paymentRepository = paymentRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchPaymentsQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchPaymentsQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var payments = await _paymentRepository.SearchAsync(tenantId, request.Status, cancellationToken); @@ -35,7 +36,7 @@ public sealed class SearchPaymentsQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(payment => new PaymentDto + var items = paged.Select(payment => new PaymentDto { Id = payment.Id, TenantId = payment.TenantId, @@ -50,6 +51,8 @@ public sealed class SearchPaymentsQueryHandler( Payload = payment.Payload, CreatedAt = payment.CreatedAt }).ToList(); + + return new PagedResult(items, request.Page, request.PageSize, payments.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Payments/Queries/SearchPaymentsQuery.cs b/src/Application/TakeoutSaaS.Application/App/Payments/Queries/SearchPaymentsQuery.cs index efe8861..2fbf13f 100644 --- a/src/Application/TakeoutSaaS.Application/App/Payments/Queries/SearchPaymentsQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Payments/Queries/SearchPaymentsQuery.cs @@ -1,13 +1,14 @@ using MediatR; using TakeoutSaaS.Application.App.Payments.Dto; using TakeoutSaaS.Domain.Payments.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Payments.Queries; /// /// 支付记录列表查询。 /// -public sealed class SearchPaymentsQuery : IRequest> +public sealed class SearchPaymentsQuery : IRequest> { /// /// 订单 ID(可选)。 diff --git a/src/Application/TakeoutSaaS.Application/App/Products/Handlers/SearchProductsQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Products/Handlers/SearchProductsQueryHandler.cs index 5527166..70e91f2 100644 --- a/src/Application/TakeoutSaaS.Application/App/Products/Handlers/SearchProductsQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Products/Handlers/SearchProductsQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Products.Dto; using TakeoutSaaS.Application.App.Products.Queries; using TakeoutSaaS.Domain.Products.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Products.Handlers; @@ -12,13 +13,13 @@ namespace TakeoutSaaS.Application.App.Products.Handlers; public sealed class SearchProductsQueryHandler( IProductRepository productRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IProductRepository _productRepository = productRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchProductsQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchProductsQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var products = await _productRepository.SearchAsync(tenantId, request.CategoryId, request.Status, cancellationToken); @@ -34,7 +35,8 @@ public sealed class SearchProductsQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(MapToDto).ToList(); + var items = paged.Select(MapToDto).ToList(); + return new PagedResult(items, request.Page, request.PageSize, products.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Products/Queries/SearchProductsQuery.cs b/src/Application/TakeoutSaaS.Application/App/Products/Queries/SearchProductsQuery.cs index e7d3c55..b1d4b31 100644 --- a/src/Application/TakeoutSaaS.Application/App/Products/Queries/SearchProductsQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Products/Queries/SearchProductsQuery.cs @@ -1,13 +1,14 @@ using MediatR; using TakeoutSaaS.Application.App.Products.Dto; using TakeoutSaaS.Domain.Products.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Products.Queries; /// /// 商品列表查询。 /// -public sealed class SearchProductsQuery : IRequest> +public sealed class SearchProductsQuery : IRequest> { /// /// 门店 ID(可选)。 diff --git a/src/Application/TakeoutSaaS.Application/App/Stores/Handlers/SearchStoresQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Stores/Handlers/SearchStoresQueryHandler.cs index 0141ae4..1bb609d 100644 --- a/src/Application/TakeoutSaaS.Application/App/Stores/Handlers/SearchStoresQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Stores/Handlers/SearchStoresQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Stores.Dto; using TakeoutSaaS.Application.App.Stores.Queries; using TakeoutSaaS.Domain.Stores.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Stores.Handlers; @@ -12,13 +13,13 @@ namespace TakeoutSaaS.Application.App.Stores.Handlers; public sealed class SearchStoresQueryHandler( IStoreRepository storeRepository, ITenantProvider tenantProvider) - : IRequestHandler> + : IRequestHandler> { private readonly IStoreRepository _storeRepository = storeRepository; private readonly ITenantProvider _tenantProvider = tenantProvider; /// - public async Task> Handle(SearchStoresQuery request, CancellationToken cancellationToken) + public async Task> Handle(SearchStoresQuery request, CancellationToken cancellationToken) { var tenantId = _tenantProvider.GetCurrentTenantId(); var stores = await _storeRepository.SearchAsync(tenantId, request.Status, cancellationToken); @@ -34,7 +35,8 @@ public sealed class SearchStoresQueryHandler( .Take(request.PageSize) .ToList(); - return paged.Select(MapToDto).ToList(); + var items = paged.Select(MapToDto).ToList(); + return new PagedResult(items, request.Page, request.PageSize, stores.Count); } private static IOrderedEnumerable ApplySorting( diff --git a/src/Application/TakeoutSaaS.Application/App/Stores/Queries/SearchStoresQuery.cs b/src/Application/TakeoutSaaS.Application/App/Stores/Queries/SearchStoresQuery.cs index 8a0b75b..f429439 100644 --- a/src/Application/TakeoutSaaS.Application/App/Stores/Queries/SearchStoresQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Stores/Queries/SearchStoresQuery.cs @@ -1,13 +1,14 @@ using MediatR; using TakeoutSaaS.Application.App.Stores.Dto; using TakeoutSaaS.Domain.Stores.Enums; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Stores.Queries; /// /// 门店列表查询。 /// -public sealed class SearchStoresQuery : IRequest> +public sealed class SearchStoresQuery : IRequest> { /// /// 商户 ID(可选)。 diff --git a/src/Core/TakeoutSaaS.Shared.Abstractions/Results/PagedResult.cs b/src/Core/TakeoutSaaS.Shared.Abstractions/Results/PagedResult.cs new file mode 100644 index 0000000..aee0aee --- /dev/null +++ b/src/Core/TakeoutSaaS.Shared.Abstractions/Results/PagedResult.cs @@ -0,0 +1,47 @@ +using System.Collections.Generic; + +namespace TakeoutSaaS.Shared.Abstractions.Results; + +/// +/// 分页结果包装,携带列表与总条数等元数据。 +/// +/// 数据类型。 +public sealed class PagedResult +{ + /// + /// 数据列表。 + /// + public IReadOnlyList Items { get; } + + /// + /// 当前页码,从 1 开始。 + /// + public int Page { get; } + + /// + /// 每页条数。 + /// + public int PageSize { get; } + + /// + /// 总条数。 + /// + public int TotalCount { get; } + + /// + /// 总页数。 + /// + public int TotalPages { get; } + + /// + /// 初始化分页结果。 + /// + public PagedResult(IReadOnlyList items, int page, int pageSize, int totalCount) + { + Items = items; + Page = page; + PageSize = pageSize; + TotalCount = totalCount; + TotalPages = pageSize == 0 ? 0 : (int)Math.Ceiling(totalCount / (double)pageSize); + } +}