fix: API路由重构以匹配前端期望

1. 创建交易: POST /api/v1/portfolio/{id}/transactions -> POST /api/v1/portfolio/transactions
   - portfolioId 改为在 body 中传递

2. 新增计算净值端点: POST /api/v1/portfolio/{id}/nav-history/calculate

前端 API 格式已完全对齐
This commit is contained in:
OpenClaw Agent 2026-03-15 14:35:26 +00:00
parent a0817081a8
commit f7d346c0ae
3 changed files with 58 additions and 6 deletions

View File

@ -270,18 +270,56 @@ public class PortfolioController : ControllerBase
}
/// <summary>
/// 创建交易(买入/卖出)
/// 计算投资组合当日净值
/// </summary>
[HttpPost("{id}/transactions")]
public async Task<ActionResult<ApiResponse<TransactionItem>>> CreateTransaction(
string id,
[FromBody] CreateTransactionRequest request)
[HttpPost("{id}/nav-history/calculate")]
public async Task<ActionResult<ApiResponse<object>>> CalculateDailyNav(string id)
{
var userId = GetCurrentUserId();
try
{
var transaction = await _portfolioFacade.CreateTransactionAsync(id, request, userId);
var success = await _portfolioFacade.CalculateDailyNavAsync(id);
return Ok(new ApiResponse<object>
{
code = Models.StatusCodes.Success,
data = new { portfolioId = id, calculated = success },
message = success ? "净值计算成功" : "净值计算失败"
});
}
catch (Exception ex)
{
return BadRequest(new ApiResponse<object>
{
code = Models.StatusCodes.BadRequest,
data = null,
message = ex.Message
});
}
}
/// <summary>
/// 创建交易(买入/卖出)
/// </summary>
[HttpPost("transactions")]
public async Task<ActionResult<ApiResponse<TransactionItem>>> CreateTransaction(
[FromBody] CreateTransactionRequest request)
{
var userId = GetCurrentUserId();
if (string.IsNullOrEmpty(request.PortfolioId))
{
return BadRequest(new ApiResponse<TransactionItem>
{
code = Models.StatusCodes.BadRequest,
data = null,
message = "portfolioId 不能为空"
});
}
try
{
var transaction = await _portfolioFacade.CreateTransactionAsync(request.PortfolioId, request, userId);
return Ok(new ApiResponse<TransactionItem>
{
code = Models.StatusCodes.Success,

View File

@ -61,4 +61,9 @@ public interface IPortfolioFacade
/// 获取用户总资产
/// </summary>
Task<TotalAssetsResponse> GetTotalAssetsAsync(string userId);
/// <summary>
/// 计算投资组合当日净值
/// </summary>
Task<bool> CalculateDailyNavAsync(string portfolioId);
}

View File

@ -195,4 +195,13 @@ public class PortfolioFacade : IPortfolioFacade
_logger.LogInformation("获取用户总资产: {UserId}", userId);
return await _portfolioService.GetTotalAssetsAsync(userId);
}
/// <summary>
/// 计算投资组合当日净值
/// </summary>
public async Task<bool> CalculateDailyNavAsync(string portfolioId)
{
_logger.LogInformation("计算投资组合当日净值: {PortfolioId}", portfolioId);
return await _navService.CalculateAndSaveDailyNavAsync(portfolioId);
}
}