自学内容网 自学内容网

黑马头条day3-3自媒体接口作业

黑马头条day3-3自媒体接口作业

1)素材管理

1.1)图片删除

接口描述

说明
接口路径/api/v1/material/del_picture/{id}
请求方式GET
参数Integer id
响应结果ResponseResult

返回结果实例:

image-20210719002352845

实现思路

image-20240923224510868

感觉删除比较难写 因为需要判断图片是不是和文章挂钩了

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

返回结果实例:

image-20210719002621046

具体实现

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

返回结果实例:

image-20210719002805621

实现思路

其实就是点击编辑之后 文章内容能够在编辑页面回显

image-20240925152353293
具体实现

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

返回结果实例

image-20210719002907886

2.3)文章上下架

接口描述

说明
接口路径/api/v1/news/down_or_up
请求方式POST
参数WmNewsDto
响应结果ResponseResult

WmNewsDto

image-20210719003029361

返回结果实例

image-20210719003114332

实现思路(删除和上下架)

状态码情况考虑的不全 也没有涉及后边的异步

同时感觉提交的时候有个bug 存为草稿的话 直接提交成功

但是如果想要把草稿编辑上架的话 就一直卡在这个循环了 目前没解决

image-20240925160448771

删除的话就是根据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);
    }


原文地址:https://blog.csdn.net/m0_48362854/article/details/142526605

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!