AssetManager.API/AssetManager.Data/Repositories/IPortfolioRepository.cs
OpenClaw Agent 4ce29a1036 refactor: 架构优化 P0-P3
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
2026-03-15 12:54:05 +00:00

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);
}