抖音实战~我关注的博主列表、关注、取关

在这里插入图片描述
在这里插入图片描述

文章目录

          • 一、关注模块
            • 1. 关注流程图
            • 2. 关注流程简述
          • 二、前端关注相关
            • 2.1. 查询我关注博主列表
            • 2.2. 取消关注
            • 2.2. 关注我
            • 2.4. 上滑分页粉丝列表
            • 2.5. 状态刷新
          • 三、后端关注相关
            • 3.1. 查询我关注的博主列表
            • 3.2. 取关
            • 3.3. 关注

一、关注模块
1. 关注流程图

暂未上,敬请期待!

2. 关注流程简述

暂未上,敬请期待!

二、前端关注相关
2.1. 查询我关注博主列表
	// 查询我关注博主列表queryMyFollowList(page) {var me = this;// if (page == 0) {// 	me.followsList = [];// }page = page + 1;var userId = getApp().getUserInfoSession().id;var serverUrl = app.globalData.serverUrl;uni.request({method: "GET",header: {headerUserId: userId,headerUserToken: app.getUserSessionToken()},url: serverUrl + "/fans/queryMyFollows?myId=" + userId + "&page=" + page + "&pageSize=10",success(result) {if (result.data.status == 200) {var followsList = result.data.data.rows;var totalPage = result.data.data.total;me.followsList = me.followsList.concat(followsList);me.page = page;me.totalPage = totalPage;}}});},
2.2. 取消关注
// 取消关注cancelFollow(vlogerId) {var me = this;var userId = getApp().getUserInfoSession().id;var serverUrl = app.globalData.serverUrl;uni.request({method: "POST",header: {headerUserId: userId,headerUserToken: app.getUserSessionToken()},url: serverUrl + "/fans/cancel?myId=" + userId + "&vlogerId=" + vlogerId,success(result) {if (result.data.status == 200) {me.reFreshList(vlogerId, false);} else {uni.showToast({title: result.data.msg,icon: "none",duration: 3000});}}});},
2.2. 关注我
	// 关注我followMe(vlogerId) {var me = this;var userId = getApp().getUserInfoSession().id;var serverUrl = app.globalData.serverUrl;uni.request({method: "POST",header: {headerUserId: userId,headerUserToken: app.getUserSessionToken()},url: serverUrl + "/fans/follow?myId=" + userId + "&vlogerId=" + vlogerId,success(result) {if (result.data.status == 200) {me.reFreshList(vlogerId, true);} else {uni.showToast({title: result.data.msg,icon: "none",duration: 3000});}}});},
2.4. 上滑分页粉丝列表
<template><view class="page"><view class="line"></view><scroll-view scroll-y="true" @scrolltolower="pagingFollowsList()"><view class="user-wrapper" v-for="(f, index) in followsList" :key="index"><view class="user-info"><image class="face" :src="f.face" style="align-self: center;"></image><text class="user-name" style="align-self: center;">{{f.nickname}}</text></view><view v-if="!f.followed" class="operator-wrapper" style="width: 140rpx; height: 60rpx;display: flex;flex-direction: row;justify-content: center;background-color: #ef274d;border-radius: 10px;align-self: center;"><text class="operator-words" style="align-self: center;color: #FFFFFF;" @click="followMe(f.vlogerId)">关注</text></view><view v-if="f.followed" class="operator-wrapper" style="width: 140rpx; height: 60rpx;display: flex;flex-direction: row;justify-content: center;background-color: #ef274d;border-radius: 10px;align-self: center;border-width: 1px;border-color: #ef274d;background-color: #181b27;"><text class="operator-words" style="align-self: center;color: #ef274d;" @click="cancelFollow(f.vlogerId)">取关</text></view></view></scroll-view></view>
</template>
// 上滑分页粉丝列表pagingFollowsList() {// this.followsList = this.followsList.concat(this.followsList);if (this.page >= this.totalPage) {return;}this.queryMyFollowList(this.page);}
2.5. 状态刷新
         // 关注/取关后的list重新状态刷新设置reFreshList(vlogerId, status) {var me = this;var followsList = me.followsList;for (var i = 0 ; i < followsList.length ; i ++) {var vloger = followsList[i];if (vloger.vlogerId == vlogerId) {vloger.followed = status;followsList.splice(i,1, vloger);}}me.followsList = followsList;},
三、后端关注相关
3.1. 查询我关注的博主列表
/*** 查询我关注的博主列表** @param myId     我的用户ID* @param page     当前第几页* @param pageSize 每页显示几条* @return*/@GetMapping("queryMyFollows")public GraceJSONResult queryMyFollows(@RequestParam String myId,@RequestParam Integer page,@RequestParam Integer pageSize) {return GraceJSONResult.ok(fansService.queryMyFollows(myId,page,pageSize));}
  @Overridepublic PagedGridResult queryMyFollows(String myId,Integer page,Integer pageSize) {Map<String, Object> map = new HashMap<>();map.put("myId", myId);PageHelper.startPage(page, pageSize);List<VlogerVO> list = fansMapperCustom.queryMyFollows(map);return setterPagedGrid(list, page);}
   <select id="queryMyFollows" resultType="com.gblfy.vo.VlogerVO" parameterType="map">SELECTu.id as vlogerId,u.nickname as nickname,u.face as faceFROMfans fLEFT JOINusers uONf.vloger_id = u.idWHEREf.fan_id = #{paramMap.myId}ORDER BYu.nicknameASC</select>
