Test Failed
Push — master ( 276ee0...707900 )
by Pavel
06:09
created

BackupsController   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 25
dl 0
loc 47
c 1
b 0
f 0
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A index() 0 19 1
A create() 0 4 1
A delete() 0 17 1
1
<?php
2
3
namespace PavelMironchik\LaravelBackupPanel\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Facades\Cache;
7
use PavelMironchik\LaravelBackupPanel\Rules\BackupDisk;
8
use PavelMironchik\LaravelBackupPanel\Rules\PathToZip;
9
use Spatie\Backup\BackupDestination\Backup;
10
use Spatie\Backup\BackupDestination\BackupDestination;
11
use Spatie\Backup\Helpers\Format;
12
use PavelMironchik\LaravelBackupPanel\Jobs\CreateBackupJob;
13
14
class BackupsController extends Controller
15
{
16
    public function index(Request $request)
17
    {
18
        $validated = $request->validate([
19
            'disk' => ['required', new BackupDisk()],
20
        ]);
21
22
        $backupDestination = BackupDestination::create($validated['disk'], config('backup.backup.name'));
23
24
        return Cache::remember("backups-{$validated['disk']}", now()->addSeconds(4), function () use ($backupDestination) {
25
            return $backupDestination
26
                ->backups()
27
                ->map(function (Backup $backup) {
28
                    return [
29
                        'path' => $backup->path(),
30
                        'date' => $backup->date()->format('Y-m-d H:i:s'),
31
                        'size' => Format::humanReadableSize($backup->size()),
32
                    ];
33
                })
34
                ->toArray();
35
        });
36
    }
37
38
    public function delete(Request $request)
39
    {
40
        $validated = $request->validate([
41
            'disk' => new BackupDisk(),
42
            'path' => ['required', new PathToZip()],
43
        ]);
44
45
        $backupDestination = BackupDestination::create($validated['disk'], config('backup.backup.name'));
46
47
        $backupDestination
48
            ->backups()
49
            ->first(function (Backup $backup) use ($validated) {
50
                return $backup->path() === $validated['path'];
51
            })
52
            ->delete();
53
54
        $this->respondSuccess();
55
    }
56
57
    public function create(Request $request)
58
    {
59
        $option = $request->input('option', '');
60
        dispatch(new CreateBackupJob($option));
61
    }
62
}
63