黑马头条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);
业务层实现类:
@Override
public 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数据库)
@Override
public 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,"操作成功");
}
@Override
public 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);
@Override
public 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);
@Override
public 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,"删除失败");
}
}
@Override
public 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);
}