Passed
Pull Request — main (#31)
by Tan
14:50 queued 35s
created

PostController   A

Complexity

Total Complexity 1

Size/Duplication

Total Lines 26
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 1
eloc 13
c 1
b 0
f 0
dl 0
loc 26
rs 10
1
<?php
2
3
namespace CSlant\Blog\Api\Http\Controllers;
4
5
use CSlant\Blog\Api\Enums\StatusEnum;
6
use CSlant\Blog\Api\Helpers\SlugHelper;
7
use CSlant\Blog\Api\Http\Resources\ListPostResource;
8
use CSlant\Blog\Api\Http\Resources\PostResource;
9
use CSlant\Blog\Core\Facades\Base\SlugHelper;
0 ignored issues
show
Bug introduced by
A parse error occurred: Cannot use CSlant\Blog\Core\Facades\Base\SlugHelper as SlugHelper because the name is already in use
Loading history...
10
use CSlant\Blog\Core\Http\Controllers\Base\BasePostController;
11
use CSlant\Blog\Core\Http\Responses\Base\BaseHttpResponse;
12
use CSlant\Blog\Core\Models\Post;
13
use Illuminate\Http\JsonResponse;
14
use Illuminate\Http\RedirectResponse;
15
use Illuminate\Http\Request;
16
use Illuminate\Http\Resources\Json\JsonResource;
17
18
/**
19
 * Class PostController
20
 *
21
 * @package CSlant\Blog\Api\Http\Controllers
22
 *
23
 * @group Blog API
24
 *
25
 * @authenticated
26
 *
27
 * @method BaseHttpResponse httpResponse()
28
 * @method BaseHttpResponse setData(mixed $data)
29
 * @method BaseHttpResponse|JsonResource|JsonResponse|RedirectResponse toApiResponse()
30
 */
31
class PostController extends BasePostController
32
{
33
    /**
34
     * @group Blog API
35
     *
36
     * @param  Request  $request
37
     *
38
     * @return BaseHttpResponse|JsonResource|JsonResponse|RedirectResponse
39
     */
40
    public function index(Request $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
41
    {
42
        $data = $this
43
            ->postRepository
44
            ->advancedGet([
45
                'with' => ['tags', 'categories', 'author', 'slugable'],
46
                'condition' => ['status' => StatusEnum::PUBLISHED->value],
47
                'paginate' => [
48
                    'per_page' => $request->integer('per_page', 10),
49
                    'current_paged' => $request->integer('page', 1),
50
                ],
51
            ]);
52
53
        return $this
54
            ->httpResponse()
55
            ->setData(ListPostResource::collection($data))
56
            ->toApiResponse();
57
    }
58
59
    /**
60
     * Get post by slug
61
     *
62
     * @group Blog
63
     * @queryParam slug Find by slug of post.
64
     */
65
    public function findBySlug(string $slug)
66
    {
67
        $slug = SlugHelper::getSlug($slug, SlugHelper::getPrefix(Post::class));
68
69
        if (!$slug) {
70
            return $this
71
                ->httpResponse()
72
                ->setError()
73
                ->setCode(404)
74
                ->setMessage('Not found');
75
        }
76
77
        $post = Post::query()
78
            ->with(['tags', 'categories', 'author'])
79
            ->where([
80
                'id' => $slug->reference_id,
81
                'status' => StatusEnum::PUBLISHED,
82
            ])
83
            ->first();
84
85
        if (!$post) {
86
            return $this
87
                ->httpResponse()
88
                ->setError()
89
                ->setCode(404)
90
                ->setMessage('Not found');
91
        }
92
93
        return $this
94
            ->httpResponse()
95
            ->setData(new PostResource($post))
96
            ->toApiResponse();
97
    }
98
}
99