Passed
Push — master ( 02b2dd...8b56d0 )
by Paul
05:11
created

UrlController::index()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 21
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 13
c 1
b 0
f 1
nc 2
nop 1
dl 0
loc 21
ccs 8
cts 8
cp 1
crap 2
rs 9.8333
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 14
    public function __construct(UrlService $urlService)
16
    {
17 14
        $this->urlService = $urlService;
18 14
    }
19
20 2
    public function index(Request $request)
21
    {
22 2
        $request->validate([
23 2
            'search' => ['nullable', 'string'],
24
            'start_date' => ['nullable', 'date'],
25
            'end_date' => ['nullable', 'date'],
26
            'limit' => ['nullable', 'integer', 'min:1', 'max:100'],
27
            'active' => ['nullable', 'boolean'],
28
            'sort_by' => ['nullable', 'in:created_at,updated_at,total_clicks'],
29
            'sort_direction' => ['nullable', 'in:asc,desc'],
30
        ]);
31
32 2
        $user = $request->user();
33
34 2
        if (! $user->hasAnyPermission(['url:view', 'url:view:any'])) {
35 1
            abort(401);
36
        }
37
38 1
        $urls = $this->urlService->index($request->all(), $user);
39
40 1
        return UrlResource::collection($urls);
41
    }
42
43 4
    public function show(Request $request, $path): UrlResource
44
    {
45 4
        $user = $request->user();
46
47 4
        $url = Url::where('path', $path)->firstOrFail();
48
49 4
        if ($user->cant('view', $url)) {
50 1
            abort(401);
51
        }
52
53 3
        return new UrlResource($url);
54
    }
55
56 2
    public function create(Request $request): UrlResource
57
    {
58 2
        $user = $request->user();
59
60 2
        if ($user->cant('create', Url::class)) {
61 1
            abort(401);
62
        }
63
64 1
        $url = $this->urlService->create($request->long_url, $request->path, $user);
65
66 1
        return (new UrlResource($url))->additional(['message' => 'The URL has been created.']);
67
    }
68
69 1
    public function update(Request $request, $id)
70
    {
71 1
        $request->validate([
72 1
            'active' => ['required', 'boolean'],
73
        ]);
74
75 1
        $user = $request->user();
76
77 1
        $url = $this->urlService->update($id, $request->active, $request->long_url, $request->path, $user);
78
79 1
        return (new UrlResource($url))->additional(['message' => 'The URL has been updated.']);
80
    }
81
82 4
    public function delete(Request $request, $id)
83
    {
84 4
        $user = $request->user();
85
86 4
        $url = Url::where('id', $id)->firstOrFail();
87
88 4
        if ($user->cant('delete', $url)) {
89 1
            abort(401);
90
        }
91
92 3
        $url->delete();
93
94 3
        return ['message' => 'The URL has been deleted.'];
95
    }
96
}
97