黑马头条day3-3自媒体接口作业
1)素材管理
1.1)图片删除
接口描述
说明 | |
---|---|
接口路径 | /api/v1/material/del_picture/{id} |
请求方式 | GET |
参数 | Integer id |
响应结果 | ResponseResult |
返回结果实例:
实现思路
感觉删除比较难写 因为需要判断图片是不是和文章挂钩了
gpt帮了很多 有四种情况需要处理 其中 只是自己的理解
1 数据不存在 就是库里边没有
2 参数失效就是 有链接但url不存在
3 删除失败是已经在其他文章里边引用了 (等删除掉所有相关的文章之后 这个图片才可以删除
4 最后就是操作成功
红框的就是在一个mapper里边去引用另外的表格的mapper的写法
这个程序写的很杂 有mp 还有xml
具体实现
Controller(注意一定要加@PathVariable(“id”)注解 不然传过来id为null)
@GetMapping("/del_picture/{id}")public ResponseResult delPicture(@PathVariable("id") Integer id){return wmMaterialService.delPicture(id);}
mapper
无 不用改
业务层:新增这一个代码
public ResponseResult delPicture(Integer id);
业务层实现类:
@Overridepublic ResponseResult delPicture(Integer id) {System.out.println(id);WmMaterial wmMaterial = getById(id);if(wmMaterial == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);}//判断是否被引用
// if(wmMaterial.getIsCollection() == 1){
// return ResponseResult.errorResult(AppHttpCodeEnum.MATERIAL_REFERENCE);
// }if(wmMaterial.getUrl() == null){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}WmNewsMaterial wmNewsMaterial = new WmNewsMaterial();wmNewsMaterial.setMaterialId(id);//查询wm_news_material表里边是否有包含该id// 创建查询条件QueryWrapper<WmNewsMaterial> queryWrapper = new QueryWrapper<>();// 假设你想根据某个字段进行过滤queryWrapper.eq("material_id", id);// 调用 selectCount 方法int count = wmNewsMaterialMapper.selectCount(queryWrapper);if(count > 0){return ResponseResult.errorResult(501,"文件删除失败" );}fileStorageService.delete(wmMaterial.getUrl());removeById(id);return ResponseResult.okResult(200,"操作成功");}
测试
启动自媒体微服务和自媒体网关,使用前端项目进行测试
1.2)收藏与取消
接口描述
取消收藏
说明 | |
---|---|
接口路径 | /api/v1/material/cancel_collect/{id} |
请求方式 | GET |
参数 | Integer id |
响应结果 | ResponseResult |
收藏
说明 | |
---|---|
接口路径 | /api/v1/material/collect/{id} |
请求方式 | GET |
参数 | Integer id |
响应结果 | ResponseResult |
返回结果实例:
具体实现
Controller(注意一定要加@PathVariable(“id”)注解 不然传过来id为null)
@GetMapping("/cancel_collect/{id}")public ResponseResult cancelCollect(@PathVariable("id") Integer id){return wmMaterialService.cancelCollect(id);}@GetMapping("/collect/{id}")public ResponseResult collect1(@PathVariable("id") Integer id){return wmMaterialService.collect1(id);}
mapper
无 不用改
业务层:新增这一个代码
ResponseResult cancelCollect(Integer id);ResponseResult collect1(Integer id);
业务层实现类:(注意修改完vmMaterial 之后不要忘记加上update数据库)
@Overridepublic ResponseResult cancelCollect(Integer id) {WmMaterial wmMaterial = getById(id);if(wmMaterial.getIsCollection() == 0){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}wmMaterial.setIsCollection((short)0);updateById(wmMaterial);return ResponseResult.okResult(200,"操作成功");}@Overridepublic ResponseResult collect1(Integer id) {System.out.println(id);WmMaterial wmMaterial = getById(id);if(wmMaterial.getIsCollection() == 1){return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);}wmMaterial.setIsCollection((short)1);updateById(wmMaterial);return ResponseResult.okResult(200,"操作成功");}
测试
启动自媒体微服务和自媒体网关,使用前端项目进行测试
2)文章管理
2.1)查看详情
接口描述
说明 | |
---|---|
接口路径 | /api/v1/news/one/{id} |
请求方式 | GET |
参数 | 文章id |
响应结果 | ResponseResult |
返回结果实例:
实现思路
其实就是点击编辑之后 文章内容能够在编辑页面回显
具体实现
controller
@GetMapping("/one/{id}")public ResponseResult findOne(@PathVariable("id") Integer id){return wmNewsService.findOne(id);}
service和impl
ResponseResult findOne(Integer id);@Overridepublic ResponseResult findOne(Integer id) {WmNews wmNews = getById(id);if(wmNews != null){return ResponseResult.okResult(wmNews);}log.info("文章不存在,id:{}",id);return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);}
2.2)文章删除
接口描述
说明 | |
---|---|
接口路径 | /api/v1/news/del_news/{id} |
请求方式 | GET |
参数 | 文章id |
响应结果 | ResponseResult |
返回结果实例
2.3)文章上下架
接口描述
说明 | |
---|---|
接口路径 | /api/v1/news/down_or_up |
请求方式 | POST |
参数 | WmNewsDto |
响应结果 | ResponseResult |
WmNewsDto
返回结果实例
实现思路(删除和上下架)
状态码情况考虑的不全 也没有涉及后边的异步
同时感觉提交的时候有个bug 存为草稿的话 直接提交成功
但是如果想要把草稿编辑上架的话 就一直卡在这个循环了 目前没解决
删除的话就是根据id 然后四个情况判断就好了 同时注意要删除掉关联表的信息 至于minio里边的要不要删除没涉及 不太清楚
上架下架也是需要考虑文章的状态 然后更改数据库的状态就可以了
具体实现
controller
@GetMapping("/del_news/{id}")public ResponseResult delNews(@PathVariable("id") Integer id){return wmNewsService.delNews(id);}@PostMapping("/down_or_up")public ResponseResult downOrUp(@RequestBody WmNewsDto dto){return wmNewsService.downOrUp(dto);}
service和impl
ResponseResult delNews(Integer id);ResponseResult downOrUp(WmNewsDto dto);@Overridepublic ResponseResult delNews(Integer id) {WmNews wmNews = getById(id);if(wmNews == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");}if(wmNews.getStatus().equals(WmNews.Status.SUBMIT.getCode())){//删除文章removeById(id);wmNewsMaterialMapper.delete(Wrappers.<WmNewsMaterial>lambdaQuery().eq(WmNewsMaterial::getNewsId, id));return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);}else{return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"删除失败");}}@Overridepublic ResponseResult downOrUp(WmNewsDto dto) {WmNews wmNews = getById(dto.getId());if(wmNews == null){return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");}if(wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode())){wmNews.setStatus(WmNews.Status.NORMAL.getCode());}else if(wmNews.getStatus().equals(WmNews.Status.NORMAL.getCode())){wmNews.setStatus(WmNews.Status.SUBMIT.getCode());}updateById(wmNews);return ResponseResult.okResult(wmNews);}