From 8f247a9b297cf3705e93add86ed76850232b3e9a Mon Sep 17 00:00:00 2001 From: kBieda Date: Mon, 5 Dec 2022 13:06:03 +0100 Subject: [PATCH 1/4] Feature: Refactor models Add base Pivot Model --- .../ReadModel/Services/ReadModelService.php | 10 +++---- src/Models/Model.php | 2 +- src/Models/ModelInterface.php | 15 ++++++++++ src/Models/Pivot.php | 28 +++++++++++++++++++ 4 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 src/Models/ModelInterface.php create mode 100644 src/Models/Pivot.php diff --git a/src/Features/ReadModel/Services/ReadModelService.php b/src/Features/ReadModel/Services/ReadModelService.php index 247f40a..1e6e7d3 100644 --- a/src/Features/ReadModel/Services/ReadModelService.php +++ b/src/Features/ReadModel/Services/ReadModelService.php @@ -9,7 +9,7 @@ use Kellton\Tools\Features\Action\Data\Result; use Kellton\Tools\Features\Action\Services\ModelService; use Kellton\Tools\Features\ReadModel\Models\ReadModel; -use Kellton\Tools\Models\Model; +use Kellton\Tools\Models\ModelInterface; use Kellton\Tools\Undefined; use RuntimeException; use Symfony\Component\Console\Helper\ProgressBar; @@ -76,11 +76,11 @@ public function getOne(int $id): Result /** * Create or update read model for single object. * - * @param Model $object + * @param ModelInterface $object * * @return ActionResult */ - public function createOrUpdate(Model $object): ActionResult + public function createOrUpdate(ModelInterface $object): ActionResult { return $this->action(function () use ($object) { $data = $this->generateData($object); @@ -140,11 +140,11 @@ public function rebuild(?ProgressBar $progressBar = null): ActionResult /** * Returns collection of models attributes. * - * @param Model $object + * @param ModelInterface $object * * @return Collection */ - abstract protected function generateData(Model $object): Collection; + abstract protected function generateData(ModelInterface $object): Collection; /** * Returns query builder. diff --git a/src/Models/Model.php b/src/Models/Model.php index fc90d36..95fc928 100644 --- a/src/Models/Model.php +++ b/src/Models/Model.php @@ -10,7 +10,7 @@ /** * Class Model handles the base model. */ -abstract class Model extends EloquentModel +abstract class Model extends EloquentModel implements ModelInterface { use HasTableName; diff --git a/src/Models/ModelInterface.php b/src/Models/ModelInterface.php new file mode 100644 index 0000000..d43eb89 --- /dev/null +++ b/src/Models/ModelInterface.php @@ -0,0 +1,15 @@ + Date: Mon, 12 Dec 2022 10:53:10 +0100 Subject: [PATCH 2/4] Feature: Read models delete action --- src/Features/Action/Services/ModelService.php | 3 ++- .../ReadModel/Services/ReadModelService.php | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Features/Action/Services/ModelService.php b/src/Features/Action/Services/ModelService.php index c420db7..cbb51c8 100644 --- a/src/Features/Action/Services/ModelService.php +++ b/src/Features/Action/Services/ModelService.php @@ -5,6 +5,7 @@ use Illuminate\Contracts\Validation\Rule; use Illuminate\Database\Eloquent\Builder; use Kellton\Tools\Models\Model; +use Kellton\Tools\Models\ModelInterface; use Kellton\Tools\Rules\Exists; /** @@ -12,7 +13,7 @@ * * @property Model $object * - * @method self load(Model $object) + * @method self load(ModelInterface $object) */ abstract class ModelService extends ActionService { diff --git a/src/Features/ReadModel/Services/ReadModelService.php b/src/Features/ReadModel/Services/ReadModelService.php index 1e6e7d3..44250cf 100644 --- a/src/Features/ReadModel/Services/ReadModelService.php +++ b/src/Features/ReadModel/Services/ReadModelService.php @@ -69,6 +69,10 @@ public function getOne(int $id): Result return $this->action(function () use ($id) { $object = $this->readModelQuery()->find($id); + if ($object) { + $this->load($object); + } + return new Result($object); }); } @@ -89,11 +93,14 @@ public function createOrUpdate(ModelInterface $object): ActionResult throw new RuntimeException('Missing id in data'); } + /** @var ModelInterface $object */ $object = $this->readModelQuery()->updateOrCreate( ['id' => $data->get('id')], $data->toArray() ); + $this->load($object); + return new Result($object); }); } @@ -137,6 +144,22 @@ public function rebuild(?ProgressBar $progressBar = null): ActionResult }); } + /** + * Delete the read model. + * + * @return Result + */ + public function delete(): ActionResult + { + return $this->actionOnObject( + action: function () { + $this->object->delete(); + + return new Result(); + }, + ); + } + /** * Returns collection of models attributes. * From 0dc60d34d20d65793d4891d521a08d99ee2b52cc Mon Sep 17 00:00:00 2001 From: kBieda Date: Thu, 22 Dec 2022 17:30:53 +0100 Subject: [PATCH 3/4] Feature: Improve facades namespaces --- src/Builders/Builder.php | 2 +- src/Features/Initializers/Services/InitializeService.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Builders/Builder.php b/src/Builders/Builder.php index 79a815c..b98aa43 100644 --- a/src/Builders/Builder.php +++ b/src/Builders/Builder.php @@ -3,11 +3,11 @@ namespace Kellton\Tools\Builders; use Carbon\Carbon; -use DB; use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Collection as EloquentCollection; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\DB; use Kellton\Tools\Data\FilterData; use Kellton\Tools\Enums\FilterOperator; use Kellton\Tools\Enums\OrderDirection; diff --git a/src/Features/Initializers/Services/InitializeService.php b/src/Features/Initializers/Services/InitializeService.php index df0b89e..485823c 100644 --- a/src/Features/Initializers/Services/InitializeService.php +++ b/src/Features/Initializers/Services/InitializeService.php @@ -2,9 +2,9 @@ namespace Kellton\Tools\Features\Initializers\Services; -use File; use Illuminate\Container\Container; use Illuminate\Foundation\Application; +use Illuminate\Support\Facades\File; use Kellton\Tools\Features\Action\Data\ActionResult; use Kellton\Tools\Features\Action\Data\Result; use Kellton\Tools\Features\Action\Services\ActionService; From 844b564d3837494f06a731dbd9671b787d85b4c3 Mon Sep 17 00:00:00 2001 From: kBieda Date: Thu, 22 Dec 2022 17:44:42 +0100 Subject: [PATCH 4/4] Feature: Improve facades namespaces --- src/Features/Action/Services/ActionService.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Features/Action/Services/ActionService.php b/src/Features/Action/Services/ActionService.php index 9089f76..4bb7280 100644 --- a/src/Features/Action/Services/ActionService.php +++ b/src/Features/Action/Services/ActionService.php @@ -3,15 +3,15 @@ namespace Kellton\Tools\Features\Action\Services; use Carbon\Carbon; -use DB; use Illuminate\Support\Collection; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use Kellton\Tools\Exceptions\NotFound; use Kellton\Tools\Features\Action\Data\FailResult; use Kellton\Tools\Features\Action\Data\Result; use Symfony\Component\HttpFoundation\Response; use Throwable; -use Validator; /** * Class Service handles services logic for using actions.