Files
Mutual_Fund/service/holdings.py
T

38 lines
1.2 KiB
Python
Raw Normal View History

2026-09-11 11:05:52 +08:00
"""持仓服务:查询当前客户持仓(路由层只编排,不碰数据/逻辑)。"""
from __future__ import annotations
from sqlalchemy.ext.asyncio import AsyncSession
from model.sys_user import SysUser
from repositories.fin_holdings import FinHoldingsRepo
from schemas.holdings import HoldingResp
from utils.exceptions import ForbiddenError
_HOLDING_STATUS = "持有中"
async def get_holdings(db: AsyncSession, user: SysUser) -> list[HoldingResp]:
"""查询当前客户的在持持仓(status=持有中)。
- 仅客户账号可查(员工共用 sys_user,但无持仓);
- 无持仓返回空列表,不报错。
"""
if user.user_type != "CUSTOMER":
raise ForbiddenError("仅客户账号可查询持仓")
holdings = await FinHoldingsRepo(db).list_by_customer(user.id, _HOLDING_STATUS)
return [
HoldingResp(
id=h.id,
customer_id=h.customer_id,
product_id=h.product_id,
shares=h.shares,
cost_amount=h.cost_amount,
current_value=h.current_value,
profit_loss=h.profit_loss,
profit_ratio=h.profit_ratio,
status=h.status,
)
for h in holdings
]