mini_message.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """小程序端消息(与运营端共用 biz_message 表,仅查当前用户)"""
  2. from fastapi import APIRouter, Depends, Query
  3. from sqlalchemy.orm import Session
  4. from app.core.database import get_db
  5. from app.core.auth import get_current_user
  6. from app.core.response import success_response, error_response
  7. from app.api.message import message_crud, BizMessage
  8. router = APIRouter(prefix="/api/mini/message", tags=["小程序端-消息"])
  9. def _to_response(message: BizMessage) -> dict:
  10. return {
  11. "id": message.id,
  12. "receiverId": message.receiver_id,
  13. "receiverName": message.receiver_name,
  14. "messageType": message.message_type,
  15. "title": message.title,
  16. "content": message.content,
  17. "isRead": message.is_read,
  18. "readTime": str(message.read_time) if message.read_time else None,
  19. "createAt": str(message.create_at) if message.create_at else None,
  20. }
  21. @router.get("/list", response_model=dict)
  22. def mini_message_list(
  23. page: int = Query(1, ge=1),
  24. pageSize: int = Query(20, ge=1, le=100),
  25. messageType: str = None,
  26. isRead: int = None,
  27. db: Session = Depends(get_db),
  28. current_user: dict = Depends(get_current_user),
  29. ):
  30. role = current_user.get("role")
  31. if role not in ("client", "supplier", "deliver"):
  32. return error_response(403, "无权限")
  33. receiver_id = current_user.get("user_id")
  34. items, total = message_crud.get_list(
  35. db=db,
  36. receiver_id=receiver_id,
  37. message_type=messageType,
  38. is_read=isRead,
  39. page=page,
  40. page_size=pageSize,
  41. )
  42. return success_response({
  43. "list": [_to_response(item) for item in items],
  44. "total": total,
  45. "page": page,
  46. "pageSize": pageSize,
  47. "totalPages": (total + pageSize - 1) // pageSize if total else 0,
  48. })
  49. @router.get("/unread-count", response_model=dict)
  50. def mini_unread_count(
  51. db: Session = Depends(get_db),
  52. current_user: dict = Depends(get_current_user),
  53. ):
  54. role = current_user.get("role")
  55. if role not in ("client", "supplier", "deliver"):
  56. return error_response(403, "无权限")
  57. count = message_crud.get_unread_count(db, current_user.get("user_id"))
  58. return success_response({"count": count})