"""小程序端消息(与运营端共用 biz_message 表,仅查当前用户)""" from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.core.database import get_db from app.core.auth import get_current_user from app.core.response import success_response, error_response from app.api.message import message_crud, BizMessage router = APIRouter(prefix="/api/mini/message", tags=["小程序端-消息"]) def _to_response(message: BizMessage) -> dict: return { "id": message.id, "receiverId": message.receiver_id, "receiverName": message.receiver_name, "messageType": message.message_type, "title": message.title, "content": message.content, "isRead": message.is_read, "readTime": str(message.read_time) if message.read_time else None, "createAt": str(message.create_at) if message.create_at else None, } @router.get("/list", response_model=dict) def mini_message_list( page: int = Query(1, ge=1), pageSize: int = Query(20, ge=1, le=100), messageType: str = None, isRead: int = None, db: Session = Depends(get_db), current_user: dict = Depends(get_current_user), ): role = current_user.get("role") if role not in ("client", "supplier", "deliver"): return error_response(403, "无权限") receiver_id = current_user.get("user_id") items, total = message_crud.get_list( db=db, receiver_id=receiver_id, message_type=messageType, is_read=isRead, page=page, page_size=pageSize, ) return success_response({ "list": [_to_response(item) for item in items], "total": total, "page": page, "pageSize": pageSize, "totalPages": (total + pageSize - 1) // pageSize if total else 0, }) @router.get("/unread-count", response_model=dict) def mini_unread_count( db: Session = Depends(get_db), current_user: dict = Depends(get_current_user), ): role = current_user.get("role") if role not in ("client", "supplier", "deliver"): return error_response(403, "无权限") count = message_crud.get_unread_count(db, current_user.get("user_id")) return success_response({"count": count})