00:00
好了,列位,那咱们就接着继续吧啊,我们现在已经能够把这个消息啊广播给其他用户的,包括我们自己,那咱们还得把这个数据啊存到数据库中啊,方便咱们未来啊统计啊我们这个信息,那这样的话我们又得来按照之前的流程来啊,我们在啊在我们的数据库中新建一张表啊,这张表中的这个字段信息啊,我认为啊跟咱们之前的字段信息啊一样就可以了啊,我们在这里可以创建一张表,这张表的话呢,跟咱们lax这张表啊很像啊,但它里面存的是我们关注的这些信息,表名这块课上写一个什么叫follows啊follows好了表示我们就是关注这张表,OK,接下下来的话,字符集的话呢,UTF81不一样的流程,嗯,在这个列信息中的话呢,我们还要新增我们对应的ID这一个字段,然后在这里的话呢,我们int,哎,我们还是咱们的自增长的。
01:00
我们的主键啊,我们在这里在新建好我们从谁啊表示谁关注于谁啊,From ID差类型的啊,长度的话呢,咱们这个设置成100吧,然后再去新增我们的to ID啊,你到底关注了谁啊,就是to ID就是关注的啊,被关注了这个人啊,然后接下来的话呢,100啊,然后咱们在这里都是不可控的啊,最后还有一个关注了这一个时间create time好了,可是time创建好之后,我们在这里啊差不多了,那列位你来看一下,这就是咱们呀新创建了一个叫follows这张表里面一共有四个字段,ID from_ID two_ID create time好,最终的话没什么问题的啊,我们在这就可以把它给提交啊,最后的话呢,这张表啊就被给创建出来了。咱们花开两朵呀,各表一支,表放在这儿了啊,咱们接下来去想一想,我们后台的这个业务处理了,我是不是在这个点击关注的时候,我给他进行群发消息的时候调用了个attention方法,那同样的咱们也应该在这里去进行数据库的一个存储工作了嘛,是吧?啊,所以我们应该在这里进行一个数据库的一个调用工作,通过我们的啊呃,Wait啊,一样的哈,等待我们啊model到这个方法,咱们在这里一会儿就写一个叫follow的方法,另外啊,这个方法肯定跟之前的一样的啊,这个方法表示我们就要进行关注,关注的时候咱们要把这个from ID,还有这个to ID还是得传过去,Fromd,通过这一次点data. userin.user ID,咱们给它传过去,Two_ID咱们还是通过Z4.data,点我们group in for,点我们的owner ID传过去,那这表示。
02:51
是我们将来要用这个账号对吧?哎,去关注这个啊,Owner的就是这个直播间的啊,所有者是吧,是这样的啊,所以我们在这照此类推,也应该是把这个方法往这写一遍,只不过这一次就是on follow,那课们一会要对应的写两个接口就可以了呗,啊,一个是咱们的这个接口,一个是on follow,好吧,那咱们开始大家来试一下,我们把这个follow这个方法创建在咱们自己的这一个代码中来,来到我们的这个model index这里面来,对吧,我们之前创建了好多喜欢发送礼物啊,这样的话,在接下来这一块就是我们的关注这个方法,Follow方法,我们还是在这里的话呢,接收我们这个ID信息,哎,在这里咱们当时传的是一个对象,所以客人在这里就要解构出来,我们的from啊,下划线ID还有to_ID结构出来之后,是不是照之前的流程来一遍就可以了。
03:51
啊,诶,在这里叫他来吧。直接就在我们这里去写一个请求我们的request往我们后台的follow这个接口啊进行调用,Post把我们的from ID和下划线ID啊,咱们都给它传过去就可以了啊,所以将来我们在这还有一个onf follow,大家说这个没喜欢关注就写取消关注,那这玩意儿都一样的,这有什么难的呀,再来一个on follow这个方法,你将来在类屋GS中一定要用onf follow这个方法,那这样的话咱们就走它,最后再接到我们的from ID to ID,哎,你解构出来之后再请求咱们的on follow这个接口,哎,Post把你的from ID to ID属性啪给他扔过去好了,那接下来咱们来写接口了。
04:39
啊,其实两个接口列位你也知道啥意思,那关注的话就是往里面插数据,那取消关注的话就是从里面的话呢,进行删数据啊就这个过程,那那接下来咱们来看一下关于这个follow和咱们的on follow对应的后台接口这块咱们怎么去处理,所以我可以来到我的后端代码中,是不是来到这里呀,我当时在这个API下面创建了很多的这种接口,那可现在再来一个叫follow.js。
05:10
在这个follow.js中,我们可以大量的借鉴like的代码复制过来哦,其实我没必要重新去写一遍,浪费时间,咱们可以一块来读一读,来在这里啊,当时这是like,咱们给它改成这个follow。Follow这一块啊,然后我们结构出来from ID和to ID,然后还是一样的创建我们数据库的连接池,插入的是我们的follow字,哎,这样一个拉了个S,这样一张表,ID装ID create time,哎,对应的几个字段还是这么传,这就是返回send send我们的这个OK,好,对应的我们再把这个接口给它改成这个follow啊另外我觉得follow接口写完了吧,啊,就这么简单吧,一模一样啊跟那这样的话,我们再在app.js中,咱们来注册一下我们这个follow好块,我们的API文件夹下的我们的follow这个JS,把它给导入到我们这个模块里面来。
06:14
导入进来之后啊,我们就在我们这个地方进行一个什么呀,注册这个接口,它也是一个POS的请求follow啊对应的在这里我们写好这个,诶这个follow好了,一保存之后,另外我们觉得可以一试的吧,来咱们来看一眼,在咱们代码中重新的编译一遍。咱们现在要开始点了哈,另外点击这个杨组之后进来了,好,我现在看到杨组的直播很带感,这个时候我想关注他一部分啊,所以在这的话我就点进了关注,好关注完了之后呢,咱们来看一下哪里呢,成功成功看这里啊,看到我们这个follow中啊这一块咱们可以刷新一下,看看刚才那条数据插没插进来,如果插进来的话,就说明我们成功了,你看from ID哎,关注的是这个账号的2U,应该是结尾,应该是个2U吧,如果记得没错的话呢,如果是2U的话,就是咱们的杨左用户的创建时间,这个3月7号这天,对吧,我成功了,另外啊,当然在这里我写这些接口的时候啊,可能有人会吐槽啊,对吧,这个接口里面的话呢,咱们尤其这里进行什么a wait acent调用的时候的话呢,好像我都没有写try catch分支,一旦出错的话呢,可能啊,有些这个错误捕捉不到,所以在这里答的最好的也加上这个try catch分支好吧,那这样的话呢。
07:35
能够保证啊,我们在这里还能接受到一个这个错误请求,开始请求啊,咱们能拿到这个结果OK啊,这咱们这一块所调用的,那咱们就趁着打铁的啊,把这个取消关注这个功能也一块给做完了呗,取消关注这里来列位一点击这个小按钮,咱们就要取消关注,但这个接口没写,现在应该是报是一个什么错误呀,404啊没写,那客人赶紧写吧,是不是在咱们的后台中,客人就在这里新建好一个我们的on follow这一个接口,点GS on follow跟follow的话代码的呢拿过来啊,唯一改变的地方在哪里呀?在咱们啊这个query这个方法中啊,它不就是不是插入了哈,应该是删除了,那前面这些都一样吗?这块可不可以给它改成这个on follow这个接口啊,也是拿到咱们的啊,From ID to ID这些属性啊,拿到之后的话呢,我们将来还要去操作的。
08:35
啊,然后咱们来看一下这这一块,这个删除了这个工作列呗,怎么去做呀,是不是调用一个什么方法呀,Delete的方法就可以了,Delete from咱们的这个。然后的话呢,咱们判断它的from ID,还有这个to ID都是谁谁谁的时候就可以了,所以我们可以在这里借助于对吧,Delete de,然后from我们这一个follows啊,然后我们在后面这块的话给他删了得了。
09:05
啊,我们要从follow这张表中删除它的一个条件吗?Where写咱们的条件,我们的from_ID啊,如果是咱们这一个什么呀,这一个的时候,我们在外面这块给它改成这个什么字符串模板的这种写法。另外delete from follows from ID等于这个的时候啊,咱们在前面已经获得到了,然后并且在语上对吧,你不能说一下子把这个所有这个人我点一下取消关注,把我曾经所有关注的人都给我取消掉了,那不对啊,To ID,所以他俩一定是啊我们的啊唯一索引啊在这里。ID等于啊,咱们在这里啊,也一样的Dollar符咱们的这个to啊,下划线ID好了,另外你看是不是就这个代码来把后面这块就给删了就行了,来咱们来看一下,等我取消关注的时候呢,我就通过delete from follows啊,然后我们的from ID啊,是我们传过来的from ID,而且并且与上我们的to ID对不对,是我们传过来的这个to ID就完事儿了,好,那接下来的话,咱们这个一保存之后,我们的on接口写好了,我们接再在我们的app.gs中,咱们怎么样呀,注册好这个接口是咱们的onf follow这一个接口,然后在这个地方都写好来导入进来啊啊复制粘贴也得会复制粘贴啊,你你喜欢偷懒,你得会偷懒啊,所以这样来说,我们这个接口就写好了,只要有人发POS的请求,我们这个onf follow这个接口的话呢,就会响应它啊,获得到from ID to ID之后会基于from ID。
10:45
关D的与条件,去咱们的follow中把这张表里面的数据给删掉,那对应的我们在小程序中的话,是不是等我将来一点击取消关注的时候,那这个on follow这个方法就会发出这个请求区啊,咱们最后来一块来测试一遍就可以了。E变异之后来到我们的杨左的直播间里面来了,好了,凯开始点击关注。
11:10
关注上了啊,他在这答你能发现这个bug就经出现了,一模一下呢,居然可以关注这个人关注两次啊,除了创建时间不一样,其他都一样对吧?然后我在这再取消关注啊,咱们先把那个功能等一会去想呗,点击取消关注之后,大家可以看一下我们这这数据应该删掉就对了,来咱们测一下删掉了吗?啊,为了更好的这个测试啊,这看好像一下子把我这两条都删了,咱们这个抵御的方法把匹配的两条都删掉了啊,已经成功了,那咱们再测一遍吧,来点击关注是不是可以这个关注呀,这个数据就加进来了,等不能点击取消关注这条数据的话呢,就会从这里面就删掉了,所以我们整个这个联动过程的话呢,是完全没有问题的,列外是吧,哎,就是这一个好,但是我们这个功能,或者是我们对于这个接口的这个诉求。
12:04
咱们就到这儿了吗?不可能的,因为刚才咱们已经发现这个bug了呀,那我现在点击一下关注了,来了一位关注了一下,好了,那我们刷新这个数据,它是在的了,但这个时候的话,我们将这个页面给退出去了,好,咱们在这退出,点击这个退出,这个时候又进到杨左直播间了,你看这个按钮还是关注,那就不对了,它应该是变成已关注了,对不对,而且现在我还是关注的情况下,就会导致我再点击关注,还能再关注一次,我要再退出的话呢,另外啊,我再退出,我再进来,我还能再关注,那这样就不对了,那最终会导致咱们这里面一下子来了三个了,所以这是有问题的。好吧,啊,所以咱们要把这个问题给他解决掉,那在这的这个问题解决的方法的话呢,也大家能想象到,咱们应该是在一进来这个页面的时候啊,等我们这个TRS准备好了之后,咱们应该获取一下后台啊,此时当前登录用户是他,然后这就是看了直播间的拥有者是他,拿这两个数据去我们的后台中,去我们数据库中查一下是不是他已经在表中的,如果在表中的话,就说明我们的隐兵这个用户曾经已经关注过杨索了,那这个按钮就应该自动的变成已关注按钮了,就。
13:24
对吧,哎,这样才对啊,咱们就这样就避免了重复关注啊,而且避免了咱们的数据库里面的这个数据信息的话呢,重复创建啊这样一些问题。所以这就是咱们要做的,好了,那接下来咱们来干这个活吧,来,咱们先给他取消掉,取消掉能把我所有的数据给我删了,省得我再手动的去删。好,我们的思路就是在我一进来的时候来,另外在咱们的点WW呃,GS中,咱们一进来的时候,那那不能太早呀,另外有的人说们那一进来在onload中干这活不行吗?ONLOAD1进来之后,你根本获取不到啊,这个我们的群主信息,还有我们的这个当前用户信息,当然有人说我之前的信息都拿到了,但现在咱们要保证他已经进入直播间之后啊,再来判断呀。
14:11
对吧,那我们得进入直播间,那是因为我当时把那个什么group ID都故意设置成他的,当时的那个ID都故设成一样的,那咱们要保证说进入到直播间,就是你得保证咱们这个什么TSDK这些方法初始化完成之后,而且已经加入到我们的直播间中了,然后在这个地方列外,你在这个后面来,If,这是我们的这个后面来,咱们来写一个什么呀,获取啊获取。我们当前这个用户是否已经关注了此主播,此主播。咱们要写一个方法的啊,所以我们在这里呢,我们可以通过这样一个方法的话呢,要进行跟我们的后台进行联联动啊,咱们去查一下这个数据是不是曾经已经有了,对吧,我们要写一个方法,那这个方法呢,咱们可以自己起一个名字吧,获取引经关注了,Get user嘛,获取当前用户的一些信息,包括这个用户的一些点赞信息,咱们都可以写在这个方法里面,好不好,这次点get user infer啊这样一个方法调用,咱把这个方法也一样的写在咱们整个的后面啊,因为我说了啊,咱们所有的回调接口啊,回调方法都写在我们这个类务GS往后排着去写,所以将来客人这个方法的目的啊,这个方法的目的是要帮助我们获取到很多的这个信息的,那包括我们的点赞信息,我们其实都可以通过这个接口的话呢,获取得到啊,这咱们一会啊准备好了哈,去写的一个方法。
15:50
好,另外咱们来看一下吧,就这样一个方法,Get user infer,那这个方法的话呢,目的很明确,就是要调用一个什么呀,这个这个调用后台接口,调用这个后台接口查询,对吧?哎,此用户是否关注好,那这样的话我们就在这再写一个呗,还是最基础的a wait,我们的这个model,哎,大家说这个方法你还没写呢,那就现在就写get user infer,咱们还是一样的把fromd传进去,我非要写在这里,就是因为在这里咱们能够很准确的拿到我们的from ID这些信息,我们的user INF下面的user ID信息,To_ID然后再就是我们的z.data.group.owner ID这些信息咱们是不是在这能很准确呢?能拿得到啊,哎,在这里你可以呃,先打印一下这个结果啊,咱们可以在这打印一下这个结果。
16:50
看到底能拿到个什么东西。啊,我们就在这里来处理了啊,因为在这里咱们能拿得到user infer group infer啊,所以你要放在你的SDK初始化完成,并且join room之后,哎,再调用这个方法对吧?好了,这样的话咱们去model囊中去写好这个模型,Get user色这个模型啊,大家就写习惯了,现在就是机械式的啊在这里进行处理的,是不是来调用之后咱们来到这里啊,我就顺着这块来写呗,这个就是获取是否已经关注,其实这个接口我准备做成什么呀,获取是否已经关注,而且说关注的粉丝数量啊,还有我们的点赞数量啊,我都要在这儿去获取,但是我不会这一次都获取到,对不对,点赞数量,还有我们的这个礼物数量吧,礼物数量啊,因为咱们将来在user card这个页面中会用的,我user看到这个页面,另外诶,在这里好用的,什么粉丝数,礼物数,点赞数,所以我都准备在这一个接口中获取。当然有人说你怎么。
17:53
就想到这了呢,还是句话,我之前呀,是不是写过呀,啊,你非要给我拆成两个接口去做,我认为啊可以啊,也也行啊,所以咱们在这就直接就获取这一个接口都行啊,啊合在一起吧,啊,你分开两个也可以啊,反正功能能完成了,那这样的话,我的目的很明确,就是我一进来6GS调用get user,我们自己写的一个方法,这个方法中去获取我们模型中啊一个叫get user模型,拿到这个模型中将来返回的数据是什么呀。
18:27
是我们已经关,是否已经关注,包括粉丝数量,点赞数量,礼物数量都返回来用哪个那是你自己的事儿,好了,在这个get user in中,那咱们就开始写了,对吧,还是在这里去提取我们之前的这个写法,去洗赖,我们去请求我们来request,我们对应的这个是我们的get user色这个接口,还是post的请求,把IDTOD都给我带过去,所以这个功能其实更多的是在于咱们的后端的一个处理了吧,来吧,让我们的后端来给你处理一下我们的后端啊,Cosplay一个后端新建一个什么呢?API get user.gs好在get user.js的话,另外你要通过这个方法的话呢,去获取啊,我们的这个是否已经关注了这个信息,所以把当年那个follow代码给它复制,拿一份过来,来到get user这里粘过来,好,在get user这个页面中,咱们还是一样的拿到我们的from ID和to ID啊,咱们再把这个这个方法名get user。
19:28
ER,这个方法名咱们给他写好,然后导出的话就是它,然后在这里还是创建数据库连接池,而在这的话,这个写法怎么去写,咱们就改成什么select就行了吧,Select啊,我要选出来是不是,是不是能选出来,咱们可以判断这个长度就可以了,我通过select呢,这个星号也好,或者只选出了ID数量I,咱们from我们的这个follows这张表,然后我们还是同样的在这里去写我们的判断条件where啊。
20:03
Where,这个我们的to ID,还有我们的from ID,哎,我这块我应该直接去粘我们on follow这段代码就行了哈,这块实在是不想写了,是不是把这一小块给他拿过来来来到这里之后咱们来看一下,把外面这块给它改成字符串模板的写法,来列位读一读这段代码什么意思?这段代码最后我们是查询啊,我们follow这张表中啊ID啊通ID是这个的,到底能查出几个来,而且我们只要ID这个字段啊,没必要查出信号来,对不对,所有的没必要查。那这样的话呢,你就可以拿到这样一个结果,我们拿到我们这个一个结果啊,我们DATA1啊,我们follow is这个follows啊,Data等于好,我们可以看一下follow data这一块的话列不要注意哈,因为咱们之前也利用过select查过,Select查出来它是一个二维数组,你真正的那个数据的话,在哪里的列外是不是在这个里面呀,咱们要解构出来一个啊,因为我记得之前返回来的数据,它应该是这样的来,真正的数据在这里,比如说一二查出来有两条数据符合的,而剩下的第二个的话,它是一个我们的数据库的一个对象信息,所以咱们取的其实是它就够了,到时候判断它的长度啊,所以在这里我们直接利用我们的结构拿出来第一个数据,然我们返回的时候到底是不是已经关注了follow的,我们可以判断这个的一个长度。
21:39
啊,如果这个长度是大于一的,为真的情况下,那就是处,如果为假的话,就是false列外。你自己想一想这段逻辑啊,你要不放心的话,打印一段log啊,也测试一下就可以了,所以我们在这里就是将来我们这个值,它是从我们这个二维数组中解构出来的啊,它的长度的话呢,要是一,无非就是一和零,如果这个功能做好了,如果是一就是处,如果是零的话,就是false,给前端返回出去,那这样的话,咱们一保存之后来列外,咱们重新的来把这个啊,这个接口一定要导入哈,这个没导入差点出问题了啊,在这里的话,斜杠斜杠get user infer好,咱们把这个接口也在后台,咱们给它注册好了,好注册好这一个接口,重新的编译一遍我们的小程序端,这样的话,咱们一进来这个页面都准备好了的时候,咱们可以获取到这个信息,咱们来看一下,诶在这里怎么卡住了,重新编译一下。
22:39
好,咱们重新的点击这个羊组,咱们进来啊,进来呀,这块怎么出什么问题呢,然后重新呢,清除一下缓存,咱们再重新呢,给它编译一遍啊。编译完了,咱们再来看一下这个效果,对吧。好,有点慢的意思哈,好了,完事之后呀,咱们可以点击杨组进来,哎呀,我这个怎么出问题了呀,渲染层这块出了问题呀,来看看这里是我们之前那个代码这块出问题了吗?在我们的小程序端的类务GS中这里啊这里的话好像我没加A4啊这种错误啊,报了也不够明确啊,给我好重新编译一下是吗?来点击编译。
23:25
哎呀,这个数据取不回了,那个小心又开始出问题了啊好了,咱们清空掉之后,点击这个羊左进来,哎,这次进来了是不是啊,在这个地方from ID定这里啊,我这个from ID是在我哪个报了这个错GS的get user in这里啊inex GS没有定义,咱们来看一下在我们这个inex GS中,我不会忘了解构吧,果不其然呀啊,真是啊,哎呀,马上摔死英雄哈,对不对?不知道人多不多不多,咱们还得灭口啊,重新再编译一遍吧,点击编译之后。
24:06
嗯,老是这个出错,这个数据怎么来,重新来一遍好了,点击杨组这个数据,咱们来看一下这个数据拿到了吗?Is follow的现在是一个什么呀,这个false这一个值啊,之前之前这些错误的话,清空一下应该就没有问题了,他现在这个数据有时候拿不回来怎么的啊,应该是我们再重新编译一下就好了啊,我这个礼物的这张图片好像是没取回来渲染成错误,但是你会发现现在确确实实的话呢,是没有关注的状态,我们这个接口现在是对的啊,清空的重新编辑一遍,最后测一下,看看控制台没有莫名其妙的报错的话呢,那咱们这个接口就写好了,咱们就得想下一步的动作了,得列外是不是好了,清一下进来之后咱们来看一眼啊,清一下看一眼,是不是我们一进来之后is follow的这个值的话呢,是一个false这一个值啊,而且没有关注,开开文点一下关注之后,好,咱们再重新的再进来一遍。
25:03
再重新的进来一遍,来,再重新的进来一遍。咱们点击技能看一下。是不是is follow了就变成这个true了,所以我这个接口写的话呢,是完全没有问题的,那接下来基于这样一个好用的接口,咱们就可以继续来开发了,刚才这个控制台还是依然报那个错啊,所以客人把这个小程序重启了一遍啊,重启了之后的话,整个功能没有问题了啊,所以这个小程序开发者工具有点小问题哈,所以在这重重新编译了一遍,也不会再有问题了啊,所以我这样的话,这个功能测试已经完成了,点击杨组之后进来之后大家可以看一下对吧,此时返回的是一个处已经关注上了嘛,对不好,我们就可以在这个地方来列外。我们在这里的话,基于我们已经关注了啊,我们找到这个在get user啊六解中我们判断,我们可以判断这个data这个值啊,如果这个值的话呢,它是这个true的情况下,哎,咱们也不用管它是true还是false,咱们直接给那个谁啊is follow的那个状态给它塞上去就可以了呗,啊所以就这样就可以了哈,直接给我们当时诶写好了这个状态直接给他set好就完事了,我们可以在这里通过这次点set,我们不是有一个标识是否已经关注了这样一个状态,我们就从这里面取出来,取出来我们的data.is follow了这个值一保存之后列外这就行了吧,来一运行再次进来之后的话呢,我们来看一眼,一进来就应该显示已关注这样一个小按钮了,对不对啊,等我们再点击了之后,这就应该是取消关注啊,然后在这的话呢,我们再次编译进来之后,那这次这个值的话,就应该是一个什么,只显示成这个关注的样子了,那么。
26:51
再点一下的话,已经关注,等我们再重新的再进来一遍的话呢,就是已经是一个什么呀,已经关注了这样一个样子,然后在我们的数据库中的话,也会有这条数据啊,对吧?啊没有问题啊,取消关注数据没了啊,再次进来之后,再次进来之后啊,这个按钮的话呢,也变成了一个关注点,这已关注离开之后啊,再回来之后,这个按钮变成了什吧已关注的这就对了,那这样的话就避免了哈,咱们可以一下子关注好几次啊,给同一个主播啊,避免数据库中啊有同样的数据的这样一个存在,好另外这就是咱们这一个功能,那下一小段中,咱们再把这个粉丝这个数量给更新一下,这个粉丝这个数量的话呢,难道真的能直接设置成一个一吗?嗯,就这块儿的话,咱们也得好好想一想,粉丝数量这一块,咱们应该一进来就应该先获取当前杨左这个用户。
27:51
到底有多少个粉丝,然后在每次一关注应该是加一,再一取消关注应该是减一这样一个过程呀,所以这个地方也涉及到我们又得重新的去获取一下,杨左到底一开始有多少个粉丝啊,就要跟他拿捏好了,好了咱们再下一小节来看一下这块怎么去处理呢?
我来说两句