Initial commit: Happy Up monorepo through Sprint 5.
Document-driven MVP with FastAPI backend, Vue H5, WeChat mini shell, product demo, and Docker dev stack. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.db.models import Report
|
||||
from app.mock_data import MOCK_MOVEMENT_REPORT
|
||||
from app.services.videos import verify_child_owner
|
||||
|
||||
|
||||
RISK_LABELS = {
|
||||
"low": "正常",
|
||||
"medium": "中度关注",
|
||||
"high": "高度关注",
|
||||
"review_required": "建议复核",
|
||||
}
|
||||
|
||||
METRIC_LEVEL_LABELS = {
|
||||
"medium": "中度",
|
||||
"low": "轻度",
|
||||
"normal": "正常",
|
||||
"high": "重度",
|
||||
}
|
||||
|
||||
|
||||
def report_to_dict(report: Report) -> dict:
|
||||
if report.report_type == "movement_scoring" and report.metrics:
|
||||
stored = report.metrics[0] if isinstance(report.metrics, list) else report.metrics
|
||||
if isinstance(stored, dict) and "score" in stored:
|
||||
return stored
|
||||
return {**MOCK_MOVEMENT_REPORT, "id": report.id, "childId": report.child_id, "taskId": report.task_id}
|
||||
|
||||
return {
|
||||
"id": report.id,
|
||||
"childId": report.child_id,
|
||||
"taskId": report.task_id,
|
||||
"riskLevel": report.risk_level,
|
||||
"summary": report.summary,
|
||||
"metrics": report.metrics,
|
||||
"recommendations": report.recommendations,
|
||||
"disclaimer": report.disclaimer,
|
||||
"reviewedBy": report.reviewed_by,
|
||||
}
|
||||
|
||||
|
||||
def get_report_for_user(db: Session, user_id: int, report_id: int) -> Report | None:
|
||||
report = db.get(Report, report_id)
|
||||
if not report:
|
||||
return None
|
||||
if not verify_child_owner(db, user_id, report.child_id):
|
||||
return None
|
||||
return report
|
||||
|
||||
|
||||
def list_reports_for_child(
|
||||
db: Session, user_id: int, child_id: int, limit: int = 10
|
||||
) -> list[Report] | None:
|
||||
if not verify_child_owner(db, user_id, child_id):
|
||||
return None
|
||||
return list(
|
||||
db.scalars(
|
||||
select(Report)
|
||||
.where(Report.child_id == child_id)
|
||||
.order_by(Report.id.desc())
|
||||
.limit(limit)
|
||||
).all()
|
||||
)
|
||||
Reference in New Issue
Block a user