博客系统发表文章接口进行微调
- 文章保存的时候,应该先查询分类id是否存在
- 分类id存在的情况下,判断分类是否可用状态
- 修改文章的时候,同理
- 字段移除两边空格
- 更新文章?限制文章草稿和发布的时候,才能更新
保存文章,或者草稿处理
@Override
    public ResponseResult postArticle(Article article) {
        //检查是否登录了
        SobUser sobUser = mUserService.checkSobUser();
        if (sobUser == null) {
            return ResponseResult.FAILED("请登录");
        }
        //分类id,文章,依赖分类,必须有分类id,才能关联起来.
        String categoryId = article.getCategoryId();
        //检查文章的,字段,是否空的.
        if (TextUtils.isEmpty(categoryId)) {
            return ResponseResult.FAILED("分类id不能为空");
        }
        Category dbCategory = mCategoryDao.findOneById(categoryId.trim());
        if (dbCategory == null) {
            return ResponseResult.FAILED("分类不存在");
        }
        if ("0".equals(dbCategory.getStatus())) {
            return ResponseResult.FAILED("分类被禁用");
        }
        String state = article.getState();
        if (TextUtils.isEmpty(state)) {
            return ResponseResult.FAILED("状态不能为空");
        }
        //草稿,发布2各种状态的文章
        if (!Constants.Article.STATE_PUBLISH.equals(state)
                && !Constants.Article.STATE_DRAFT.equals(state)) {
            return ResponseResult.FAILED("你的状态不对哦");
        }
        //格式分类
        String type = article.getType();
        if (TextUtils.isEmpty(type)) {
            return ResponseResult.FAILED("文章格式不能是空,0富文本,1 md");
        }
        if (!Constants.Article.TYPE_MU.equals(type) && !Constants.Article.TYPE_MD.equals(type)) {
            return ResponseResult.FAILED("文章格式,0富文本,1 md");
        }
        //发布文章的时候,需要检查数据
        if (Constants.Article.STATE_PUBLISH.equals(state)) {
            //标题
            String title = article.getTitle();
            if (TextUtils.isEmpty(title)) {
                return ResponseResult.FAILED("标题不能为空");
            }
            if (title.trim().length() > Constants.Article.MAX_TITLE_LEN) {
                return ResponseResult.FAILED("标题最大" + Constants.Article.MAX_TITLE_LEN);
            }
            //摘要
            String summary = article.getSummary();
            if (TextUtils.isEmpty(summary)) {
                return ResponseResult.FAILED("摘要不能为空");
            }
            if (summary.trim().length() > Constants.Article.MAX_SUM_LEN) {
                return ResponseResult.FAILED("摘要最大" + Constants.Article.MAX_SUM_LEN);
            }
            //内容
            String content = article.getContent();
            if (TextUtils.isEmpty(content)) {
                return ResponseResult.FAILED("内容不能为空");
            }
            //标签
            String labels = article.getLabels();
            if (TextUtils.isEmpty(labels)) {
                return ResponseResult.FAILED("文章标签不能为空");
            }
            //封面
            String cover = article.getCover();
            if (TextUtils.isEmpty(cover)) {
                return ResponseResult.FAILED("封面必须配置");
            }
        }
        String articleId = article.getId();
        if (TextUtils.isEmpty(articleId)) {
            //如果当前不附带id,就是新创建的文章,或者草稿
            article.setId(String.valueOf(mIdWorker.nextId()));
            article.setCreateTime(new Date());
        } else {
            //更新内容,检查状态。如果已经发布了。就不能保存草稿了。
            Article dbArt = mArticleAdminDao.findOneById(article.getId());
            if (dbArt == null) {
                return ResponseResult.FAILED("无法查询到文章,无法修改");
            }
            //用户提交的草稿。但是库内,已经是发布了。是不允许存草稿的。
            if (Constants.Article.STATE_PUBLISH.equals(dbArt.getState())
                    && Constants.Article.STATE_DRAFT.equals(state)) {
                return ResponseResult.FAILED("文章已经发布了,不能存草稿");
            }
        }
        //补充数据
        article.setUpdateTime(new Date());
        article.setCategoryId(categoryId.trim());
        article.setUser_id(sobUser.getId());
        //移除空格
        article.setTitle(article.getTitle().trim());
        article.setSummary(article.getSummary().trim());
        article.setContent(article.getContent().trim());
        article.setType(type.trim());
        article.setLabels(article.getLabels().trim());
        article.setCover(article.getContent().trim());
        //save to db
        mArticleAdminDao.save(article);
        if (Constants.Article.STATE_DRAFT.equals(state)) {
            return ResponseResult.SUCCESS("草稿保存成功");
        }
        return ResponseResult.SUCCESS("文章发布成功");
    }
更新文章的时候,也需要处理分类id的问题。
@Override
    public ResponseResult updateArticle(String articleId, Article article) {
        //更新?需要校验那些数据是不能为空的。
        //检查id对应的文章是否存在。
        Article dbArticle = mArticleAdminDao.findOneById(articleId);
        if (dbArticle == null) {
            return ResponseResult.FAILED("文章不存在");
        }
        //什么状态下的文章,可以更新?
        if (!Constants.Article.STATE_PUBLISH.equals(dbArticle.getState())
                && !Constants.Article.STATE_DRAFT.equals(dbArticle.getState())) {
            return ResponseResult.FAILED("文章不是发布/草稿状态,不能更新");
        }
        String categoryId = article.getCategoryId();
        if (TextUtils.isEmpty(categoryId)) {
            return ResponseResult.FAILED("分类id不能为空");
        }
        //检查分类是否存在
        Category dbCategory = mCategoryDao.findOneById(categoryId);
        if (dbCategory == null) {
            return ResponseResult.FAILED("分类不存在");
        }
        if (Constants.CategoryKey.STATE_DEPRECATED.equals(dbCategory.getStatus())) {
            return ResponseResult.FAILED("分类已经废弃了");
        }
        String title = article.getTitle();
        if (!TextUtils.isEmpty(title)) {
            dbArticle.setTitle(title.trim());
        }
        String summary = article.getSummary();
        if (!TextUtils.isEmpty(summary)) {
            dbArticle.setSummary(summary.trim());
        }
        String labels = article.getLabels();
        if (!TextUtils.isEmpty(labels)) {
            dbArticle.setLabels(labels.trim());
        }
        String content = article.getContent();
        if (!TextUtils.isEmpty(content)) {
            dbArticle.setContent(content.trim());
        }
        dbArticle.setCategoryId(categoryId);
        //修改更新时间
        dbArticle.setUpdateTime(new Date());
        return ResponseResult.SUCCESS("文章更新成功");
    }
注意的地方都写在代码注释中了
这是我自己写测试接口的时候,发现需要补救的地方。因为我平时调人家的接口也是乱传东西,所以成了习惯。 很多问题都可以在不断测试中发现。 同时也希望同学们在过程中,发现了需要修正的地方,也欢迎发文章做记录。



 断点-含光君  回复 @拉大锯
 断点-含光君  回复 @拉大锯 























