Passed
Push — master ( 5a03f9...8e29e6 )
by Stephen
03:56 queued 01:10
created

CrudModelAction::execute()   A

Complexity

Conditions 6
Paths 13

Size

Total Lines 45
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 15
c 1
b 0
f 0
nc 13
nop 0
dl 0
loc 45
rs 9.2222
1
<?php
2
3
4
namespace Sfneal\CrudModelActions;
5
6
7
use Exception;
8
use Illuminate\Database\Eloquent\Model;
9
use Illuminate\Http\Request;
10
use Illuminate\Http\Response;
11
use Sfneal\Actions\AbstractAction;
12
use Sfneal\CrudModelActions\Utils\HandleModel;
13
use Sfneal\CrudModelActions\Utils\HttpResponses;
14
use Sfneal\CrudModelActions\Utils\ModelEvents;
15
use Sfneal\CrudModelActions\Utils\ModelQueries;
16
use Sfneal\CrudModelActions\Utils\ResponseMessages;
17
18
abstract class CrudModelAction extends AbstractAction
19
{
20
    // todo: artisan command to create new CrudModelAction?
21
22
    use HandleModel,
23
        HttpResponses,
24
        ModelEvents,
25
        ModelQueries,
26
        ResponseMessages;
27
28
    /**
29
     * @var Request
30
     */
31
    protected $request;
32
33
    /**
34
     * BaseSaveModelAction constructor.
35
     *
36
     * @param Request $request
37
     * @param int|Model|null $model
38
     * @param int|null $related_model_key
39
     */
40
    public function __construct(Request $request, $model = null, $related_model_key = null)
41
    {
42
        $this->request = $request;
43
        $this->model = $this->resolveModel($model);
44
        $this->related_model_key = $related_model_key;
45
    }
46
47
    /**
48
     * Create or update the Model
49
     *
50
     * @return Response
51
     * @throws Exception
52
     */
53
    public function execute()
54
    {
55
        // Attempt to pass validation check
56
        // & execute CRUD action on $model
57
        try {
58
59
            // Model passes validation checks
60
            if (
61
                (method_exists($this, 'validate') && $this->validate())
62
                || !method_exists($this, 'validate')
63
            ) {
64
                // Save the model
65
                $this->model = $this->handle();
66
67
                // Flash a success message
68
                session()->flash('success', $this->successMessage());
69
70
                // Fire TrackActivity Event
71
                $this->fireEvent();
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 (env('APP_ENV') == 'development') {
0 ignored issues
show
introduced by
The condition env('APP_ENV') == 'development' is always false.
Loading history...
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