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:
parent
a0817081a8
commit
f7d346c0ae
@ -270,18 +270,56 @@ public class PortfolioController : ControllerBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建交易(买入/卖出)
|
/// 计算投资组合当日净值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("{id}/transactions")]
|
[HttpPost("{id}/nav-history/calculate")]
|
||||||
public async Task<ActionResult<ApiResponse<TransactionItem>>> CreateTransaction(
|
public async Task<ActionResult<ApiResponse<object>>> CalculateDailyNav(string id)
|
||||||
string id,
|
|
||||||
[FromBody] CreateTransactionRequest request)
|
|
||||||
{
|
{
|
||||||
var userId = GetCurrentUserId();
|
var userId = GetCurrentUserId();
|
||||||
|
|
||||||
try
|
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>
|
return Ok(new ApiResponse<TransactionItem>
|
||||||
{
|
{
|
||||||
code = Models.StatusCodes.Success,
|
code = Models.StatusCodes.Success,
|
||||||
|
|||||||
@ -61,4 +61,9 @@ public interface IPortfolioFacade
|
|||||||
/// 获取用户总资产
|
/// 获取用户总资产
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Task<TotalAssetsResponse> GetTotalAssetsAsync(string userId);
|
Task<TotalAssetsResponse> GetTotalAssetsAsync(string userId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算投资组合当日净值
|
||||||
|
/// </summary>
|
||||||
|
Task<bool> CalculateDailyNavAsync(string portfolioId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -195,4 +195,13 @@ public class PortfolioFacade : IPortfolioFacade
|
|||||||
_logger.LogInformation("获取用户总资产: {UserId}", userId);
|
_logger.LogInformation("获取用户总资产: {UserId}", userId);
|
||||||
return await _portfolioService.GetTotalAssetsAsync(userId);
|
return await _portfolioService.GetTotalAssetsAsync(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算投资组合当日净值
|
||||||
|
/// </summary>
|
||||||
|
public async Task<bool> CalculateDailyNavAsync(string portfolioId)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("计算投资组合当日净值: {PortfolioId}", portfolioId);
|
||||||
|
return await _navService.CalculateAndSaveDailyNavAsync(portfolioId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user