交友项目【根据id查询单条动态&发布评论&查询评论列表】

一时失言乱红尘 2023-10-09 18:03 120阅读 0赞

目录

1:根据id查询单条动态

1.1:接口分析

1.2:流程分析

1.3:代码实现

2:发布评论

2.1:接口分析

2.2:流程分析

2.3:代码实现

3:查询评论列表

3.1:接口分析

3.2:流程分析

3.3:代码实现


1:根据id查询单条动态

1.1:接口分析

API 接口文档: http://192.168.136.160:3000/project/19/interface/api/151

553f1480db73420887c9082428b82af6.png

注意: 单条动态 和 查询评论列表 ,同时完成,app端才可以显示内容

f0de3449860d4b5aaada788a8ecdee1c.png

1.2:流程分析

根据id查询对应动态详情信息,接收到前端传来的id信息,到数据库中查询指定的数据,将数据处理封装返回前端,这个功能需要和该动态的所有评论一起实现才能在探花app上显示页面。

1.3:代码实现

接收请求的app服务端

309b5b6f278d4ba0af1f7601bed8472c.png

app-server服务:controller层

  1. @GetMapping("/{id}")
  2. public ResponseEntity findmovement(@PathVariable("id") ObjectId id){
  3. MovementVo findmovement = movementService.findmovement(id);
  4. System.out.println(findmovement);
  5. return ResponseEntity.ok(findmovement);
  6. }

app-server服务:service层

  1. public MovementVo findmovement(ObjectId id) {
  2. //处理评论
  3. Movement movement = movementApi.findmovement(id);
  4. UserInfo userInfo = userInfoApi.findUser(movement.getUserId());
  5. MovementVo movementVo = new MovementVo(movement.getId().toString(),
  6. userInfo.getId(),userInfo.getAvatar(),userInfo.getNickname(),userInfo.getGender(),Integer.valueOf(userInfo.getAge()),
  7. userInfo.getTags().split(","),movement.getTextContent(),movement.getMedias(),"500米",movement.getCreated().toString()
  8. ,movement.getLikeCount(),movement.getCommentCount(),movement.getLoveCount(),0,0);
  9. return movementVo;
  10. }

接口模块:专门封装接口的模块

  1. Movement findmovement(ObjectId id);
  2. public UserInfo findUser(Long id);

db提供者服务:mysql

  1. @Override
  2. public UserInfo findUser(Long id) {
  3. UserInfo userInfo = this.userInfoMapper.selectById(id);
  4. return userInfo;
  5. }

mongo提供者服务:mongo

  1. @Override
  2. public Movement findmovement(ObjectId id) {
  3. Query query = new Query();
  4. query.addCriteria(Criteria.where("id").is(id));
  5. Movement one = mongoTemplate.findOne(query, Movement.class);
  6. return one;
  7. }

2:发布评论

4d9a859112604eea9346aafdadf7b9f2.png

2.1:接口分析

接口: http://192.168.136.160:3000/project/19/interface/api/154

41c904b2896148a292899d47728da77f.png

2.2:流程分析

接收到前端传入的发布动态参数,将图片信息上传到阿里云上面,将数据处理保存到数据库中。

2.3:代码实现

接收请求的app服务端

309b5b6f278d4ba0af1f7601bed8472c.png

app-server服务:controller层

  1. @PostMapping
  2. public ResponseEntity fabudongtai(@RequestParam("imageContent") List<MultipartFile> imageContent,PostUpdateVo postUpdateVo){
  3. movementService.fabudongtai(imageContent,postUpdateVo,UserHolder.getUserId(),UserHolder.getMobile());
  4. return ResponseEntity.ok(null);
  5. }

app-server服务:service层

  1. public void fabudongtai(List<MultipartFile> imageContent, PostUpdateVo postUpdateVo, Long userId, String mobile) {
  2. for (MultipartFile multipartFile : imageContent) {
  3. String upload = ossTemplate.upload(multipartFile);
  4. System.out.println(upload);
  5. postUpdateVo.getImages().add(upload);
  6. }
  7. movementApi.fabudongtai(postUpdateVo,userId,mobile);
  8. }

接口模块:专门封装接口的模块

  1. void fabudongtai(PostUpdateVo postUpdateVo, Long userId, String mobile);

