Passed
Push — master ( a4cc6f...c5607b )
by Paul
04:25
created

UrlController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 10
nc 1
nop 1
dl 0
loc 16
c 1
b 0
f 1
cc 1
rs 9.9332
1
<?php
2
3
namespace Devpri\Tinre\Http\Controllers\Api\V1;
4
5
use Devpri\Tinre\Http\Controllers\Controller;
6
use Devpri\Tinre\Http\Resources\Api\V1\Url as UrlResource;
7
use Devpri\Tinre\Models\Url;
8
use Devpri\Tinre\Services\UrlService;
9
use Illuminate\Http\Request;
10
11
class UrlController extends Controller
12
{
13
    protected $urlService;
14
15
    public function __construct(UrlService $urlService)
16
    {
17
        $this->urlService = $urlService;
18
    }
19
20
    public function index(Request $request)
21
    {
22
        $request->validate([
23
            'search' => ['nullable', 'string'],
24
            'date' => ['nullable', 'array'],
25
            'limit' => ['nullable', 'integer', 'min:1', 'max:100'],
26
            'active' => ['nullable', 'boolean'],
27
            'sort_by' => ['nullable', 'in:created_at,updated_at,total_clicks'],
28
            'sort_direction' => ['nullable', 'in:asc,desc'],
29
        ]);
30
31
        $user = $request->user();
32
33
        $urls = $this->urlService->index($request->all(), $user);
34
35
        return UrlResource::collection($urls);
36
    }
37
38
    public function show(Request $request, $path): UrlResource
39
    {
40
        $user = $request->user();
41
42
        $url = Url::where('path', $path)->firstOrFail();
43
44
        if ($user->cant('view', $url)) {
45
            abort(401);
46
        }
47
48
        return new UrlResource($url);
49
    }
50
51
    public function create(Request $request): UrlResource
52
    {
53
        $user = $request->user();
54
55
        if ($user && $user->cant('create', Url::class)) {
56
            abort(401);
57
        }
58
59
        $url = $this->urlService->create($request->long_url, $request->path, $user);
60
61
        return (new UrlResource($url))->additional(['message' => 'The URL has been created.']);
62
    }
63
64
    public function update(Request $request, $id)
65
    {
66
        $request->validate([
67
            'active' => ['required', 'boolean'],
68
        ]);
69
70
        $user = $request->user();
71
72
        $url = $this->urlService->update($id, $request->active, $request->long_url, $request->path, $user);
73
74
        return (new UrlResource($url))->additional(['message' => 'The URL has been updated.']);
75
    }
76
77
    public function delete(Request $request, $id)
78
    {
79
        $user = $request->user();
80
81
        $url = Url::where('id', $id)->firstOrFail();
82
83
        if ($user->cant('delete', $url)) {
84
            abort(401);
85
        }
86
87
        $url->delete();
88
89
        return ['message' => 'The URL has been deleted.'];
90
    }
91
}
92