P0 - 安全修复: - 移除硬编码 API Key,启动时校验必填环境变量 P1 - 高优先级: - Entity 拆分:Position.cs, Transaction.cs 独立文件 - Controller Facade 封装:IPortfolioFacade 减少依赖注入 P2 - 中优先级: - Repository 抽象:IPortfolioRepository, IMarketDataRepository - MarketDataService 拆分:组合模式整合 Tencent/Tiingo/OKX P3 - 低优先级: - DTO 命名规范:统一 PascalCase - 单元测试框架:xUnit + Moq + FluentAssertions
35 lines
1.4 KiB
C#
35 lines
1.4 KiB
C#
using AssetManager.Data;
|
|
using AssetManager.Models.DTOs;
|
|
|
|
namespace AssetManager.Data.Repositories;
|
|
|
|
/// <summary>
|
|
/// 投资组合仓储接口
|
|
/// </summary>
|
|
public interface IPortfolioRepository
|
|
{
|
|
// ===== Portfolio =====
|
|
Task<Portfolio?> GetByIdAsync(string id, string userId);
|
|
Task<List<Portfolio>> GetByUserIdAsync(string userId);
|
|
Task<Portfolio> CreateAsync(Portfolio portfolio);
|
|
Task<bool> UpdateAsync(Portfolio portfolio);
|
|
Task<bool> DeleteAsync(string id, string userId);
|
|
|
|
// ===== Position =====
|
|
Task<List<Position>> GetPositionsByPortfolioIdAsync(string portfolioId);
|
|
Task<Position?> GetPositionAsync(string portfolioId, string stockCode);
|
|
Task<Position> CreatePositionAsync(Position position);
|
|
Task<bool> UpdatePositionAsync(Position position);
|
|
Task<bool> DeletePositionAsync(string positionId);
|
|
|
|
// ===== Transaction =====
|
|
Task<List<Transaction>> GetTransactionsAsync(string portfolioId, int limit, int offset);
|
|
Task<int> GetTransactionCountAsync(string portfolioId);
|
|
Task<Transaction> CreateTransactionAsync(Transaction transaction);
|
|
|
|
// ===== NavHistory =====
|
|
Task<List<PortfolioNavHistory>> GetNavHistoryAsync(string portfolioId, DateTime? startDate, DateTime? endDate);
|
|
Task<int> DeleteNavHistoryAfterDateAsync(string portfolioId, DateTime date);
|
|
Task<int> CreateNavHistoryBatchAsync(List<PortfolioNavHistory> records);
|
|
}
|