mongo提供者服务:mongo

  1. @Override
  2. public void fabudongtai(PostUpdateVo postUpdateVo, Long userId, String mobile) {
  3. //保存动态到mongo动态表中
  4. Movement movement = new Movement();
  5. Long movement1 = idWorker.getNextId("movement");
  6. movement.setPid(movement1);
  7. movement.setUserId(userId);
  8. movement.setTextContent(postUpdateVo.getTextContent());
  9. movement.setMedias(postUpdateVo.getImages().toArray(new String[0]));
  10. movement.setState(0);
  11. movement.setLongitude(Double.valueOf(postUpdateVo.getLongitude()));
  12. movement.setLatitude(Double.valueOf(postUpdateVo.getLatitude()));
  13. movement.setLocationName(postUpdateVo.getLocation());
  14. movement.setCreated(new Date().getTime());
  15. //保存动态表
  16. Movement save = mongoTemplate.save(movement);
  17. //查询好友列表
  18. //构建条件
  19. Query query = new Query();
  20. Criteria criteria = Criteria.where("userId").is(userId);
  21. query.addCriteria(criteria);
  22. List<Friend> friends = mongoTemplate.find(query, Friend.class);
  23. //保存时间线数据
  24. for (Friend friend : friends) {
  25. MovementTimeline movementTimeline = new MovementTimeline(save.getCreated(),friend.getFriendId(),save.getId(),save.getUserId());
  26. mongoTemplate.save(movementTimeline);
  27. }
  28. //处理结束
  29. }

3:查询评论列表

3.1:接口分析

接口地址: http://192.168.136.160:3000/project/19/interface/api/178

c59c97da818a43839d912e497206e232.png

3.2:流程分析

通过动态id,到评论表中查找对应的所有评论

3.3:代码实现

接收请求的app服务端

309b5b6f278d4ba0af1f7601bed8472c.png

app-server服务:controller层

  1. @GetMapping
  2. public ResponseEntity findComments(@RequestParam("movementId") ObjectId movementId, PublicPageVo publicPageVo){
  3. System.out.println(movementId);
  4. ResultList comments = commentService.findComments(movementId, publicPageVo);
  5. return ResponseEntity.ok(comments);
  6. }

app-server服务:service层

  1. public ResultList findComments(ObjectId movementId, PublicPageVo publicPageVo) {
  2. ResultList comments = commentApi.findComments(movementId, publicPageVo);
  3. List<Comment> items = comments.getItems();
  4. //传入用户APi
  5. Map<Long, UserInfo> userInfoMap = userInfoApi.findUserByids(items.stream().map(comment -> comment.getUserId()).collect(Collectors.toList()));
  6. List<CommentVo> commentVoList = new ArrayList<>();
  7. //处理返回数据
  8. for (Comment comment : items) {
  9. UserInfo userInfo = userInfoMap.get(comment.getUserId());
  10. CommentVo commentVo = new CommentVo(comment.getId().toString(),userInfo.getAvatar(),userInfo.getNickname(),comment.getContent(),
  11. comment.getCreated().toString(), (int) comment.getLikeCount(),0);
  12. commentVoList.add(commentVo);
  13. }
  14. comments.setItems(commentVoList);
  15. return comments;
  16. }

接口模块:专门封装接口的模块

  1. Map<Long,UserInfo> findUserByids(List<Long> collect);
  2. ResultList findComments(ObjectId movementId, PublicPageVo publicPageVo);

db提供者服务:mysql

  1. @Override
  2. public Map<Long, UserInfo> findUserByids(List<Long> collect) {
  3. Map<Long,UserInfo> userInfoMap = new HashMap<>();
  4. //传入的是用户id
  5. for (Long userid : collect) {
  6. UserInfo userInfo = userInfoMapper.selectById(userid);
  7. if (userInfo!=null){
  8. userInfoMap.put(userInfo.getId(),userInfo);
  9. }
  10. }
  11. return userInfoMap;
  12. }

mongo提供者服务:mongo

  1. @Override
  2. public ResultList findComments(ObjectId movementId, PublicPageVo publicPageVo) {
  3. ResultList<Comment> objectResultList = new ResultList<>();
  4. //拼凑条件
  5. Query query = new Query();
  6. //添加条件
  7. query.addCriteria(Criteria.where("publishId").is(movementId));
  8. long count = mongoTemplate.count(query, Comment.class);
  9. query.limit(publicPageVo.getPagesize().intValue()).skip((publicPageVo.getPage()-1)*publicPageVo.getPagesize()).with(Sort.by(Sort.Order.desc("created")));
  10. List<Comment> comments = mongoTemplate.find(query, Comment.class);
  11. objectResultList.setItems(comments);
  12. objectResultList.setCounts(Integer.valueOf(count+""));
  13. objectResultList.setPagesize(publicPageVo.getPagesize().intValue());
  14. objectResultList.setPage(publicPageVo.getPage().intValue());
  15. objectResultList.setPages((int) (count%publicPageVo.getPagesize() == 0 ? count/ publicPageVo.getPagesize():(count/ publicPageVo.getPagesize())+1));
  16. //返回处理的数据
  17. return objectResultList;
  18. }

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读