feat: 添加组合更新接口,支持修改名称/策略/状态
This commit is contained in:
parent
9f82ad0a81
commit
5bc318725d
@ -171,6 +171,33 @@ public class PortfolioController : ControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新投资组合
|
||||
/// </summary>
|
||||
[HttpPut("{id}")]
|
||||
public async Task<ActionResult<ApiResponse<object>>> UpdatePortfolio(string id, [FromBody] UpdatePortfolioRequest request)
|
||||
{
|
||||
var userId = GetCurrentUserId();
|
||||
var success = await _portfolioFacade.UpdatePortfolioAsync(id, request, userId);
|
||||
|
||||
if (!success)
|
||||
{
|
||||
return NotFound(new ApiResponse<object>
|
||||
{
|
||||
code = Models.StatusCodes.NotFound,
|
||||
data = null,
|
||||
message = "组合不存在"
|
||||
});
|
||||
}
|
||||
|
||||
return Ok(new ApiResponse<object>
|
||||
{
|
||||
code = Models.StatusCodes.Success,
|
||||
data = null,
|
||||
message = "更新成功"
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除投资组合
|
||||
/// </summary>
|
||||
|
||||
@ -11,6 +11,16 @@ public class CreatePortfolioRequest
|
||||
public List<StockItem>? Stocks { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新投资组合请求
|
||||
/// </summary>
|
||||
public class UpdatePortfolioRequest
|
||||
{
|
||||
public string? Name { get; set; }
|
||||
public string? StrategyId { get; set; }
|
||||
public string? Status { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 股票项
|
||||
/// </summary>
|
||||
|
||||
@ -47,6 +47,11 @@ public interface IPortfolioFacade
|
||||
/// </summary>
|
||||
Task<bool> DeletePortfolioAsync(string portfolioId, string userId);
|
||||
|
||||
/// <summary>
|
||||
/// 更新投资组合
|
||||
/// </summary>
|
||||
Task<bool> UpdatePortfolioAsync(string portfolioId, UpdatePortfolioRequest request, string userId);
|
||||
|
||||
/// <summary>
|
||||
/// 创建投资组合(含用户验证和币种校验)
|
||||
/// </summary>
|
||||
|
||||
@ -6,6 +6,7 @@ public interface IPortfolioService
|
||||
{
|
||||
CreatePortfolioResponse CreatePortfolio(CreatePortfolioRequest request, string userId);
|
||||
Task<CreatePortfolioResponse> CreatePortfolioAsync(CreatePortfolioRequest request, string userId);
|
||||
Task<bool> UpdatePortfolioAsync(string portfolioId, UpdatePortfolioRequest request, string userId);
|
||||
List<PortfolioListItem> GetPortfolios(string userId);
|
||||
Task<List<PortfolioListItem>> GetPortfolioListAsync(string userId);
|
||||
TotalAssetsResponse GetTotalAssets(string userId);
|
||||
|
||||
@ -146,6 +146,12 @@ public class PortfolioFacade : IPortfolioFacade
|
||||
return await _portfolioService.DeletePortfolioAsync(portfolioId, userId);
|
||||
}
|
||||
|
||||
public async Task<bool> UpdatePortfolioAsync(string portfolioId, UpdatePortfolioRequest request, string userId)
|
||||
{
|
||||
_logger.LogInformation("更新组合: {PortfolioId}", portfolioId);
|
||||
return await _portfolioService.UpdatePortfolioAsync(portfolioId, request, userId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建投资组合(含用户验证和币种校验)
|
||||
/// </summary>
|
||||
|
||||
@ -739,6 +739,40 @@ public class PortfolioService : IPortfolioService
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<bool> UpdatePortfolioAsync(string portfolioId, UpdatePortfolioRequest request, string userId)
|
||||
{
|
||||
var portfolio = _db.Queryable<Portfolio>()
|
||||
.Where(p => p.Id == portfolioId && p.UserId == userId)
|
||||
.First();
|
||||
|
||||
if (portfolio == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// 更新字段
|
||||
if (!string.IsNullOrEmpty(request.Name))
|
||||
{
|
||||
portfolio.Name = request.Name;
|
||||
}
|
||||
|
||||
// 策略可以为空(解绑策略)
|
||||
portfolio.StrategyId = request.StrategyId;
|
||||
|
||||
if (!string.IsNullOrEmpty(request.Status))
|
||||
{
|
||||
portfolio.Status = request.Status;
|
||||
}
|
||||
|
||||
portfolio.UpdatedAt = DateTime.Now;
|
||||
|
||||
_db.Updateable(portfolio).ExecuteCommand();
|
||||
_logger.LogInformation("更新投资组合: {PortfolioId}, 名称: {Name}, 策略: {StrategyId}",
|
||||
portfolioId, portfolio.Name, portfolio.StrategyId ?? "无");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<bool> DeletePortfolioAsync(string portfolioId, string userId)
|
||||
{
|
||||
var portfolio = _db.Queryable<Portfolio>()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user