3.2. 取关
    /*** 取关** @param myId     我的用户ID* @param vlogerId 视频发布者ID* @return*/@PostMapping("cancel")public GraceJSONResult cancel(@RequestParam String myId,@RequestParam String vlogerId) {// 删除业务的执行fansService.doCancel(myId, vlogerId);// 博主的粉丝-1,我的关注-1//我的关注总数redis.decrement(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);// 博主的粉丝总数redis.decrement(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);// 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈redis.del(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId);return GraceJSONResult.ok();}
3.3. 关注
  /*** 关注** @param myId     我的用户ID* @param vlogerId 视频发布者ID* @return*/@PostMapping("follow")public GraceJSONResult follow(@RequestParam String myId,@RequestParam String vlogerId) {// 判断两个id不能为空if (StringUtils.isBlank(myId) || StringUtils.isBlank(vlogerId)) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_ERROR);}// 判断当前用户,自己不能关注自己if (myId.equalsIgnoreCase(vlogerId)) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);}// 判断两个id对应的用户是否存在Users vloger = userService.getUser(vlogerId);Users myInfo = userService.getUser(myId);// fixme: 两个用户id的数据库查询后的判断,是分开好?还是合并判断好?if (myInfo == null || vloger == null) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SYSTEM_RESPONSE_NO_INFO);}// 保存粉丝关系到数据库fansService.doFollow(myId, vlogerId);// 博主的粉丝+1,我的关注+1//我的关注总数redis.increment(REDIS_MY_FOLLOWS_COUNTS + ":" + myId, 1);// 博主的粉丝总数redis.increment(REDIS_MY_FANS_COUNTS + ":" + vlogerId, 1);// 我和博主的关联关系,依赖redis,不要存储数据库,避免db的性能瓶颈redis.set(REDIS_FANS_AND_VLOGGER_RELATIONSHIP + ":" + myId + ":" + vlogerId, "1");return GraceJSONResult.ok();}

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

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

相关文章

灵魂拷问,上 Kubernetes 有什么业务价值?

上 Kubernetes 有什么业务价值&#xff1f; 今天要演讲的主题是跟应用管理或者说是云原生应用交付是相关的。首先我们想要先回答这么一个问题&#xff1a;为什么我们要基于 Kubernetes 去构建一个应用管理平台&#xff1f; 上图是一个本质的问题&#xff0c;我们在落地 K8s 经…

近7万新冠域名一半是钓鱼网站?以色列老牌安全厂商Check Point推出全端保护新战略

编辑 | 宋 慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 疫情肆虐的2020注定会被长久铭记。在这一年中&#xff0c;人们的工作、生活方式发生了巨变。在以色列老牌安全厂商Check Point全球进行的调查中显示&#xff0c;87%的工作人口采用了居家办公模式&#xff0c;74%的企…

掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

前言 在高速发展的时候&#xff0c;公司规模越来越大&#xff0c;老师人数越来越多&#xff0c;这时候公司不能铺太多人去做运营与服务&#xff0c;必须提高每个人效&#xff0c;这就需要技术驱动。因此掌门教育转变成一家技术驱动型的公司&#xff0c;如果被迫成为一家靠资金驱…

jdk 1.8 安装

步骤 B&#xff1a;配置 JAVA_HOME 系统变量区域&#xff0c;点击【新建】&#xff0c;在弹出的窗口中&#xff0c;分别输入变量名和值 变量名&#xff1a;JAVA_HOME 变量值&#xff1a;你的安装路径 JAVA_HOMEpath %JAVA_HOME%\bin步骤 C&#xff1a;配置 Path Path环境变量…

【漫画】最近,老王又双叒get了CDN的新技能—可编程化敏捷开发

原文链接 本文为阿里云原创内容&#xff0c;未经允许不得转载。

抖音实战~点赞数量弹框

组件 在components下面新建ge-popup.vue <template><view><view class"mask"></view><!--绑定微信--><view class"wxbox"><view class"weixin"><image src"../static/dz.jpg"></…

阿里张磊:如何构建以应用为中心的“Kubernetes”?(内含 QA 整理)

如何构建“以应用为中心”的 Kubernetes&#xff1f; 构建这么一个以用户为中心的 Kubernetes&#xff0c;需要做几个层级的事情。 应用层驱动 首先来看最核心的部分&#xff0c;上图中蓝色部分&#xff0c;也就是 Kubernetes。可以在 Kubernetes 之上定义一组 CRD 和 Contro…

Trie 树是什么样的数据结构?有哪些应用场景?

作者 | 神奕来源 | 前端应届生头图 | 下载于视觉中国出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联数组&#xff0c;其中的键通常是字符串…

iOS Abort问题系统性解决方案

一、背景 崩溃(Crash)&#xff0c;即闪退&#xff0c;多指移动设备&#xff08;如iOS、Android设备&#xff09;在打开/使用应用程序的过程中&#xff0c;突然出现意外退出/中断的情况。如果App线上版本频繁发生崩溃&#xff0c;会极大地影响用户体验&#xff0c;甚至导致用户…

uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前

文章目录1. 返回的报文2. 时间格式化方法3. 使用1. 返回的报文 格式化时间&#xff1a;createTime [{"id": "62c11d3435b7c4007a8e650e","fromUserId": "21100598TZ9XG6RP","fromNickname": "小美女","fro…

云原生全景图之五:应用程序定义和开发层

作者 | Catherine Paganini、Jason Morgan来源 | K8sMeetup头图 | 下载于视觉中国前文介绍了如何将所有应用程序组件作为整体来编排和管理&#xff08;编排和管理层&#xff09;。本文将介绍云原生全景图的最上层&#xff1a;应用程序定义和开发层。现在我们来到了云原生全景图…

Flink 1.11 SQL 十余项革新大揭秘,哪些演变在便捷你的使用体验?

简介&#xff1a; SQL 作为 Flink 中公认的核心模块之一&#xff0c;对推动 Flink 流批一体功能的完善至关重要。在 1.11 中&#xff0c;Flink SQL 也进行了大量的增强与完善&#xff0c;开发大功能 10 余项&#xff0c;不仅扩大了应用场景&#xff0c;还简化了流程&#xff0c…

uniapp 小于1000 按原数字显示 超过1000 数字换算成10w+ 1.3k+ 显示

文章目录1. 公共方法2. 使用1. 公共方法 methods: {// 数字换算graceNumber(number) {if (number 0) {return "0";} else if (number > 999 && number < 9999) {return (number / 1000).toFixed(1) k;} else if (number > 9999 && numbe…

我们为什么要做 SoloPi

SoloPi现状 去年&#xff08;2019年&#xff09;7月份&#xff0c;蚂蚁集团正式对外开源了客户端自动化测试工具 SoloPi &#xff0c;其主要包括三大模块&#xff1a;录制回放&#xff08;用于功能测试&#xff09;、性能工具&#xff08;用于性能测试&#xff09;以及一机多控…

华为发布2020年年报:收入8914亿元,华为云增速最高达168%

今天&#xff0c;华为发布了2020年度报告。2020年&#xff0c;华为实现销售收入8914亿元人民币&#xff0c;同比增长3.8%&#xff1b;净利润646亿元人民币&#xff0c;同比增长3.2%。其中&#xff0c;企业业务收入同比增长23%至1003亿元人民币。华为轮值董事长胡厚崑在年报发布…

从单体到混乱的微服务,阿里云托管式服务网格是如何诞生的?

作者 | 王夕宁 阿里巴巴高级技术专家 参与阿里巴巴云原生文末留言互动&#xff0c;即有机会获得赠书福利&#xff01; 在服务网格技术使用之前&#xff0c;为了更快更灵活地进行业务创新, 我们常常会把现有应用进行现代化改造, 把单体应用程序分拆为分布式的微服务架构。通常…

MongoDB数据日期显示相差8小时 原因和解决方案

文章目录一、透过现象看本质1. 背景调研2. 原因分析3. 影响评估二、解决方案2.1. 客户端显示问题2.2. 查询数据不正确2.3. 效果验证一、透过现象看本质 1. 背景调研 最近因为项目需要使用到了MongoDB&#xff0c;使用Navicat Premium 15 客户端可视化工具查询数据&#xff0c…

Kubernetes 和 Docker,到底什么关系?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国作为一名容器时代的程序员相信你已经或多或少接触过Docker&#xff0c;但同时你也会发现Docker虽然流行了多年&#xff0c;但之前却很少有公司直接将线上应用通过Docker容器进行大规模地部署。但最近三年&#xff0c;你会发现…

SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(优雅上下线)

前言 上篇我们讲的是发布回滚过程&#xff0c;尤其是在 Kubernetes 的回滚过程中&#xff0c;原生有提供 Rollout 到上一个版本的能力&#xff0c;能保证我们在发布过程中遇到问题时快速回退的能力。然而在每一次上线的过程中&#xff0c;我们最难处理的就是正在运行中的流量&…

菜鸟+Hologres=智能物流

作者&#xff1a;阿里巴巴菜鸟物流团队&#xff08;弃疾&#xff0c;孝江&#xff0c;姜继忠&#xff09; 一、业务背景 菜鸟智能物流分析引擎是基于搜索架构建设的物流查询平台&#xff0c;日均处理包裹事件几十亿&#xff0c;承载了菜鸟物流数据的大部分处理任务。 智能物流…