• 79:第六章:开发文章服务:12:开发【撤回文章,接口】、【删除文章,接口】;(本篇博客内容,比较简单;)


    说明:

    (1)本篇博客内容:开发【撤回文章,接口】、【删除文章,接口】;

    (2)声明:在该项目中,删除和撤回的业务意义是这样的;自己在开其他项目的时候,其业务意义可能是其他样子的,即有所变动;

    目录

    一:本篇博客,合理性说明;

    二:开发【撤回文章,接口】、【删除文章,接口】:Controller部分;

    1.在【api】接口工程的ArticleControllerApi接口中,定义【撤回文章,接口】、【删除文章,接口】;

    2.在【article】文章服务的ArticleController类中,去实现【撤回文章,接口】、【删除文章,接口】;

    三:开发【撤回文章,接口】、【删除文章,接口】:Service部分;

    1.在【article】文章服务的ArticleService接口中,定义"删除文章"、"撤回文章"的方法;

    2.在【article】文章服务的ArticleServiceImpl类中,去实现"删除文章"、"撤回文章"的方法;

    四:效果;


    一:本篇博客,合理性说明;

    (1)删除:把is_delete字段,修改为1:

               ● 这儿删除的业务意义是:这篇文章用户已经不想要了,想要删除;

               ● 用户删除文章后,该文章的逻辑状态就是已删除了;

               ● 我们这儿没有开发回收站;所以,用户删除一篇文章后,这篇文章对于用户来说,就算永久的删除了;

               ● 但是,其实,用户删除文章后,该文章仅仅是逻辑删除;我们并没有删除该文章在数据库中的那条记录;(PS:这儿,只是简单的演示了一下;在实际开发中,还是要根据自己的具体的项目的需求,去开发的;)

    (2)撤回:把article_status字段,修改为5;

               ● 这儿撤回的业务意义是:这篇文章用户不想对外展示了,想要撤回一下;后续,可能想要重写一篇等;

               ● 只能是已发布的文章,用户才能撤回;

               ● 用户撤回一篇文章后,改文章的状态就变更为了已撤回;这也是文章的最终形态;


    二:开发【撤回文章,接口】、【删除文章,接口】:Controller部分;

    1.在【api】接口工程的ArticleControllerApi接口中,定义【撤回文章,接口】、【删除文章,接口】;

    1. /**
    2. * 前台的,用户删除文章接口;
    3. * @param userId
    4. * @param articleId
    5. * @return
    6. */
    7. @PostMapping("/delete")
    8. @ApiOperation(value = "用户删除文章", notes = "用户删除文章", httpMethod = "POST")
    9. public GraceJSONResult delete(@RequestParam String userId,
    10. @RequestParam String articleId);
    11. /**
    12. * 前台的,用户撤回文章接口;
    13. * @param userId
    14. * @param articleId
    15. * @return
    16. */
    17. @PostMapping("/withdraw")
    18. @ApiOperation(value = "用户撤回文章", notes = "用户撤回文章", httpMethod = "POST")
    19. public GraceJSONResult withdraw(@RequestParam String userId,
    20. @RequestParam String articleId);

    2.在【article】文章服务的ArticleController类中,去实现【撤回文章,接口】、【删除文章,接口】;

    1. /**
    2. * 前台的,用户删除文章接口;
    3. * @param userId
    4. * @param articleId
    5. * @return
    6. */
    7. @Override
    8. public GraceJSONResult delete(String userId, String articleId) {
    9. articleService.deleteArticle(userId, articleId);
    10. return GraceJSONResult.ok();
    11. }
    12. /**
    13. * 前台的,用户撤回文章接口;
    14. * @param userId
    15. * @param articleId
    16. * @return
    17. */
    18. @Override
    19. public GraceJSONResult withdraw(String userId, String articleId) {
    20. articleService.withdrawArticle(userId, articleId);
    21. return GraceJSONResult.ok();
    22. }

    三:开发【撤回文章,接口】、【删除文章,接口】:Service部分;

    1.在【article】文章服务的ArticleService接口中,定义"删除文章"、"撤回文章"的方法;

    1. /**
    2. * 删除文章
    3. */
    4. public void deleteArticle(String userId, String articleId);
    5. /**
    6. * 撤回文章
    7. */
    8. public void withdrawArticle(String userId, String articleId);

    2.在【article】文章服务的ArticleServiceImpl类中,去实现"删除文章"、"撤回文章"的方法;

    1. /**
    2. * 删除文章:简单粗暴的把is_delete字段,修改为1,仅此而已;
    3. */
    4. @Transactional
    5. @Override
    6. public void deleteArticle(String userId, String articleId) {
    7. Example articleExample = makeExampleCriteria(userId, articleId);
    8. Article pending = new Article();
    9. pending.setIsDelete(YesOrNo.YES.type);
    10. int result = articleMapper.updateByExampleSelective(pending, articleExample);
    11. if (result != 1) {
    12. GraceException.display(ResponseStatusEnum.ARTICLE_DELETE_ERROR);
    13. }
    14. }
    15. /**
    16. * 撤回文章:简单粗暴的把article_status字段,修改为5,仅此而已;
    17. */
    18. @Transactional
    19. @Override
    20. public void withdrawArticle(String userId, String articleId) {
    21. Example articleExample = makeExampleCriteria(userId, articleId);
    22. Article pending = new Article();
    23. pending.setArticleStatus(ArticleReviewStatus.WITHDRAW.type);
    24. int result = articleMapper.updateByExampleSelective(pending, articleExample);
    25. if (result != 1) {
    26. GraceException.display(ResponseStatusEnum.ARTICLE_WITHDRAW_ERROR);
    27. }
    28. }
    29. /**
    30. * 工具方法:构建Example条件;
    31. * @param userId
    32. * @param articleId
    33. * @return
    34. */
    35. private Example makeExampleCriteria(String userId, String articleId) {
    36. Example articleExample = new Example(Article.class);
    37. Example.Criteria criteria = articleExample.createCriteria();
    38. criteria.andEqualTo("publishUserId", userId);
    39. criteria.andEqualTo("id", articleId);
    40. return articleExample;
    41. }

    四:效果;

    (1)先install一下整个项目;(2)记得使用SwitchHost开启虚拟域名映射;(3)使用Tomcat启动前端项目;(4)然后,启动后端项目; 

  • 相关阅读:
    MySQL-JSON
    Qt中的线程同步:确保多线程程序的安全性
    软件实施流程(八大阶段)——软件实施工程师
    STM32SDIO外设详解
    跨界创新,数字赋能:探索低代码平台的多元化应用场景
    ubuntu下jupyter notebook设置远程访问
    合肥工业大学内容安全实验一:爬虫|爬新闻文本
    基于强化学习的空域作战辅助决策(1D)
    Kafka-Java二:Spring配置kafka消息发送端的缓冲区
    golang中的正则表达式使用注意事项与技巧
  • 原文地址:https://blog.csdn.net/csucsgoat/article/details/126328796