《黑马头条》day03作业

一、素材管理

1.图片删除、收藏与取消

WmMaterialController:
//删除接口
@GetMapping("/del_picture/{id}")
public ResponseResult delPicture(@PathVariable("id") Integer id) {
   return wmMaterialService.delPicture(id);
}

//收藏接口
@GetMapping("/collect/{id}")
    public ResponseResult collect(@PathVariable("id") Integer id) {
        return wmMaterialService.collectOrCancel(id);
    }

//取消收藏接口
    @GetMapping("/cancel_collect/{id}")
    public ResponseResult cancelCollect(@PathVariable("id") Integer id) {
        return wmMaterialService.collectOrCancel(id);
    }
WmMaterialService:
/**
 * 素材图片删除
 * @param id
 * @return
*/
ResponseResult delPicture(Integer id);


/**
     * 收藏或取消收藏
     * @param id
     * @return
     */
    ResponseResult collectOrCancel(Integer id);
WmMaterialServiceImpl:
/**
     * 素材图片删除
     * @param id
     * @return
     */
    @Override
    public ResponseResult delPicture(Integer id) {
        //参数校验
        if (id == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }

        //判断素材是否存在
        WmMaterial wmMaterial = wmMaterialMapper.selectById(id);
        if (wmMaterial == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.AP_USER_DATA_NOT_EXIST);
        }

        //判断该素材是否被引用,如果是,则返回删除失败
        List<WmNewsMaterial> wmNewsMaterials = wmNewsMaterialMapper.selectList(Wrappers.<WmNewsMaterial>lambdaQuery()
                .eq(WmNewsMaterial::getMaterialId, id));
        if (wmNewsMaterials != null && wmNewsMaterials.size() != 0) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文件删除失败");
        }

        //成功删除 同时删除minio中的文件
        fileStorageService.delete(wmMaterial.getUrl());
        removeById(id);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }



/**
     * 收藏或取消收藏
     * @param id
     * @return
     */
    @Override
    public ResponseResult collectOrCancel(Integer id) {
        if (id == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }

        WmMaterial wmMaterial = wmMaterialMapper.selectById(id);
        if (wmMaterial == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }

        if (wmMaterial.getIsCollection() == (short)1) {
            //等于1,说明已经收藏,则取消收藏
            wmMaterial.setIsCollection((short)0);
            updateById(wmMaterial);
            return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
        }

        //走到这里说明wmMaterial 不为空 且 idCollection == 0
        wmMaterial.setIsCollection((short)1);
        updateById(wmMaterial);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

二、文章管理

1.查看详情、文章删除、文章上下架

注意!!!!!:

在文章上下架中,老师原来的代码,在WmNewsDto实体类中没有enable属性,需要我们自己加上:private Short enable; (文章上下架接口可以在knife4j中测试)

wmNewsService:

    //查看详情
    @GetMapping("/one/{id}")
    public ResponseResult<WmNews> detail(@PathVariable("id") Integer id) {
        return wmNewsService.detail(id);
    }

    //删除
    @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);
    }
WmNewsService:
    /**
     * 查询文章详情
     * @param id
     * @return
     */
    ResponseResult<WmNews> detail(Integer id);

    /**
     * 删除文章
     * @param id
     * @return
     */
    ResponseResult delNews(Integer id);

    /**
     * 文章上下架
     * @param dto
     * @return
     */
    ResponseResult downOrUp(WmNewsDto dto);
WmNewsServiceImpl:
    /**
     * 根据id查询文章
     * @param id
     * @return
     */
    @Override
    public ResponseResult detail(Integer id) {
        if (id == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID);
        }
        WmNews wmNews = wmNewsMapper.selectById(id);
        if (wmNews == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }
        return ResponseResult.okResult(wmNews);
    }

    /**
     * 删除文章
     * @param id
     * @return
     */
    @Override
    public ResponseResult delNews(Integer id) {
        if (id == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章id不可缺少");
        }

        WmNews wmNews = wmNewsMapper.selectById(id);
        if (wmNews == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }

        if (wmNews.getStatus().equals(WmNews.Status.PUBLISHED.getCode())) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章已发布不能删除");
        }

        //删除wm_news表的数据
        wmNewsMapper.deleteById(id);
        //判断在news_material中是否有关联数据
        LambdaQueryWrapper<WmNewsMaterial> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(WmNewsMaterial::getNewsId,id);
        Integer count = wmNewsMaterialMapper.selectCount(queryWrapper);
        if (count > 0) {
            //有则一并删除
            wmNewsMaterialMapper.delete(queryWrapper);
        }
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

    /**
     * 文章上下架
     * @param dto
     * @return
     */
    @Override
    public ResponseResult downOrUp(WmNewsDto dto) {
        //判断id
        if (dto.getId() == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章id不可缺少");
        }

        //判断有无数据
        WmNews wmNewsDB = wmNewsMapper.selectById(dto.getId());
        if (wmNewsDB == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST,"文章不存在");
        }

        //判断是否已发布
        if (wmNewsDB.getStatus() != WmNews.Status.PUBLISHED.getCode()) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID,"文章未发布不能上架");
        }

        //判断是上架还是下架 -> 0:下 1:上
        if (wmNewsDB.getEnable() == 0) {
            wmNewsDB.setEnable((short)1);
        } else if (wmNewsDB.getEnable() == 1) {
            wmNewsDB.setEnable((short)0);
        }
        updateById(wmNewsDB);
        return ResponseResult.okResult(AppHttpCodeEnum.SUCCESS);
    }

这是我写的代码,希望对个位小伙伴能有所帮助,有可以改进的地方欢迎在评论区留言哦。最后希望喜欢的小伙伴可以点点赞和关注支持一下吧,十分感谢。

### 黑马头条 Day9 课程相关内容 黑马头条项目的课程体系设计较为全面,涵盖了从基础到高级的技术知识点。Day9 的课程内容通常会深入讲解微服务架构中的核心组件以及分布式系统的实践细节[^1]。 #### 可能涉及的核心主题 以下是可能属于 Day9 的一些重点内容: 1. **Spring Cloud 高级特性** Spring Cloud 是该项目的重要组成部分之一,在 Day9 中可能会进一步探讨其高级特性和最佳实践,例如 Hystrix 断路器模式、Zuul 网关的优化配置等。 2. **多线程与并发处理** 移动应用后台需要高效地管理大量请求,因此多线程编程和并发控制成为必要技能。这部分内容也可能出现在 Day9 中,并结合实际案例说明如何提升系统性能[^2]。 3. **缓存机制的设计与实现** 对于像黑马头条这样的高频访问平台来说,合理运用 Redis 或其他内存数据库作为缓存层至关重要。预计会在该日学习关于数据一致性模型及其应用场景的知识点。 4. **负载均衡策略** 当流量增加时,单台服务器难以满足需求,则需引入集群部署方案并设置合适的负载分发算法。这方面的理论知识加上动手实验将是学员们掌握的重点部分之一。 5. **监控报警体系建设** 微服务体系下各模块间相互依赖复杂度较高,建立完善的健康状态监测体系不可或缺。可以预见的是,在这一天还会接触到诸如 Prometheus 和 Grafana 这样的开源工具链用于可视化展示指标信息。 ```java // 示例代码片段:Hystrix 命令类定义 public class NewsServiceCommand extends HystrixCommand<String> { private final String name; public NewsServiceCommand(String name) { super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")); this.name = name; } @Override protected String run() throws Exception { return "Hello " + name + " from Thread " + Thread.currentThread().getName(); } } ``` 上述 Java 示例展示了如何创建一个简单的 Hystrix Command 来增强服务调用的可靠性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值