Test Failed
Pull Request — master (#20)
by Alexander
04:17 queued 01:35
created

BlogController::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 5
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Blog;
6
7
use App\Formatter\PaginatorFormatter;
8
use App\Validation\PageRequest;
9
use Psr\Http\Message\ResponseInterface as Response;
10
use Yiisoft\DataResponse\DataResponseFactoryInterface;
11
12
/**
13
 * @OA\Tag(
14
 *     name="blog",
15
 *     description="Blog"
16
 * )
17
 */
18
final class BlogController
19
{
20
    private DataResponseFactoryInterface $responseFactory;
21
    private PostRepository $postRepository;
22
    private PostFormatter $postFormatter;
23
    private PostBuilder $postBuilder;
24
    private BlogService $blogService;
25
26
    public function __construct(
27
        PostRepository $postRepository,
28
        DataResponseFactoryInterface $responseFactory,
29
        PostFormatter $postFormatter,
30
        PostBuilder $postBuilder,
31
        BlogService $blogService
32
    ) {
33
        $this->postRepository = $postRepository;
34
        $this->responseFactory = $responseFactory;
35
        $this->postFormatter = $postFormatter;
36
        $this->postBuilder = $postBuilder;
37
        $this->blogService = $blogService;
38
    }
39
40
    /**
41
     * @OA\Get(
42
     *     tags={"blog"},
43
     *     path="/blog",
44
     *     summary="Returns paginated blog posts",
45
     *     description="",
46
     *     @OA\Response(response="200", description="Success")
47
     * )
48
     */
49
    public function index(PageRequest $request, PaginatorFormatter $paginatorFormatter): Response
50
    {
51
        $paginator = $this->blogService->getPosts($request->getPage());
52
        $posts = [];
53
        foreach ($paginator->read() as $post) {
54
            $posts[] = $this->postFormatter->format($post);
55
        }
56
57
        return $this->responseFactory->createResponse(
58
            [
59
                'paginator' => $paginatorFormatter->format($paginator),
60
                'posts' => $posts,
61
            ]
62
        );
63
    }
64
65
    /**
66
     * @OA\Get(
67
     *     tags={"blog"},
68
     *     path="/blog/{id}",
69
     *     summary="Returns a post with a given ID",
70
     *     description="",
71
     *     @OA\Response(response="200", description="Success")
72
     * )
73
     */
74
    public function view(ViewPostRequest $request): Response
75
    {
76
        return $this->responseFactory->createResponse(
77
            [
78
                'post' => $this->postFormatter->format(
79
                    $this->blogService->getPost($request->getId())
80
                ),
81
            ]
82
        );
83
    }
84
85
    /**
86
     * @OA\Post(
87
     *     tags={"blog"},
88
     *     path="/blog",
89
     *     summary="Creates a blog post",
90
     *     description="",
91
     *     @OA\Response(response="200", description="Success")
92
     * )
93
     */
94
    public function create(EditPostRequest $postRequest): Response
95
    {
96
        $post = $this->postBuilder->build(new Post(), $postRequest);
97
        $post->setUser($postRequest->getUser());
98
99
        $this->postRepository->save($post);
100
101
        return $this->responseFactory->createResponse();
102
    }
103
104
    /**
105
     * @OA\Put(
106
     *     tags={"blog"},
107
     *     path="/blog/{id}",
108
     *     summary="Updates a blog post with a given ID",
109
     *     description="",
110
     *     @OA\Response(response="200", description="Success")
111
     * )
112
     */
113
    public function update(EditPostRequest $postRequest): Response
114
    {
115
        $post = $this->postBuilder->build(
116
            $this->blogService->getPost($postRequest->getId()),
117
            $postRequest
118
        );
119
120
        $this->postRepository->save($post);
121
122
        return $this->responseFactory->createResponse();
123
    }
124
}
125