00:00
这节课呢,我们主要是开发购物车相关的接口,并且对之前的一些接口呢,做一些修改和调整,首先我们来到之前的这个添加购物车这个接口啊,那么这个接口的话呢,之前我们是先查询它是否存在,存在的话呢,我们就直接更新数量,不存在我们的创建,这是之前我们逻辑啊,但是这里有个问题,就是我们在做购物车操作的时候,有可能把数量减为零。那么减为零的话呢,这个应该要被删除掉,所以说我们这里加了个判断条件啊,如果它数量为零,咱们就把这个商品给删掉,不要出现一个数量为零的商品竟然在购物车里面,这样就很奇怪啊。好了,所以我们这里添加购物车,这里呢,加了个逻辑。以及呢,我们开发了删除购物车的接口啊,删除购物车接口呢,因为我们将来是可以批量删除的,所以我们要求传一个CAID,也就说传一个数组,数组里面都是cast的ID,那么这里面呢,我们就会用上这个删除方法去删除。
01:08
其中这里用了一个操作符啊,就是or啊or就是或者里面满足条件的我们都要删掉。我们要把一个这样的数组ID变成对象,里面ID的值为ID,要把它变成一个这样的值,所以我这里用那个数组的map方法把它变成一个对象,这样的话呢,阿尔法法才会生效。好,接下来呢,最复杂的来了啊,获取cat Lia,这里要特殊说明一下,就是之前的我们那个get cutli改了个名字啊,因为他是根据店家的ID去获取的,所以我改了个名字叫get shop,看list。这是因为这里改了名字,所以我们那个店家页面那个请求地址那里也要改啊,这里要稍微注意一下,然后呢,这是我们将来购物车的get卡啊,所以叫这个名字。好,这个呢就会比较复杂了,它整个查询呢,我们来看特别的长,因为我们这里我们要进行查询的话,我们看一下这个接口文档啊。
02:08
当我们获取这个卡,这个是它自带的提供的一个获取cut列表的一个工具啊,但是自带的工具呢,它只能查询到负的ID和shop ID,而我们最终购物车的时候,是需要所有的食品和店家的名字啊,标题啊这些东西啊,还有店家的数据的。所以这里我们要进行列表查询,查询到for的数据和shop的数据。好,那么这些列表查询,查询food和shop的话呢,也简单啊,加一个include字段就可以查询到了,但是这样查询到之后呢,他们就没有分组。对吧,没有分组,所以我们希望什么呢?我们希望查询来数据是个数组里面是对象,对象里面的是店家数据,然后店家数据里面呢,有食品列表,那么这样呢,将来我便利展示的时候就好展示了,首先展示店家,然后在店家下面在便利展示食品列表,这样的我的购物车数据就好展示,但是如果是直接列表查询,查询出来的话呢,咱们的店家和食品数据它是它是不没有关联起来的。
03:12
所以说不太好,那么这里我们就用了一个mango DB的一个聚合查询来完成。而且为了考虑到将来我们要下单啊,所以说我加了个参数叫以order,以order为true的话呢,代表要下单,要下单的话呢,我们要下单的是选中的商品,所以传的是以selected为true的。那么如果你以order为false,那么我就查询所有这个购物车数据,你选中没选中的我都要查询到。好,这里用了聚合查询啊,然后呢,里面是dont match,就是它的查询条件,聚合查询和find方法查,查询的方式不一样啊,方案的方法呢,是咱们的这个数据语音对mango DB的一些方法做了个分装,所以我们可以那样用好这个聚合查询呢,用的就是底层mango DB的这个聚合查询的方法,所以它的这个写法呢,和mango DB的写法是一样的。
04:04
所以这个聚合查询的文档呢,要去看mango DB的聚合查询文档。Match就是它的一个查询条件啊,然后这里就是聚合查询关联表的语法。这里都写了关联,关联shop这量表啊,当前表的ID shop ID shop的表是下划线ID,因为是ma DB的这个字段啊,所以说它的ID是下划线ID,然后呢,查询出来的字段呢,我们取名字叫shop,下面查询出来字段取名字叫负的。好,这时候要知道就是默认的它关联查询出来数据呢,都是个数组。数组里面放的是我们shop对象和这个负的对象。但是我们用的时候只希望有这个对象就好了,这个数组没意义啊,所以我用了另外一个操作符加wind的,把这个数字给展开成一个对象啊,拆开一个对象。好,做完一切之后呢,接下来就要对数据进行分组了,我们同属于一个店家的数据要放在一起,不同店家数据要分为两部分,所以这里面我们通过多group进行分组,分组的依据就是这个下划线ID_ID的值是什么,它就按照什么来分组,我们就按照shop的ID进行分组啊,那么这个时候我们访问上面的数据呢,前面加个多福就可以访问了。
05:19
好,同时我们还要在分组的数据中添加一个title字段,Title呢,通过first来添加,它的值是shop的title。同时要添加一个food list是食品列表,通过多push往食品列表里面push数据。所以这样定义的数啊,这个负的例子呢,它就是一个数组了。啊,注意title什么做first并不是认为它是个对象啊,而是它的值是这个title字段。而这里用的到复式,所以负的意思就是个数组啊,数组里面添加了以上这些数据。ID,食品的ID标题图片,价格,数量是否选中和它的这个当前购物车的这个ID卡ID。
06:06
最后呢,Project呢,是进行重命名啊,重命名的意思不是重命名啊,就是我们要保留哪些字段,下滑下ID,我们在mango DB里面有就好了,我们并不需要,所以我把这个零去掉了,同时我们给的这个ID给了shop ID给的title给了photo等等啊,这些数据我们都保留,最终我们把查询出来数据转数组,然后return出去就好了。所以整个查询过程会比较复杂,所以大家稍微要注意一下。后续呢,我们会把这些所有的这些函数呢,我们整理成一个文件啊发给大家,那么大家到时候可以去看那个文件里面定义的内容。好,这个get shop list,那这个没什么问题啊,就是这样的,然后更新它的一个商品的一个选中状态,这个就是我们将来的一个全选功能。同样的,你要传一个CID的list列表给我们,然后告诉我是选中还是不选中,那么我在这里对它进行统一的更新。
07:05
还有一个单单选功能,单选功能你就传某一个ID和他是否选中,那么我对这个单独的这个进行更新就好了。所以整个工程呢,有添加可更新数量,有删除,有获取整个列表,有获取某一个列表,以及更新所有。全选功能和单选功能。好了,那么这些呢,我们就给大家开发好了,后续大家按照我们内容去填写,那么我们接下来就可以完成购物车功能了。
我来说两句