6a2a9d2c87
Backend: - Add user_feedback table with RLS policy - Create feedback submission API (multipart/form-data) - Implement xlsx report generation with embedded images - Add scheduled email delivery via Feishu SMTP - Create HTML email templates (daily_report, no_feedback) Frontend: - Add feedback screen with type selection and image picker - Support anonymous submission via skipAuth flag - Collect device info and app version Protocol: - Document feedback API contract and error codes - Update http-error-codes.md with FEEDBACK_* codes
63 lines
1.4 KiB
TOML
63 lines
1.4 KiB
TOML
[project]
|
|
name = "eryao"
|
|
version = "0.1.0"
|
|
description = "觅爻签问后端服务"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"ag-ui-protocol==0.1.13",
|
|
"agentscope>=1.0.18",
|
|
"aiosmtplib>=5.1.0",
|
|
"alembic==1.18.4",
|
|
"asyncpg==0.30.0",
|
|
"cryptography==46.0.3",
|
|
"dashscope>=1.25.15",
|
|
"email-validator==2.3.0",
|
|
"fastapi==0.135.1",
|
|
"lunar-python>=1.4.8",
|
|
"openpyxl>=3.1.5",
|
|
"pillow>=12.2.0",
|
|
"pydantic==2.12.5",
|
|
"pydantic-settings==2.13.1",
|
|
"pyjwt==2.11.0",
|
|
"python-multipart>=0.0.22",
|
|
"pyyaml==6.0.3",
|
|
"redis==7.2.1",
|
|
"sqlalchemy[asyncio]==2.0.48",
|
|
"structlog==25.5.0",
|
|
"supabase==2.28.0",
|
|
"taskiq==0.12.1",
|
|
"taskiq-redis==1.2.2",
|
|
"uvicorn[standard]==0.41.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"httpx==0.27.2",
|
|
"pytest==9.0.2",
|
|
"pytest-asyncio==1.3.0",
|
|
"pytest-cov==7.0.0",
|
|
]
|
|
|
|
[[tool.uv.index]]
|
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
default = true
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["backend/tests"]
|
|
addopts = "-q --import-mode=importlib"
|
|
asyncio_mode = "auto"
|
|
pythonpath = ["backend/src"]
|
|
markers = ["integration: integration test requiring live backend and workers"]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"basedpyright==1.38.2",
|
|
"pre-commit==4.5.1",
|
|
]
|
|
|
|
[tool.basedpyright]
|
|
reportImplicitRelativeImport = "warning"
|
|
reportMissingTypeArgument = "warning"
|
|
reportConstantRedefinition = "warning"
|
|
reportMissingImports = "warning"
|