using HardwarePerformance.Core.Entities;
namespace HardwarePerformance.Application.Interfaces
{
///
/// 产品Repository接口
///
public interface IProductRepository : IRepository
{
///
/// 根据类别ID获取产品列表(支持分页和排序)
///
/// 类别ID
/// 页码
/// 每页大小
/// 排序字段
/// 是否升序
/// 产品列表
Task<(IEnumerable products, int totalCount)> GetByCategoryAsync(
int categoryId,
int pageNumber = 1,
int pageSize = 20,
string sortBy = "CurrentRank",
bool ascending = true);
///
/// 搜索产品(按名称、型号、品牌)
///
/// 搜索关键词
/// 类别ID(可选)
/// 页码
/// 每页大小
/// 产品列表
Task<(IEnumerable products, int totalCount)> SearchAsync(
string searchTerm,
int? categoryId = null,
int pageNumber = 1,
int pageSize = 20);
///
/// 筛选产品(按性能分数区间、发布年份、品牌)
///
/// 类别ID
/// 最低分数
/// 最高分数
/// 最早年份
/// 最晚年份
/// 品牌
/// 页码
/// 每页大小
/// 产品列表
Task<(IEnumerable products, int totalCount)> FilterAsync(
int categoryId,
int? minScore = null,
int? maxScore = null,
int? minYear = null,
int? maxYear = null,
string? manufacturer = null,
int pageNumber = 1,
int pageSize = 20);
///
/// 获取产品详情(包含规格参数和性能分数)
///
/// 产品ID
/// 产品详情
Task GetWithDetailsAsync(int id);
///
/// 获取多个产品(用于对比)
///
/// 产品ID列表
/// 产品列表
Task> GetByIdsAsync(IEnumerable productIds);
///
/// 获取品牌列表
///
/// 类别ID(可选)
/// 品牌列表
Task> GetManufacturersAsync(int? categoryId = null);
///
/// 获取排名变化历史
///
/// 产品ID
/// 月份数
/// 排名历史
Task> GetRankingHistoryAsync(int productId, int months = 12);
///
/// 根据制造商获取产品列表
///
/// 制造商名称
/// 类别ID(可选)
/// 页码
/// 每页大小
/// 产品列表
Task<(IEnumerable products, int totalCount)> GetByManufacturerAsync(
string manufacturer,
int? categoryId = null,
int pageNumber = 1,
int pageSize = 20);
///
/// 根据型号获取产品
///
/// 型号
/// 产品
Task GetByModelAsync(string model);
///
/// 获取类别中排名前N的产品
///
/// 类别ID
/// 数量
/// 产品列表
Task> GetTopNByCategoryAsync(int categoryId, int n);
}
}