Преобразовать modelId в model & validation of modelId - на уровне контроллера или сервиса? - PullRequest
0 голосов
/ 08 февраля 2020

Скажем, пример, в котором мы хотим создать статью с некоторыми тегами . Ниже мой псевдокод, а вопросы внизу. Большое спасибо за любые идеи !!

Пример дела

Запрос:

@Data
public class CreateArticleRequest {
    @NotEmpty
    String content;
    @NotEmpty
    List<Integer> tagIds;
}

Контроллер:

@RestfulController
public class ArticleController {
    // ... some autowire ...
    public void create(@Valid CreateArticleRequest request) {
        // (i) shall I do this?
        if(!repository.doesAllTagIdsExists(request.getTagIds())) {
            throw new RuntimeException("bad tagIds");
        }

        service.create(request); // or shall I put something here?
    }
}

Сервис:

@Service
public class ArticleService {
    // ... some autowire ...
    public void create(CreateArticleRequest request) {
        Article article = new Article();
        article.setContent(request.getContent());
        Article createdArticle = repository.createArticle(article);
        // (ii)
        repository.createArticleTagRelation(createdArticle.getId(), request.getTagIds());
    }
}

Модель:

@Data class Article { int id; String content; }
@Data class Tag { int id; ...sth else... }

База данных:

Table "article" columns: id, content
Table "tag" columns: id, sth_else
Table "article_has_tag" columns: article_id, tag_id

Вопросы

  1. Конечно, нам нужно проверить, является ли tagId существует и виден этому пользователю, вместо того, чтобы доверять ему и напрямую помещать в базу данных. Где мне это сделать? Должен ли я сделать это в (я)? (Я знаю, что мы можем проверять такие вещи, как «не пустой» и т. Д. c, используя @NotEmpty, но как я могу проверить те tagIds, которым нужна база данных?)
  2. На (ii) в Сервисе, createArticle + createArticleTagRelation здесь можно обработать или объединить их в одну функцию хранилища repository.createArticleAndWithTagRelation?
  3. Хорошо ли иметь такие XXXRequest и YYYResponse объекты? Что-то не так с моей общей архитектурой?

Большое спасибо за любые идеи! Извините, я новичок в этой области ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...