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

news2024/12/24 0:33:17

目录

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

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

1.2:流程分析

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

1.3:代码实现

接收请求的app服务端

app-server服务:controller层

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

app-server服务:service层 

    public MovementVo findmovement(ObjectId id) {
        //处理评论
        Movement movement = movementApi.findmovement(id);

        UserInfo userInfo = userInfoApi.findUser(movement.getUserId());

        MovementVo movementVo = new MovementVo(movement.getId().toString(),
                userInfo.getId(),userInfo.getAvatar(),userInfo.getNickname(),userInfo.getGender(),Integer.valueOf(userInfo.getAge()),
                userInfo.getTags().split(","),movement.getTextContent(),movement.getMedias(),"500米",movement.getCreated().toString()
                ,movement.getLikeCount(),movement.getCommentCount(),movement.getLoveCount(),0,0);
        return movementVo;
    }

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

Movement findmovement(ObjectId id);
public UserInfo findUser(Long id);

db提供者服务:mysql

    @Override
    public UserInfo findUser(Long id) {
        UserInfo userInfo = this.userInfoMapper.selectById(id);
        return userInfo;
    }

mongo提供者服务:mongo

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

2:发布评论

2.1:接口分析

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

2.2:流程分析

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

2.3:代码实现

 接收请求的app服务端

app-server服务:controller层

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

app-server服务:service层 

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

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

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

mongo提供者服务:mongo

   @Override
    public void fabudongtai(PostUpdateVo postUpdateVo, Long userId, String mobile) {
        //保存动态到mongo动态表中
        Movement movement = new Movement();
        Long movement1 = idWorker.getNextId("movement");
        movement.setPid(movement1);
        movement.setUserId(userId);
        movement.setTextContent(postUpdateVo.getTextContent());
        movement.setMedias(postUpdateVo.getImages().toArray(new String[0]));
        movement.setState(0);
        movement.setLongitude(Double.valueOf(postUpdateVo.getLongitude()));
        movement.setLatitude(Double.valueOf(postUpdateVo.getLatitude()));
        movement.setLocationName(postUpdateVo.getLocation());
        movement.setCreated(new Date().getTime());
        //保存动态表
        Movement save = mongoTemplate.save(movement);

        //查询好友列表
        //构建条件
        Query query = new Query();
        Criteria criteria = Criteria.where("userId").is(userId);
        query.addCriteria(criteria);
        List<Friend> friends = mongoTemplate.find(query, Friend.class);

        //保存时间线数据
        for (Friend friend : friends) {
            MovementTimeline movementTimeline = new MovementTimeline(save.getCreated(),friend.getFriendId(),save.getId(),save.getUserId());
            mongoTemplate.save(movementTimeline);
        }
        //处理结束
    }

3:查询评论列表

3.1:接口分析

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

3.2:流程分析

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

3.3:代码实现

 接收请求的app服务端

app-server服务:controller层

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

app-server服务:service层 

    public ResultList findComments(ObjectId movementId, PublicPageVo publicPageVo) {
        ResultList comments = commentApi.findComments(movementId, publicPageVo);
        List<Comment> items = comments.getItems();


        //传入用户APi
        Map<Long, UserInfo> userInfoMap = userInfoApi.findUserByids(items.stream().map(comment -> comment.getUserId()).collect(Collectors.toList()));

        List<CommentVo> commentVoList = new ArrayList<>();
        //处理返回数据
        for (Comment comment : items) {
            UserInfo userInfo = userInfoMap.get(comment.getUserId());
            CommentVo commentVo = new CommentVo(comment.getId().toString(),userInfo.getAvatar(),userInfo.getNickname(),comment.getContent(),
                    comment.getCreated().toString(), (int) comment.getLikeCount(),0);
            commentVoList.add(commentVo);
        }
        comments.setItems(commentVoList);
        return comments;

    }

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

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

