初始化
Some checks failed
Some checks failed
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
using HardwarePerformance.Core.Entities;
|
||||
|
||||
namespace HardwarePerformance.Application.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 类别Repository接口
|
||||
/// </summary>
|
||||
public interface ICategoryRepository : IRepository<Category>
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据名称获取类别
|
||||
/// </summary>
|
||||
/// <param name="name">类别名称</param>
|
||||
/// <returns>类别对象</returns>
|
||||
Task<Category?> GetByNameAsync(string name);
|
||||
|
||||
/// <summary>
|
||||
/// 获取类别及其产品数量
|
||||
/// </summary>
|
||||
/// <returns>类别列表及产品数量</returns>
|
||||
Task<IEnumerable<Category>> GetCategoriesWithProductCountAsync();
|
||||
|
||||
/// <summary>
|
||||
/// 检查类别名称是否已存在
|
||||
/// </summary>
|
||||
/// <param name="name">类别名称</param>
|
||||
/// <param name="excludeId">排除的类别ID(用于更新时检查)</param>
|
||||
/// <returns>是否已存在</returns>
|
||||
Task<bool> IsNameExistsAsync(string name, int? excludeId = null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
using HardwarePerformance.Core.Entities;
|
||||
|
||||
namespace HardwarePerformance.Application.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 产品Repository接口
|
||||
/// </summary>
|
||||
public interface IProductRepository : IRepository<Product>
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据类别ID获取产品列表(支持分页和排序)
|
||||
/// </summary>
|
||||
/// <param name="categoryId">类别ID</param>
|
||||
/// <param name="pageNumber">页码</param>
|
||||
/// <param name="pageSize">每页大小</param>
|
||||
/// <param name="sortBy">排序字段</param>
|
||||
/// <param name="ascending">是否升序</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<(IEnumerable<Product> products, int totalCount)> GetByCategoryAsync(
|
||||
int categoryId,
|
||||
int pageNumber = 1,
|
||||
int pageSize = 20,
|
||||
string sortBy = "CurrentRank",
|
||||
bool ascending = true);
|
||||
|
||||
/// <summary>
|
||||
/// 搜索产品(按名称、型号、品牌)
|
||||
/// </summary>
|
||||
/// <param name="searchTerm">搜索关键词</param>
|
||||
/// <param name="categoryId">类别ID(可选)</param>
|
||||
/// <param name="pageNumber">页码</param>
|
||||
/// <param name="pageSize">每页大小</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<(IEnumerable<Product> products, int totalCount)> SearchAsync(
|
||||
string searchTerm,
|
||||
int? categoryId = null,
|
||||
int pageNumber = 1,
|
||||
int pageSize = 20);
|
||||
|
||||
/// <summary>
|
||||
/// 筛选产品(按性能分数区间、发布年份、品牌)
|
||||
/// </summary>
|
||||
/// <param name="categoryId">类别ID</param>
|
||||
/// <param name="minScore">最低分数</param>
|
||||
/// <param name="maxScore">最高分数</param>
|
||||
/// <param name="minYear">最早年份</param>
|
||||
/// <param name="maxYear">最晚年份</param>
|
||||
/// <param name="manufacturer">品牌</param>
|
||||
/// <param name="pageNumber">页码</param>
|
||||
/// <param name="pageSize">每页大小</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<(IEnumerable<Product> 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);
|
||||
|
||||
/// <summary>
|
||||
/// 获取产品详情(包含规格参数和性能分数)
|
||||
/// </summary>
|
||||
/// <param name="id">产品ID</param>
|
||||
/// <returns>产品详情</returns>
|
||||
Task<Product?> GetWithDetailsAsync(int id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取多个产品(用于对比)
|
||||
/// </summary>
|
||||
/// <param name="productIds">产品ID列表</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<IEnumerable<Product>> GetByIdsAsync(IEnumerable<int> productIds);
|
||||
|
||||
/// <summary>
|
||||
/// 获取品牌列表
|
||||
/// </summary>
|
||||
/// <param name="categoryId">类别ID(可选)</param>
|
||||
/// <returns>品牌列表</returns>
|
||||
Task<IEnumerable<string>> GetManufacturersAsync(int? categoryId = null);
|
||||
|
||||
/// <summary>
|
||||
/// 获取排名变化历史
|
||||
/// </summary>
|
||||
/// <param name="productId">产品ID</param>
|
||||
/// <param name="months">月份数</param>
|
||||
/// <returns>排名历史</returns>
|
||||
Task<IEnumerable<RankingHistory>> GetRankingHistoryAsync(int productId, int months = 12);
|
||||
|
||||
/// <summary>
|
||||
/// 根据制造商获取产品列表
|
||||
/// </summary>
|
||||
/// <param name="manufacturer">制造商名称</param>
|
||||
/// <param name="categoryId">类别ID(可选)</param>
|
||||
/// <param name="pageNumber">页码</param>
|
||||
/// <param name="pageSize">每页大小</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<(IEnumerable<Product> products, int totalCount)> GetByManufacturerAsync(
|
||||
string manufacturer,
|
||||
int? categoryId = null,
|
||||
int pageNumber = 1,
|
||||
int pageSize = 20);
|
||||
|
||||
/// <summary>
|
||||
/// 根据型号获取产品
|
||||
/// </summary>
|
||||
/// <param name="model">型号</param>
|
||||
/// <returns>产品</returns>
|
||||
Task<Product?> GetByModelAsync(string model);
|
||||
|
||||
/// <summary>
|
||||
/// 获取类别中排名前N的产品
|
||||
/// </summary>
|
||||
/// <param name="categoryId">类别ID</param>
|
||||
/// <param name="n">数量</param>
|
||||
/// <returns>产品列表</returns>
|
||||
Task<IEnumerable<Product>> GetTopNByCategoryAsync(int categoryId, int n);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
using System.Linq.Expressions;
|
||||
|
||||
namespace HardwarePerformance.Application.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// 通用Repository接口,定义基本的CRUD操作
|
||||
/// </summary>
|
||||
/// <typeparam name="T">实体类型</typeparam>
|
||||
public interface IRepository<T> where T : class
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据ID获取实体
|
||||
/// </summary>
|
||||
/// <param name="id">实体ID</param>
|
||||
/// <returns>实体对象</returns>
|
||||
Task<T?> GetByIdAsync(int id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有实体
|
||||
/// </summary>
|
||||
/// <returns>实体列表</returns>
|
||||
Task<IEnumerable<T>> GetAllAsync();
|
||||
|
||||
/// <summary>
|
||||
/// 根据条件查询实体
|
||||
/// </summary>
|
||||
/// <param name="predicate">查询条件</param>
|
||||
/// <returns>符合条件的实体列表</returns>
|
||||
Task<IEnumerable<T>> FindAsync(Expression<Func<T, bool>> predicate);
|
||||
|
||||
/// <summary>
|
||||
/// 检查是否存在符合条件的实体
|
||||
/// </summary>
|
||||
/// <param name="predicate">查询条件</param>
|
||||
/// <returns>是否存在</returns>
|
||||
Task<bool> ExistsAsync(Expression<Func<T, bool>> predicate);
|
||||
|
||||
/// <summary>
|
||||
/// 添加实体
|
||||
/// </summary>
|
||||
/// <param name="entity">要添加的实体</param>
|
||||
/// <returns>添加后的实体</returns>
|
||||
Task<T> AddAsync(T entity);
|
||||
|
||||
/// <summary>
|
||||
/// 批量添加实体
|
||||
/// </summary>
|
||||
/// <param name="entities">要添加的实体列表</param>
|
||||
/// <returns>添加后的实体列表</returns>
|
||||
Task<IEnumerable<T>> AddRangeAsync(IEnumerable<T> entities);
|
||||
|
||||
/// <summary>
|
||||
/// 更新实体
|
||||
/// </summary>
|
||||
/// <param name="entity">要更新的实体</param>
|
||||
/// <returns>更新后的实体</returns>
|
||||
Task<T> UpdateAsync(T entity);
|
||||
|
||||
/// <summary>
|
||||
/// 删除实体
|
||||
/// </summary>
|
||||
/// <param name="entity">要删除的实体</param>
|
||||
/// <returns>是否删除成功</returns>
|
||||
Task<bool> DeleteAsync(T entity);
|
||||
|
||||
/// <summary>
|
||||
/// 根据ID删除实体
|
||||
/// </summary>
|
||||
/// <param name="id">实体ID</param>
|
||||
/// <returns>是否删除成功</returns>
|
||||
Task<bool> DeleteByIdAsync(int id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取实体数量
|
||||
/// </summary>
|
||||
/// <returns>实体总数</returns>
|
||||
Task<int> CountAsync();
|
||||
|
||||
/// <summary>
|
||||
/// 根据条件获取实体数量
|
||||
/// </summary>
|
||||
/// <param name="predicate">查询条件</param>
|
||||
/// <returns>符合条件的实体数量</returns>
|
||||
Task<int> CountAsync(Expression<Func<T, bool>> predicate);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user