From 4eaf1917fa6d6d89e1d333a7009efb3ab4177192 Mon Sep 17 00:00:00 2001 From: Fairuz Date: Fri, 23 Jul 2021 21:27:18 +0800 Subject: [PATCH] WIP - Order steps & remaining APIs --- .../CreateContainerPackingListLogic.php | 74 +++++++++++++++++++ .../ContainerPackingListObject.php | 12 ++- .../Services/CreatesContainerPackingList.php | 32 ++++++++ .../Services/CreatesPackingListPackages.php | 32 ++++++++ .../Rules/CanCreateContainerPackingList.php | 57 ++++++++++++++ .../Standards/Rules/CanCreatePackingList.php | 10 +-- .../Rules/CanCreatePackingListPackage.php | 57 ++++++++++++++ .../ContainerPackingListValidation.php | 45 +++++++++++ .../PackingListPackageValidation.php | 41 ++++++++++ .../Validators/PackingListValidation.php | 9 +-- ...0_create_container_packing_lists_table.php | 1 + 11 files changed, 358 insertions(+), 12 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/CreateContainerPackingListLogic.php create mode 100644 app/Classes/Modules/PackingLists/Services/CreatesContainerPackingList.php create mode 100644 app/Classes/Modules/PackingLists/Services/CreatesPackingListPackages.php create mode 100644 app/Classes/Modules/PackingLists/Standards/Rules/CanCreateContainerPackingList.php create mode 100644 app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingListPackage.php create mode 100644 app/Classes/Modules/PackingLists/Standards/Validators/ContainerPackingListValidation.php create mode 100644 app/Classes/Modules/PackingLists/Standards/Validators/PackingListPackageValidation.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/CreateContainerPackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/CreateContainerPackingListLogic.php new file mode 100644 index 00000000..be09d7a8 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/CreateContainerPackingListLogic.php @@ -0,0 +1,74 @@ + 'Created PackingList', + 'message' => 'You have successfully created a new PackingList' + ]; + } + + /** @var CanCreatePackingList */ + private $canCreatePackingList; + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var CreatesPackingList */ + private $createsPackingList; + + /** + * CreatePackingListLogic constructor. + * @param CanCreatePackingList $canCreatePackingList + * @param FetchesDistrict $fetchesDistrict + * @param FetchesCompany $fetchesCompany + * @param CreatesPackingList $createsPackingList + */ + public function __construct(CanCreatePackingList $canCreatePackingList, FetchesCompany $fetchesCompany, CreatesPackingList $createsPackingList) + { + $this->canCreatePackingList = $canCreatePackingList; + $this->fetchesCompany = $fetchesCompany; + $this->createsPackingList = $createsPackingList; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + + $district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]); + + $object = new PackingListObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code')); + + $this->canCreatePackingList->passes($object); + + $query = $this->createsPackingList->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object); + + return $this->resourceResponse(new PackingListResource($query)); + + } + +} diff --git a/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerPackingListObject.php b/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerPackingListObject.php index 9d1298c7..aff6356a 100644 --- a/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerPackingListObject.php +++ b/app/Classes/Modules/PackingLists/DataTransferObjects/ContainerPackingListObject.php @@ -13,11 +13,14 @@ class PackingListObject implements DataTransferObject private $containerType; - public function __construct(int $packingListId, ?string $containerReference, int $containerType) + private $sealReference; + + public function __construct(int $packingListId, ?string $containerReference, int $containerType, ?String $sealReference) { $this->packingListId = $packingListId; $this->containerReference = $containerReference; - $this->containerType = $containerType + $this->containerType = $containerType; + $this->sealReference = $sealReference; } public function getPackingListId(): int @@ -34,4 +37,9 @@ class PackingListObject implements DataTransferObject { return $this->containerType; } + + public function getSealReference(): int + { + return $this->sealReference; + } } diff --git a/app/Classes/Modules/PackingLists/Services/CreatesContainerPackingList.php b/app/Classes/Modules/PackingLists/Services/CreatesContainerPackingList.php new file mode 100644 index 00000000..05f7c000 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/CreatesContainerPackingList.php @@ -0,0 +1,32 @@ +street_one = $object->getStreetOne(); + $model->street_two = $object->getStreetTwo(); + $model->country_id = $object->getCountryId(); + $model->state_id = $object->getStateId(); + $model->district_id = $object->getDistrictId(); + $model->postcode = $object->getPostCode(); + + return $this->handler($company->PackingLists(), $model); + + } +} diff --git a/app/Classes/Modules/PackingLists/Services/CreatesPackingListPackages.php b/app/Classes/Modules/PackingLists/Services/CreatesPackingListPackages.php new file mode 100644 index 00000000..acb2c390 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/CreatesPackingListPackages.php @@ -0,0 +1,32 @@ +street_one = $object->getStreetOne(); + $model->street_two = $object->getStreetTwo(); + $model->country_id = $object->getCountryId(); + $model->state_id = $object->getStateId(); + $model->district_id = $object->getDistrictId(); + $model->postcode = $object->getPostCode(); + + return $this->handler($company->PackingLists(), $model); + + } +} diff --git a/app/Classes/Modules/PackingLists/Standards/Rules/CanCreateContainerPackingList.php b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreateContainerPackingList.php new file mode 100644 index 00000000..56161688 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreateContainerPackingList.php @@ -0,0 +1,57 @@ +containerPackingListValidation = $containerPackingListValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param PackingListObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->containerPackingListValidation->validate($object); + + } + + + /** + * @param PackingListObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} diff --git a/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingList.php b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingList.php index e100bbac..399a0fae 100644 --- a/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingList.php +++ b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingList.php @@ -11,15 +11,15 @@ class CanCreatePackingList extends AbstractRule { /** @var PackingListValidation */ - private $PackingListValidation; + private $packingListValidation; /** * CanCreatePackingList constructor. - * @param PackingListValidation $PackingListValidation + * @param PackingListValidation $packingListValidation */ - public function __construct(PackingListValidation $PackingListValidation) + public function __construct(PackingListValidation $packingListValidation) { - $this->PackingListValidation = $PackingListValidation; + $this->packingListValidation = $packingListValidation; } @@ -40,7 +40,7 @@ class CanCreatePackingList extends AbstractRule */ protected function validators($object): bool { - return $this->PackingListValidation->validate($object); + return $this->packingListValidation->validate($object); } diff --git a/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingListPackage.php b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingListPackage.php new file mode 100644 index 00000000..579505b2 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Standards/Rules/CanCreatePackingListPackage.php @@ -0,0 +1,57 @@ +packingListPackageValidation = $packingListPackageValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param PackingListObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->packingListPackageValidation->validate($object); + + } + + + /** + * @param PackingListObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} diff --git a/app/Classes/Modules/PackingLists/Standards/Validators/ContainerPackingListValidation.php b/app/Classes/Modules/PackingLists/Standards/Validators/ContainerPackingListValidation.php new file mode 100644 index 00000000..0ff94dc7 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Standards/Validators/ContainerPackingListValidation.php @@ -0,0 +1,45 @@ + $object->getPackingListId(), + 'reference' => $object->getContainerReference(), + 'container_type' => $object->getContainerType(), + 'seal_reference' => $object->getSealReference(), + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'status' => 'required', + 'reference' => 'required', + 'container_type' => 'required', + 'seal_reference' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} diff --git a/app/Classes/Modules/PackingLists/Standards/Validators/PackingListPackageValidation.php b/app/Classes/Modules/PackingLists/Standards/Validators/PackingListPackageValidation.php new file mode 100644 index 00000000..ad87e77e --- /dev/null +++ b/app/Classes/Modules/PackingLists/Standards/Validators/PackingListPackageValidation.php @@ -0,0 +1,41 @@ + $object->getPackingListId(), + 'package_id' => $object->getPackageId() + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'packing_list_id' => 'required', + 'package_id' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} diff --git a/app/Classes/Modules/PackingLists/Standards/Validators/PackingListValidation.php b/app/Classes/Modules/PackingLists/Standards/Validators/PackingListValidation.php index 88585970..65dd3380 100644 --- a/app/Classes/Modules/PackingLists/Standards/Validators/PackingListValidation.php +++ b/app/Classes/Modules/PackingLists/Standards/Validators/PackingListValidation.php @@ -16,9 +16,8 @@ class PackingListValidation extends AbstractValidation */ protected function data($object): array { return [ - 'street_one' => $object->getStreetOne(), - 'street_two' => $object->getStreetTwo(), - 'district_id' => $object->getDistrictId() + 'status' => $object->getStatus(), + 'reference' => $object->getReference() ]; } @@ -27,8 +26,8 @@ class PackingListValidation extends AbstractValidation */ protected function rules(): array { return [ - 'street_one' => 'required', - 'district_id' => 'required', + 'status' => 'required', + 'reference' => 'required', ]; } diff --git a/database/migrations/2021_07_21_110240_create_container_packing_lists_table.php b/database/migrations/2021_07_21_110240_create_container_packing_lists_table.php index 830e8eb1..9f98061f 100644 --- a/database/migrations/2021_07_21_110240_create_container_packing_lists_table.php +++ b/database/migrations/2021_07_21_110240_create_container_packing_lists_table.php @@ -18,6 +18,7 @@ class CreateContainerPackingListsTable extends Migration $table->bigInteger('packing_list_id')->unsigned()->index(); $table->string('container_reference',45); $table->integer('container_type'); + $table->string('seal_reference',45); $table->softDeletes(); $table->timestamps();