现在用户上传的头像会被调整成几种不同的尺寸,我们可以规定一下头像服务接口,必须选择一种特定尺寸的用户头像。
设置头像顺序
先打开 GetUserAvatarQuery 这个查询的处理器, 因为用户现在可以设置多个头像,所以在查询用户头像的时候,我们可以按 id 排下顺序,选择最后一次设置的头像。在这个查询对象里面,添加一个 order,它是一个对象,按 id,DESC 排序。
修改头像服务接口
打开 avatar-serve.controller ,修改一下 serveAvatar ,现在让这个接口必须通过 size 这个地址查询符提供一种头像尺寸,在这个处理器方法里,用@Query 装饰器,得到 size 这个地址查询符的值,交给 size 参数,类型是 string。
在方法里,先判断一下 !size,如果没有设置 size 查询符,就 throw 一个异常,新建一个 BadRequestException,异常信息是请选择头像尺寸。
下面声明一个 isValidSize ,一个数组,里面有 large,medium 还有 small ,这是可用的几个头像尺寸,用一下 some,提供一个函数参数,一个 item ,判断一下 item 是否等于 size 。这里就是判断一下通过 size 这个地址查询符提供的尺寸,是否包含在可用的头像尺寸里。
判断一下,如果 !isValidSize,如果不是有效的尺寸,就 throw 一个异常,新建一个 BadRequestException,异常信息是无效头像尺寸。
然后再修改一下 getUserAvatarStream ,让它支持一个 size 参数,它的值是从地址查询符里的 size。
getUserAvatarStream
下面再修改一下这个服务方法,添加一个新的参数,名字是 size,类型是 string ,这个 avatarPath 要改一下,第二个项目换成 filename,小横线,再加上 size 。再修改一下上面这个配置,换成 upload.avatarResized 这个配置,这样得到的就是调整大小之后的某个头像文件的路径。
测试
在 Http 客户端测试一下,打开头像服务请求,直接发送一下这个请求,这回会得到一个异常响应,因为在请求的地址里并没有包含 size 这个查询符,添加一个查询符,名字是 size,值可以设置在 huge,发送一下,又会是一个异常响应,因为 huge 并不是有效的头像尺寸。这回把 size 换成 large,发送请求,得到的就是大号的头像,再换成 medium ,得到是中号的头像,再试一下 small,得到的是小号的头像。