40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Annotated
|
||
|
|
|
||
|
|
from fastapi import APIRouter, Depends, Query
|
||
|
|
from sqlalchemy.orm import Session
|
||
|
|
|
||
|
|
from app.api.deps import CurrentUserContext, get_current_user, get_db
|
||
|
|
from app.schemas.employee_profile import EmployeeProfileLatestRead
|
||
|
|
from app.services.employee_behavior_profile_service import EmployeeBehaviorProfileService
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/employee-profiles")
|
||
|
|
DbSession = Annotated[Session, Depends(get_db)]
|
||
|
|
CurrentUser = Annotated[CurrentUserContext, Depends(get_current_user)]
|
||
|
|
|
||
|
|
|
||
|
|
@router.get(
|
||
|
|
"/{employee_id}/latest",
|
||
|
|
response_model=EmployeeProfileLatestRead,
|
||
|
|
summary="读取员工最新业务行为画像",
|
||
|
|
description="返回员工在指定场景下的最新画像快照,审批场景默认只展示费用支出和流程质量画像。",
|
||
|
|
)
|
||
|
|
def get_employee_latest_profile(
|
||
|
|
employee_id: str,
|
||
|
|
db: DbSession,
|
||
|
|
current_user: CurrentUser,
|
||
|
|
scene: Annotated[str, Query(max_length=50)] = "approval",
|
||
|
|
claim_id: Annotated[str | None, Query(max_length=80)] = None,
|
||
|
|
window_days: Annotated[int, Query(ge=1, le=365)] = 90,
|
||
|
|
expense_type_scope: Annotated[str, Query(max_length=50)] = "overall",
|
||
|
|
) -> EmployeeProfileLatestRead:
|
||
|
|
del current_user
|
||
|
|
return EmployeeBehaviorProfileService(db).get_latest_profile(
|
||
|
|
employee_id=employee_id,
|
||
|
|
scene=scene,
|
||
|
|
claim_id=claim_id,
|
||
|
|
window_days=window_days,
|
||
|
|
expense_type_scope=expense_type_scope,
|
||
|
|
)
|