Completed
Pull Request — dev (#395)
by
unknown
04:30
created

getQuizModel

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 6
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.QuizzesMapper;
6
import easytests.api.v1.models.Quiz;
7
import easytests.core.models.IssueModelInterface;
8
import easytests.core.models.QuizModelInterface;
9
import easytests.core.options.IssuesOptions;
10
import easytests.core.options.QuizzesOptions;
11
import easytests.core.options.QuizzesOptionsInterface;
12
import easytests.core.options.builder.QuizzesOptionsBuilderInterface;
13
import easytests.core.services.IssuesServiceInterface;
14
import easytests.core.services.QuizzesServiceInterface;
15
import java.util.List;
16
import java.util.stream.Collectors;
17
import org.springframework.beans.factory.annotation.Autowired;
18
import org.springframework.beans.factory.annotation.Qualifier;
19
import org.springframework.web.bind.annotation.*;
20
21
22
/**
23
 * @author miron97
24
 */
25
@RestController("QuizzesControllerV1")
26
@SuppressWarnings("checkstyle:MultipleStringLiterals")
27
@RequestMapping("/v1/quizzes")
28
public class QuizzesController extends AbstractController {
29
30
    @Autowired
31
    protected QuizzesServiceInterface quizzesService;
32
33
    @Autowired
34
    private QuizzesOptionsBuilderInterface quizzesOptions;
35
36
    @Autowired
37
    private IssuesServiceInterface issuesService;
38
39
    @Autowired
40
    @Qualifier("QuizzesMapperV1")
41
    private QuizzesMapper quizzesMapper;
42
43
    @GetMapping("")
44
    public List<Quiz> list(@RequestParam(name = "issueId", required = true) Integer issueId)
45
            throws NotFoundException, ForbiddenException {
46
        final IssueModelInterface issueModel = this.issuesService.find(issueId);
47
48
        if (issueModel == null) {
49
            throw new NotFoundException();
50
        }
51
        if (!this.acl.hasAccess(issueModel)) {
52
            throw new ForbiddenException();
53
        }
54
55
        final List<QuizModelInterface> quizModels = this.quizzesService
56
                .findByIssue(issueModel);
57
58
        return quizModels
59
                .stream()
60
                .map(model -> this.quizzesMapper.map(model, Quiz.class))
61
                .collect(Collectors.toList());
62
    }
63
    /**
64
     * show(quizId)
65
     */
66
67
    @GetMapping("/{quizId}")
68
    public Quiz show(@PathVariable Integer quizId) throws NotFoundException, ForbiddenException {
69
        final QuizModelInterface quizModel = this.getQuizModel(
70
                quizId,
71
                (new QuizzesOptions()).withIssue(new IssuesOptions())
72
        );
73
        if (!this.acl.hasAccess(quizModel)) {
74
            throw new ForbiddenException();
75
        }
76
77
        return this.quizzesMapper.map(quizModel, Quiz.class);
78
    }
79
80
    private QuizModelInterface getQuizModel(Integer id, QuizzesOptionsInterface quizOptions) throws NotFoundException {
81
        final QuizModelInterface quizModel = this.quizzesService.find(id, quizOptions);
82
        if (quizModel == null) {
83
            throw new NotFoundException();
84
        }
85
        return quizModel;
86
    }
87
88
}
89