Passed
Pull Request — dev (#371)
by
unknown
06:09 queued 02:01
created

easytests.api.v1.controllers.QuestionsController   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
c 1
b 0
f 0
dl 0
loc 41
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
A list(Integer) 0 20 3
1
package easytests.api.v1.controllers;
2
3
import easytests.api.v1.exceptions.ForbiddenException;
4
import easytests.api.v1.exceptions.NotFoundException;
5
import easytests.api.v1.mappers.QuestionsMapper;
6
import easytests.api.v1.models.Question;
7
import easytests.core.models.QuestionModelInterface;
8
import easytests.core.models.TopicModelInterface;
9
import easytests.core.options.AnswersOptionsInterface;
10
import easytests.core.options.QuestionsOptionsInterface;
11
import easytests.core.services.QuestionsServiceInterface;
12
import easytests.core.services.TopicsServiceInterface;
13
import java.util.List;
14
import java.util.stream.Collectors;
15
import org.springframework.beans.factory.annotation.Autowired;
16
import org.springframework.beans.factory.annotation.Qualifier;
17
import org.springframework.web.bind.annotation.*;
18
19
/**
20
 * @author RisaMagpie
21
 */
22
@RestController("QuestionsControllerV1")
23
@SuppressWarnings("checkstyle:MultipleStringLiterals")
24
@RequestMapping("/v1/questions")
25
public class QuestionsController extends AbstractController {
26
27
    @Autowired
28
    protected QuestionsServiceInterface questionsService;
29
30
    @Autowired
31
    protected QuestionsOptionsInterface questionsOptions;
32
33
    @Autowired
34
    protected AnswersOptionsInterface answersOptions;
35
36
    @Autowired
37
    protected TopicsServiceInterface topicsService;
38
39
    @Autowired
40
    @Qualifier("QuestionsMapperV1")
41
    private QuestionsMapper questionsMapper;
42
43
    @GetMapping
44
    public List<Question> list(@RequestParam(name = "topicId", required = true) Integer topicId)
45
            throws NotFoundException, ForbiddenException {
46
        final TopicModelInterface topicModel = this.topicsService.find(topicId);
47
48
        if (topicModel == null) {
49
            throw new NotFoundException();
50
        }
51
52
        if (!this.acl.hasAccess(topicModel)) {
53
            throw new ForbiddenException();
54
        }
55
56
        final List<QuestionModelInterface> questionsModels =
57
                this.questionsService.findByTopic(topicModel, questionsOptions.withAnswers(answersOptions));
58
59
        return questionsModels
60
                .stream()
61
                .map(model -> this.questionsMapper.map(model, Question.class))
62
                .collect(Collectors.toList());
63
    }
64
    /**
65
     * create
66
     */
67
    /**
68
     * update
69
     */
70
    /**
71
     * show(questionId)
72
     */
73
    /**
74
     * delete(questionId)
75
     */
76
77
}
78