4512b6ecac
用户反馈后台:区分反馈类型(比价反馈/普通反馈)+ 审核可给用户留言;提现后台:按提现类型筛选。 - feedback 表加 source(profile/comparison)/scene/admin_reply + 迁移;提交接口 /api/v1/feedback 接收 source/scene,来源判定显式 source 优先、否则据 scene 有无派生(有=comparison); /records 带回 scene + admin_reply。 - admin 反馈:列表加「反馈类型」筛选;采纳/拒绝支持存 admin_reply(给用户的回复,用户端可见); FeedbackOut 带出 source/scene/admin_reply。 - admin 提现:WithdrawOut 暴露 source,列表加「提现类型」筛选(coin_cash=福利页提现 / invite_cash=邀请提现)。 - 补 4 项测试:来源派生、回复存取、反馈按类型筛选、提现按类型筛选。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: zzhyyyyy <2685922758@qq.com> Reviewed-on: #105 Co-authored-by: zhuzihao <zhuzihao@wonderable.ai> Co-committed-by: zhuzihao <zhuzihao@wonderable.ai>
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
"""feedback 表读写。"""
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.rewards import CN_TZ
|
|
from app.models.feedback import Feedback
|
|
|
|
|
|
def create_feedback(
|
|
db: Session,
|
|
*,
|
|
user_id: int,
|
|
content: str,
|
|
contact: str,
|
|
images: list[str] | None,
|
|
source: str = "profile",
|
|
scene: str | None = None,
|
|
app_version: str | None = None,
|
|
device_model: str | None = None,
|
|
rom_name: str | None = None,
|
|
android_version: str | None = None,
|
|
) -> Feedback:
|
|
fb = Feedback(
|
|
user_id=user_id,
|
|
content=content,
|
|
contact=contact,
|
|
source=source,
|
|
scene=scene or None,
|
|
images=images or None,
|
|
app_version=app_version or None,
|
|
device_model=device_model or None,
|
|
rom_name=rom_name or None,
|
|
android_version=android_version or None,
|
|
status="pending",
|
|
created_at=datetime.now(CN_TZ).replace(tzinfo=None),
|
|
)
|
|
db.add(fb)
|
|
db.commit()
|
|
db.refresh(fb)
|
|
return fb
|
|
|
|
|
|
def list_feedback(db: Session, *, user_id: int) -> list[Feedback]:
|
|
stmt = (
|
|
select(Feedback)
|
|
.where(Feedback.user_id == user_id)
|
|
.order_by(Feedback.created_at.desc(), Feedback.id.desc())
|
|
)
|
|
return list(db.execute(stmt).scalars().all())
|