在前后端开发联调前 的提交20260223
This commit is contained in:
57
apps/backend/app/routers/member_birthday.py
Normal file
57
apps/backend/app/routers/member_birthday.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""
|
||||
会员生日手动补录路由。
|
||||
|
||||
- POST /api/member-birthday — 助教提交会员生日(UPSERT)
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
|
||||
from app.database import get_connection
|
||||
from app.schemas.member_birthday import MemberBirthdaySubmit
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["会员生日"])
|
||||
|
||||
|
||||
@router.post("/member-birthday")
|
||||
async def submit_member_birthday(body: MemberBirthdaySubmit):
|
||||
"""
|
||||
助教提交会员生日(UPSERT)。
|
||||
|
||||
同一 (member_id, assistant_id) 组合重复提交时,
|
||||
更新 birthday_value 和 recorded_at,保留其他助教的记录。
|
||||
"""
|
||||
sql = """
|
||||
INSERT INTO member_birthday_manual
|
||||
(member_id, birthday_value, recorded_by_assistant_id, recorded_by_name, site_id)
|
||||
VALUES (%s, %s, %s, %s, %s)
|
||||
ON CONFLICT (member_id, recorded_by_assistant_id)
|
||||
DO UPDATE SET
|
||||
birthday_value = EXCLUDED.birthday_value,
|
||||
recorded_at = NOW()
|
||||
"""
|
||||
conn = get_connection()
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(sql, (
|
||||
body.member_id,
|
||||
body.birthday_value,
|
||||
body.assistant_id,
|
||||
body.assistant_name,
|
||||
body.site_id,
|
||||
))
|
||||
conn.commit()
|
||||
except Exception:
|
||||
conn.rollback()
|
||||
logger.exception("会员生日 UPSERT 失败: member_id=%s", body.member_id)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail="生日提交失败,请稍后重试",
|
||||
)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
return {"status": "ok"}
|
||||
Reference in New Issue
Block a user