Files
Neo-ZQYY/apps/backend/app/routers/xcx_board.py
Neo 6f8f12314f feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本
包含多个会话的累积代码变更:
- backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔
- admin-web: ETL 状态页、任务管理、调度配置、登录优化
- miniprogram: 看板页面、聊天集成、UI 组件、导航更新
- etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强
- tenant-admin: 项目初始化
- db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8)
- packages/shared: 枚举和工具函数更新
- tools: 数据库工具、报表生成、健康检查
- docs: PRD/架构/部署/合约文档更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:03:48 +08:00

85 lines
2.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI_CHANGELOG
# - 2026-03-20 | Prompt: R3 项目类型筛选接口重建 | SkillFilterEnum/ProjectFilterEnum
# 默认值从 .all 改为 .ALL与新枚举值一致。
"""
看板路由BOARD-1助教、BOARD-2客户、BOARD-3财务
前缀 /api/xcx/board由 main.py 注册。
"""
from __future__ import annotations
from fastapi import APIRouter, Depends, Query
from app.auth.dependencies import CurrentUser
from app.middleware.permission import require_permission
from app.schemas.xcx_board import (
AreaFilterEnum,
BoardTimeEnum,
CoachBoardResponse,
CoachSortEnum,
CustomerBoardResponse,
CustomerDimensionEnum,
FinanceBoardResponse,
FinanceTimeEnum,
ProjectFilterEnum,
SkillFilterEnum,
)
from app.services import board_service
from app.trace.decorators import trace_service
router = APIRouter(prefix="/api/xcx/board", tags=["xcx-board"])
@router.get("/coaches", response_model=CoachBoardResponse)
@trace_service("获取助教看板", "Get coach board")
async def get_coach_board(
sort: CoachSortEnum = Query(default=CoachSortEnum.perf_desc),
skill: SkillFilterEnum = Query(default=SkillFilterEnum.ALL),
time: BoardTimeEnum = Query(default=BoardTimeEnum.month),
page: int = Query(default=1, ge=1),
page_size: int = Query(default=20, ge=1, le=100),
user: CurrentUser = Depends(require_permission("view_board_coach")),
):
"""助教看板BOARD-1"""
return await board_service.get_coach_board(
sort=sort.value, skill=skill.value, time=time.value,
page=page, page_size=page_size, site_id=user.site_id,
)
@router.get("/customers", response_model=CustomerBoardResponse)
@trace_service("获取客户看板", "Get customer board")
async def get_customer_board(
dimension: CustomerDimensionEnum = Query(default=CustomerDimensionEnum.recall),
project: ProjectFilterEnum = Query(default=ProjectFilterEnum.ALL),
page: int = Query(default=1, ge=1),
page_size: int = Query(default=20, ge=1, le=100),
user: CurrentUser = Depends(require_permission("view_board_customer")),
):
"""客户看板BOARD-2"""
return await board_service.get_customer_board(
dimension=dimension.value, project=project.value,
page=page, page_size=page_size, site_id=user.site_id,
)
@router.get(
"/finance",
response_model=FinanceBoardResponse,
response_model_exclude_none=True,
)
@trace_service("获取财务看板", "Get finance board")
async def get_finance_board(
time: FinanceTimeEnum = Query(default=FinanceTimeEnum.month),
area: AreaFilterEnum = Query(default=AreaFilterEnum.all),
compare: int = Query(default=0, ge=0, le=1),
user: CurrentUser = Depends(require_permission("view_board_finance")),
):
"""财务看板BOARD-3"""
return await board_service.get_finance_board(
time=time.value, area=area.value, compare=compare,
site_id=user.site_id,
)