db提供者服务:mysql

    @Override
    public Map<Long, UserInfo> findUserByids(List<Long> collect) {
        Map<Long,UserInfo> userInfoMap = new HashMap<>();
        //传入的是用户id
        for (Long userid : collect) {
            UserInfo userInfo = userInfoMapper.selectById(userid);
            if (userInfo!=null){
                userInfoMap.put(userInfo.getId(),userInfo);
            }
        }
        return userInfoMap;
    }

mongo提供者服务:mongo

    @Override
    public ResultList findComments(ObjectId movementId, PublicPageVo publicPageVo) {
        ResultList<Comment> objectResultList = new ResultList<>();
        //拼凑条件
        Query query = new Query();
        //添加条件
        query.addCriteria(Criteria.where("publishId").is(movementId));

        long count = mongoTemplate.count(query, Comment.class);
        query.limit(publicPageVo.getPagesize().intValue()).skip((publicPageVo.getPage()-1)*publicPageVo.getPagesize()).with(Sort.by(Sort.Order.desc("created")));

        List<Comment> comments = mongoTemplate.find(query, Comment.class);
        objectResultList.setItems(comments);
        objectResultList.setCounts(Integer.valueOf(count+""));
        objectResultList.setPagesize(publicPageVo.getPagesize().intValue());
        objectResultList.setPage(publicPageVo.getPage().intValue());
        objectResultList.setPages((int) (count%publicPageVo.getPagesize() == 0 ? count/ publicPageVo.getPagesize():(count/ publicPageVo.getPagesize())+1));
        //返回处理的数据
        return objectResultList;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python导出含有中文名文件解决方案

使用Python开发过程中有用到需要导出文件的功能 异常代码 # 代码片段 def return_workbook(self, workbook, model_code, x_io):name “税单.xls”workbook.close()res HttpResponse()res["Content-Type"] "application/octet-stream"res["Conte…

Python 基础(九):列表

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、声明列表二、访问列表元素三、修改列表元素四、添加列表元素4.1、在列表末尾添加元…

京东商品列表数据采集(APP,H5端)

采集场景: 在京东搜索页 https://search.jd.com/Search 输入搜索&#xff0c;搜出后得到的多个商品列表数据。 征地: 商品名称、价格、评论数、店铺名称、店铺链接等字段。 采集结果: 采集结果可导出为Excel&#xff0c;CSV&#xff0c;HTML&#xff0c;数据库等格式。导出…

学习系统编程No.22【消息队列和信号量】

引言&#xff1a; 北京时间&#xff1a;2023/4/20/7:48&#xff0c;闹钟6点和6点30&#xff0c;全部错过&#xff0c;根本起不来&#xff0c;可能是因为感冒还没好&#xff0c;睡不够吧&#xff01;并且今天是星期四&#xff0c;这个星期这是第二篇博客&#xff0c;作为一个日…

Java核心技术 卷1-总结-12

Java核心技术 卷1-总结-12 具体的集合链表数组列表 具体的集合 下表中除了以 Map结尾的类之外&#xff0c; 其他类都实现了 Collection 接口&#xff0c;而以 Map结尾的类实现了 Map 接口。 集合类型描述ArrayList一种可以动态增长和缩减的索引序列LinkedList一种可以在任何位…

为视频直播网站开发选择最佳技术

在今天的数字时代&#xff0c;随着人们越来越多地倾向于观看在线视频&#xff0c;视频直播网站开发已经成为了一项非常有前途的技术。无论是为了提供娱乐、教育还是商业目的&#xff0c;视频直播网站开发都是一个非常重要的领域。 在视频直播网站开发中&#xff0c;你需要考虑…

使用Process Monitor探测日志文件是C++程序哪个模块生成的

目录 1、问题描述 2、使用Process Monitor监测目标文件是哪个模块生成的思路说明 3、操作Process Monitor监测日志文件是哪个模块生成的 4、通过screenctach.dll库的时间戳&#xff0c;找到其pdb文件&#xff0c;然后去查看详细的函数调用堆栈 5、最后 VC常用功能开发汇总…

春秋云境:CVE-2022-25099(文件上传造成RCE)

目录 一、题目 二、burp上传执行木马 一、题目 介绍&#xff1a; WBCE CMS v1.5.2 /language/install.php 文件存在漏洞&#xff0c;攻击者可精心构造文件上传造成RCE 进入题目&#xff1a; 网站正在建设中。。。 直接访问/admin吧&#xff1a; admin:123456 成功进入&…

css案例:小黄人案例

css案例&#xff1a;小黄人案例 先看效果图 眼睛和嘴巴有做动画的&#xff0c;但是我懒得上传gif了。 3. 源码 html <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><style>.contain {width: 400px;height:…

贪心-合并果子(经典Huffman树)

题意 在一个果园里&#xff0c;达达已经将所有的果子打了下来&#xff0c;而且按果子的不同种类分成了不同的堆。 达达决定把所有的果子合成一堆。 每一次合并&#xff0c;达达可以把两堆果子合并到一起&#xff0c;消耗的体力等于两堆果子的重量之和。 可以看出&#xff0c;所…

Linux驱动开发:uboot启动流程详解

前言&#xff1a;uboot作为Linux驱动开发的 “三巨头” 之一&#xff0c;绝对是一座绕不开的大山。当然&#xff0c;即使不去细致了解uboot启动流程依旧不影响开发者对uboot的简单移植。但秉持着知其然知其所以然的学习态度&#xff0c;作者将给读者朋友细致化的过一遍uboot启动…

如何用ChatGPT举办活动,人类与AI的一次深度对谈

刚刚&#xff0c;Mixlab今年首次线下联合举办的活动开启了&#xff0c;活动不仅分享了AIGC对体验设计的新要求、内容产业的发展研判、用于模拟仿真的生成式智能体&#xff0c;还演示了AI如何深度整合到一场活动之中。 1/ 数字人出场介绍Mixlab 是如何实现的呢&#xff1f;无限…

[Net]SSE消息推送简介

文章目录 SSE网络协议客户端服务端事件 SSE示例客户端服务端 SSE&#xff08;Server-Sent Events&#xff09;是一种服务端到客户端&#xff08;浏览器&#xff09;的单向消息推送方式。 SSE网络协议 SSE是基于HTTP协议的&#xff0c;客户端向服务端发起一个请求&#xff0c;建…

Android 9.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

1.前言 在android9.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度,旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现,接下来就来分析实现…

以太网PLC无线WIFI跨网段通讯和Modbus仪表数据采集

产品介绍 产品型号&#xff1a;NET50-NAT-W4 使用范围&#xff1a;用于以太网PLC的跨网段无线通讯和仪表的数据采集 产品介绍 工业通讯桥接器&#xff08;NET50-NAT-W4&#xff09;用于以太网PLC的通讯扩展&#xff0c;以太网跨网段通讯和Modbus仪表的数据采集&#xff0c;上…

2023年制造业产品经理考NPDP有什么用?

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

谈一谈django应用实践

python 的 web 框架非常多,比较出名的有 django, flask, tornado。django 作为一个老牌框架,无论是文档还是代码质量都非常高,另外他自带的 admin 后台和一些有用的 app,如果你的需求是做 cms 之类的 web 应用的话,基本上不用开发多少代码就能出一个成品。不过很多新手可能…

2023-04-23 学习记录--C/C++-函数

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 【一】、调用有参函数 ⭐️ 有参函数&#xff1a;调用函数时&#xff0c;需要传对应参数。 一、实现步骤 &#x1f338; 实现步骤…

Adobe国际认证证书,深化设计师个人优势!

Adobe国际认证又称为Adobe认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。 该体系基于Adobe核心技术及岗位实际应用操作能力的测评体系得到国际ISTE协会的认可&#xff0c;并在全球 148 个国家推广&#xf…