Passed
Pull Request — main (#31)
by Tan
15:53 queued 13:08
created

PostController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

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