feat(feedback): implement user feedback collection system with email reporting

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
This commit is contained in:
qzl
2026-04-20 12:49:54 +08:00
parent 913ed26f8d
commit 6a2a9d2c87
46 changed files with 4768 additions and 9 deletions
+2
View File
@@ -110,6 +110,7 @@ class SupabaseService(BaseServiceProvider):
buckets = [
(config.storage.attachment.bucket, False),
(config.storage.avatar.bucket, True),
(config.storage.feedback.bucket, False),
]
def _check_and_create() -> None:
@@ -170,6 +171,7 @@ class SupabaseService(BaseServiceProvider):
allowed_buckets = {
config.storage.attachment.bucket,
config.storage.avatar.bucket,
config.storage.feedback.bucket,
}
if bucket not in allowed_buckets:
raise RuntimeError("Invalid storage bucket")