当前位置:   article > 正文

FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"

之前FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发分享了留言开发,这次我们分享查看留言

梳理这里的逻辑,这个接口要依赖登录。

梳理后发现,之前在接口设计的时候,有些欠缺,查看留言,是查看单个的留言,查看留言后,对应的留言变成已读状态。那么我们这个都需要传递一个参数,这个参数应该是留言的id。

1.判断用户是否登录

2.判断对应id是否存在,不存在返回对应的错误

3.判断是否是当前用户的留言,或者接受的方是自己

4.返回内容后,同时变成已读

5.如果已读且回复了,要带回复的内容

在之前设计返回状态码的时候,发现状态码有缺失,我们增加下缺失的。

状态码含义
200成功
100601留言不存在
100602权限不足

首先是pydantic参数模型以及响应模型

  1. class Messages(BaseModel):
  2. id: int
  3. send_user: str
  4. accept_user: str
  5. read: bool
  6. send_time: str
  7. add_time: str
  8. context: str
  9. class MessagePid(Messages):
  10. pid: int
  11. class MessageOne(Messages):
  12. pid: List[MessagePid] = []

然后实现逻辑:message_method.py增加如下

  1. def get_msg_by_id(db, msg_id):
  2. return db.query(Message).filter(Message.id == msg_id, Message.status == 0).first()
  3. def get_pid_message(db, msg_id):
  4. # 获取某条消息被回复的所有消息
  5. return db.query(Message).filter(Message.pid == msg_id, Message.status == 0).all()
  6. def view_msg_method(msg_id: int, user: UsernameRole, db: Session):
  7. """查看留言(回复的消息和留言在一个表里,结构一样)"""
  8. msg = get_msg_by_id(db, msg_id)
  9. if not msg:
  10. return response(code=100601, message="留言不存在")
  11. db_user = get_by_username(db, user.username)
  12. if msg.accept_user != db_user.id:
  13. return response(code=100602, message="权限不足")
  14. msg.read = True
  15. db.commit()
  16. db.refresh(msg)
  17. all_pid_messages = get_pid_message(db, msg_id) # 查询所有回复的消息
  18. message_one = MessageOne(
  19. id=msg.id,
  20. send_user=get_by_uid(db, msg.send_user).username,
  21. accept_user=get_by_uid(db, msg.accept_user).username,
  22. read=msg.read,
  23. send_time=msg.send_time,
  24. add_time=str(msg.add_time),
  25. context=msg.context
  26. )
  27. # ① 留言没有被回复消息
  28. if not all_pid_messages:
  29. return response(data=message_one.dict())
  30. # ② 留言有被回复的消息,那么需要将回复的消息带回
  31. to_client = []
  32. for _ in all_pid_messages:
  33. msg_pid = MessagePid(
  34. id=msg.id,
  35. send_user=get_by_uid(db, _.send_user).username,
  36. accept_user=get_by_uid(db, _.accept_user).username,
  37. read=_.read,
  38. send_time=_.send_time,
  39. add_time=str(_.add_time),
  40. context=_.context,
  41. pid=_.pid
  42. )
  43. to_client.append(msg_pid)
  44. message_one.pid = to_client
  45. return response(data=message_one.dict())

最后实现接口

  1. @message_router.get("/", summary="查看留言")
  2. async def view_message(
  3. msg_id: int,
  4. user: UsernameRole = Depends(get_current_user),
  5. db: Session = Depends(create_db)
  6. ):
  7. return view_msg_method(msg_id, user, db)

测试:

以上则是实现查看留言的接口逻辑

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/885588
推荐阅读
相关标签
  

闽ICP备14008679号