定义一个获取文件元数据用的接口。先生成一个查询,在终端,执行 npm run gq 名字是 get-file-metadata ,放在 file/modules/metadata/queries 里面。
回到项目,打开 GetFileMetadataQuery 这个查询,在查询的参数里添加一个 fileId,类型是 number。打开这个查询对应的处理器。在构造方法里注入一个 Repository 依赖,实体类型是 FileEntity ,名字是 fileRepository,导入需要用的这些东西。
在 execute 里面,解构一下查询参数,需要 fileId ,来自 query.params ,下面声明一个 file,等于 await,用一下 this.fileRepository.findOne,提供一个 fileId。
判断一下,如果 !file,如果没找到相关的文件数据,可以 throw 一个 NotFoundException ,异常信息是没找到文件数据。
最后 return 的东西是一个对象,里面有 id,值是 file.id,还需要 size ,值是 file.size,然后是 width ,值是 file.width,再添加一个 height,值是 file.height,然后是 metadata,值是 file.metadata。
FileMetadataController
打开 FileMetadataController ,在这个控制器里添加一个构造方法,注入一个 QueryBus 依赖。然后定义一个接口,处理器的名字叫 getFileMetadata。用 @Get 装饰一下,地址是 files/:fileId/metadata。处理器需要一个参数,用 @Param 装饰一下,得到 fileId 这个地址参数,把它交给 fileId ,类型是 number。
方法 return 的东西就是执行 GetFileMetadataQuery 这个查询得到的结果,新建一个 GetFileMetadataQuery,提供一个对象参数,里面需要一个 fileId。
测试
在 Http 客户端可以测试一下这个接口,在文件的下面新建一个请求,名字是文件元数据,请求方法用 GET,设置一下请求地址,一个基本的地址,加上 files 后面是文件的 id,再加上斜线 metadata。
发送一下这个请求,得到的响应就是对应的这个文件相关的一些元数据。