Passed
Push — master ( 66b4cd...d0475e )
by Stephen
02:34
created

CrudModelAction::execute()   B

Complexity

Conditions 7
Paths 18

Size

Total Lines 47
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 7
eloc 16
c 3
b 0
f 0
nc 18
nop 0
dl 0
loc 47
rs 8.8333
1
<?php
2
3
namespace Sfneal\CrudModelActions;
4
5
use Exception;
6
use Illuminate\Database\Eloquent\Model;
7
use Illuminate\Http\Request;
8
use Illuminate\Http\Response;
9
use Sfneal\Actions\AbstractAction;
10
use Sfneal\CrudModelActions\Utils\HandleModel;
11
use Sfneal\CrudModelActions\Utils\HttpResponses;
12
use Sfneal\CrudModelActions\Utils\ModelEvents;
13
use Sfneal\CrudModelActions\Utils\ModelQueries;
14
use Sfneal\CrudModelActions\Utils\ResponseMessages;
15
16
abstract class CrudModelAction extends AbstractAction
17
{
18
    // todo: artisan command to create new CrudModelAction?
19
20
    use HandleModel,
21
        HttpResponses,
22
        ModelEvents,
23
        ModelQueries,
24
        ResponseMessages;
25
26
    /**
27
     * @var Request
28
     */
29
    protected $request;
30
31
    /**
32
     * BaseSaveModelAction constructor.
33
     *
34
     * @param Request $request
35
     * @param int|Model|null $model
36
     * @param int|null $related_model_key
37
     */
38
    public function __construct(Request $request, $model = null, $related_model_key = null)
39
    {
40
        $this->request = $request;
41
        $this->model = $this->resolveModel($model);
42
        $this->related_model_key = $related_model_key;
43
    }
44
45
    /**
46
     * Create or update the Model.
47
     *
48
     * @return Response
49
     * @throws Exception
50
     */
51
    public function execute()
52
    {
53
        // Attempt to pass validation check
54
        // & execute CRUD action on $model
55
        try {
56
57
            // Model passes validation checks
58
            if (
59
                (method_exists($this, 'validate') && $this->validate())
60
                || ! method_exists($this, 'validate')
61
            ) {
62
                // Save the model
63
                $this->model = $this->handle();
64
65
                // Flash a success message
66
                session()->flash('success', $this->successMessage());
67
68
                // Fire TrackActivity Event
69
                if (method_exists($this, 'fireEvent')) {
70
                    $this->fireEvent();
71
                }
72
73
                // Return success response
74
                return response($this->successResponse(), 200);
75
            }
76
77
            // Validation failed - throw exception
78
            else {
79
                // todo: add exception logging?
80
                throw new Exception();
81
            }
82
        }
83
84
        // Validation checks failed or model
85
        // CRUD action failed to execute
86
        catch (Exception $exception) {
87
88
            // Throw errors in dev
89
            if (isDevelopmentEnvironment()) {
90
                throw $exception;
91
            }
92
93
            // Flash a success message
94
            session()->flash('fail', $this->failMessage());
95
96
            // Return failure response
97
            return response($this->failResponse(), 200);
98
        }
99
    }
100
}
101