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>
|
||||||
/// 删除投资组合
|
/// 删除投资组合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -11,6 +11,16 @@ public class CreatePortfolioRequest
|
|||||||
public List<StockItem>? Stocks { get; set; }
|
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>
|
||||||
/// 股票项
|
/// 股票项
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -47,6 +47,11 @@ public interface IPortfolioFacade
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
Task<bool> DeletePortfolioAsync(string portfolioId, string userId);
|
Task<bool> DeletePortfolioAsync(string portfolioId, string userId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新投资组合
|
||||||
|
/// </summary>
|
||||||
|
Task<bool> UpdatePortfolioAsync(string portfolioId, UpdatePortfolioRequest request, string userId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建投资组合(含用户验证和币种校验)
|
/// 创建投资组合(含用户验证和币种校验)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -6,6 +6,7 @@ public interface IPortfolioService
|
|||||||
{
|
{
|
||||||
CreatePortfolioResponse CreatePortfolio(CreatePortfolioRequest request, string userId);
|
CreatePortfolioResponse CreatePortfolio(CreatePortfolioRequest request, string userId);
|
||||||
Task<CreatePortfolioResponse> CreatePortfolioAsync(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);
|
List<PortfolioListItem> GetPortfolios(string userId);
|
||||||
Task<List<PortfolioListItem>> GetPortfolioListAsync(string userId);
|
Task<List<PortfolioListItem>> GetPortfolioListAsync(string userId);
|
||||||
TotalAssetsResponse GetTotalAssets(string userId);
|
TotalAssetsResponse GetTotalAssets(string userId);
|
||||||
|
|||||||
@ -146,6 +146,12 @@ public class PortfolioFacade : IPortfolioFacade
|
|||||||
return await _portfolioService.DeletePortfolioAsync(portfolioId, userId);
|
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>
|
||||||
/// 创建投资组合(含用户验证和币种校验)
|
/// 创建投资组合(含用户验证和币种校验)
|
||||||
/// </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)
|
public async Task<bool> DeletePortfolioAsync(string portfolioId, string userId)
|
||||||
{
|
{
|
||||||
var portfolio = _db.Queryable<Portfolio>()
|
var portfolio = _db.Queryable<Portfolio>()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user