ArticleController::create()   A
last analyzed

Complexity

Conditions 2
Paths 3

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 7
c 0
b 0
f 0
rs 10
cc 2
nc 3
nop 1
1
<?php
2
3
4
namespace App\Project\Http\Controller;
5
6
use App\Project\App\Support\FractalService;
7
use App\Project\Domain\Article\ArticleService;
8
use Symfony\Component\HttpFoundation\JsonResponse;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\HttpFoundation\Response;
11
use Symfony\Component\Routing\RouterInterface;
12
use Swagger\Annotations as SWG;
13
14
class ArticleController
15
{
16
17
18
    /**
19
     * @var ArticleService
20
     */
21
    private $articleService;
22
23
    /**
24
     * @var FractalService
25
     */
26
    private $fractalService;
27
    /**
28
     * @var RouterInterface
29
     */
30
    private $router;
31
32
    public function __construct(
33
        ArticleService $articleService,
34
        FractalService $fractalService,
35
        RouterInterface $router
36
    )
37
    {
38
        $this->articleService = $articleService;
39
        $this->fractalService = $fractalService;
40
        $this->router = $router;
41
    }
42
43
44
    /**
45
     * @param Request $request
46
     * @return JsonResponse
47
     * @SWG\Response(
48
     *     response=200,
49
     *     description="Returns the article collection"
50
     * )
51
     * @SWG\Parameter(
52
     *     name="page",
53
     *     in="query",
54
     *     type="integer",
55
     *     description="current page",
56
     *     default="1"
57
     * )
58
     * @SWG\Parameter(
59
     *     name="per_page",
60
     *     in="query",
61
     *     type="integer",
62
     *     description="limit per page",
63
     *     default="10"
64
     * )
65
     * @SWG\Tag(name="articles")
66
     */
67
    public function index(Request $request)
68
    {
69
        $articles = $this->articleService->getArticles($request, $this->router);
70
71
        return new JsonResponse($this->fractalService->transform($articles));
72
    }
73
74
    /**
75
     * @param $id
76
     * @return JsonResponse
77
     * @SWG\Response(
78
     *     response=200,
79
     *     description="Returns single article Item"
80
     * )
81
     * @SWG\Response(
82
     *     response=500,
83
     *     description="Returns error"
84
     * )
85
     * @SWG\Tag(name="articles")
86
     */
87
    public function article($id)
88
    {
89
        try {
90
            $article = $this->articleService->getArticleById($id);
91
            return new JsonResponse($this->fractalService->transform($article));
92
        }catch (\Exception $e) {
93
            return new JsonResponse($this->fractalService->transform($e->getMessage(), false), Response::HTTP_INTERNAL_SERVER_ERROR);
94
        }
95
    }
96
97
    /**
98
     * @param Request $request
99
     * @return JsonResponse
100
     * @SWG\Response(
101
     *     response=200,
102
     *     description="returns success message"
103
     * )
104
     * @SWG\Response(
105
     *     response=500,
106
     *     description="Returns error"
107
     * )
108
     *
109
     * @SWG\Parameter(
110
     *     name="title",
111
     *     in="formData",
112
     *     type="string",
113
     *     required=true,
114
     *     description="article title"
115
     * )
116
     * @SWG\Parameter(
117
     *     name="body",
118
     *     in="formData",
119
     *     type="string",
120
     *     required=true,
121
     *     description="article body, markdown accepted"
122
     * )
123
     * @SWG\Parameter(
124
     *     name="user",
125
     *     in="formData",
126
     *     type="integer",
127
     *     required=true,
128
     *     description="user id from GET /users"
129
     * )
130
     * @SWG\Parameter(
131
     *     name="tags",
132
     *     in="formData",
133
     *     type="array",
134
     *     required=false,
135
     *     @SWG\Items(
136
     *         type="string"
137
     *     ),
138
     *     description="post tags"
139
     * )
140
     * @SWG\Tag(name="articles")
141
     */
142
    public function create(Request $request)
143
    {
144
        try {
145
            $this->articleService->addArticle($request);
146
            return new JsonResponse($this->fractalService->transform('Article has been added'), Response::HTTP_OK);
147
        }catch (\Exception $exception) {
148
            return new JsonResponse($this->fractalService->transform($exception->getMessage(), false), Response::HTTP_INTERNAL_SERVER_ERROR);
149
        }
150
151
    }
152
153
}