Files
EmailBill/Repository/TransactionCategoryRepository.cs

65 lines
1.9 KiB
C#
Raw Normal View History

2025-12-25 11:20:56 +08:00
namespace Repository;
/// <summary>
/// 交易分类仓储接口
/// </summary>
public interface ITransactionCategoryRepository : IBaseRepository<TransactionCategory>
{
/// <summary>
2025-12-26 15:21:31 +08:00
/// 根据类型获取所有分类
2025-12-25 11:20:56 +08:00
/// </summary>
2025-12-26 15:21:31 +08:00
Task<List<TransactionCategory>> GetCategoriesByTypeAsync(TransactionType type);
2025-12-25 11:20:56 +08:00
/// <summary>
2025-12-26 15:21:31 +08:00
/// 根据名称和类型查找分类(防止重复)
2025-12-25 11:20:56 +08:00
/// </summary>
2025-12-26 15:21:31 +08:00
Task<TransactionCategory?> GetByNameAndTypeAsync(string name, TransactionType type);
2025-12-25 11:20:56 +08:00
/// <summary>
/// 检查分类是否被使用
/// </summary>
Task<bool> IsCategoryInUseAsync(long categoryId);
}
/// <summary>
/// 交易分类仓储实现
/// </summary>
public class TransactionCategoryRepository(IFreeSql freeSql) : BaseRepository<TransactionCategory>(freeSql), ITransactionCategoryRepository
{
/// <summary>
2025-12-26 15:21:31 +08:00
/// 根据类型获取所有分类
2025-12-25 11:20:56 +08:00
/// </summary>
2025-12-26 15:21:31 +08:00
public async Task<List<TransactionCategory>> GetCategoriesByTypeAsync(TransactionType type)
2025-12-25 11:20:56 +08:00
{
return await FreeSql.Select<TransactionCategory>()
2025-12-26 15:21:31 +08:00
.Where(c => c.Type == type)
2025-12-25 11:20:56 +08:00
.OrderBy(c => c.Name)
.ToListAsync();
}
/// <summary>
2025-12-26 15:21:31 +08:00
/// 根据名称和类型查找分类
2025-12-25 11:20:56 +08:00
/// </summary>
2025-12-26 15:21:31 +08:00
public async Task<TransactionCategory?> GetByNameAndTypeAsync(string name, TransactionType type)
2025-12-25 11:20:56 +08:00
{
return await FreeSql.Select<TransactionCategory>()
2025-12-26 15:21:31 +08:00
.Where(c => c.Name == name && c.Type == type)
2025-12-25 11:20:56 +08:00
.FirstAsync();
}
/// <summary>
/// 检查分类是否被使用
/// </summary>
public async Task<bool> IsCategoryInUseAsync(long categoryId)
{
var category = await GetByIdAsync(categoryId);
if (category == null) return false;
2025-12-26 15:21:31 +08:00
var count = await FreeSql.Select<TransactionRecord>()
.Where(r => r.Classify == category.Name && r.Type == category.Type)
.CountAsync();
2025-12-25 11:20:56 +08:00
return count > 0;
}
}