From d87c4f7df4790c4b814c9b4b9ccfad1e6ce28da4 Mon Sep 17 00:00:00 2001 From: Fairuz Date: Thu, 22 Jul 2021 16:53:52 +0800 Subject: [PATCH] WIP - Order steps & remaining APIs --- .../ControllersLogic/CreateCompanyLogic.php | 8 --- .../CompanyModuleObject.php | 14 ++++- .../DataTransferObjects/CompanyObject.php | 8 +-- .../CreateCompanyModuleProcessor.php | 18 +++++-- .../Processors/CreateCompanyProcessor.php | 6 +-- .../Services/CreatesCompanyModule.php | 1 + .../Rules/CanCreateCompanyModule.php | 51 +++++++++++++++++++ .../Validators/CompanyModuleValidation.php | 39 ++++++++++++++ .../Validators/CompanyValidation.php | 2 +- .../Processors/CreateContractProcessor.php | 21 ++++++++ .../Processors/UpdateObligationStatus.php | 21 ++++++++ .../Modules/Unity/Services/GetAccessToken.php | 2 +- config/unity.php | 22 ++++---- ...2021_07_22_145827_modify_company_table.php | 30 +++++++++++ 14 files changed, 211 insertions(+), 32 deletions(-) create mode 100644 app/Classes/Modules/Companies/Standards/Rules/CanCreateCompanyModule.php create mode 100644 app/Classes/Modules/Companies/Standards/Validators/CompanyModuleValidation.php create mode 100644 app/Classes/Modules/Unity/Processors/CreateContractProcessor.php create mode 100644 app/Classes/Modules/Unity/Processors/UpdateObligationStatus.php create mode 100644 database/migrations/2021_07_22_145827_modify_company_table.php diff --git a/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php b/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php index 2039c457..55c7f574 100644 --- a/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php +++ b/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php @@ -2,7 +2,6 @@ namespace App\Classes\Modules\Companies\ControllersLogic; -use App\Classes\Modules\Unity\Processors\CreateEntityProcessor; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor; use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor; @@ -16,8 +15,6 @@ use Illuminate\Http\Request; class CreateCompanyLogic extends AbstractControllerLogic { - private $createUnityEntityProcessor; - /** * CreateCompanyLogic constructor. * @param CreateCompanyProcessor $createCompanyProcessor @@ -57,11 +54,6 @@ class CreateCompanyLogic extends AbstractControllerLogic $this->createCompanyModuleProcessor->execute($company , $request->input('business_type')); - $unityEntity = $this->createUnityEntityProcessor->execute($company->name); - - //$company->unity_hash_id = $unityEntity->hash_id; - //Update company table - return $this->resourceResponse(new CompanyResource($company)); } diff --git a/app/Classes/Modules/Companies/DataTransferObjects/CompanyModuleObject.php b/app/Classes/Modules/Companies/DataTransferObjects/CompanyModuleObject.php index 10e2a7ae..8dc949fd 100644 --- a/app/Classes/Modules/Companies/DataTransferObjects/CompanyModuleObject.php +++ b/app/Classes/Modules/Companies/DataTransferObjects/CompanyModuleObject.php @@ -15,17 +15,21 @@ class CompanyModuleObject implements DataTransferObject /** @var int|null */ private $status; + /** @var string */ + private $unity_hash_id; + /** * CompanyObject constructor. * @param int $companyId * @param int|null $type * @param int|null $status */ - public function __construct(int $companyId, int $type, int $status) + public function __construct(int $companyId, int $type, int $status, ?string $unity_hash_id) { $this->companyId = $companyId; $this->type = $type; $this->status = $status; + $this->unity_hash_id = $unity_hash_id; } /** @@ -51,4 +55,12 @@ class CompanyModuleObject implements DataTransferObject { return $this->status; } + + /** + * @return string + */ + public function getUnityHashId(): string + { + return $this->unity_hash_id; + } } diff --git a/app/Classes/Modules/Companies/DataTransferObjects/CompanyObject.php b/app/Classes/Modules/Companies/DataTransferObjects/CompanyObject.php index 3bd52d5c..94818a7a 100644 --- a/app/Classes/Modules/Companies/DataTransferObjects/CompanyObject.php +++ b/app/Classes/Modules/Companies/DataTransferObjects/CompanyObject.php @@ -20,6 +20,9 @@ class CompanyObject implements DataTransferObject /** @var int|null */ private $status; + /** @var string */ + private $unity_hash_id; + /** * CompanyObject constructor. * @param string $name @@ -71,7 +74,4 @@ class CompanyObject implements DataTransferObject return $this->status; } - - - -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php index 2d117fc1..8569db18 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php @@ -2,13 +2,12 @@ namespace App\Classes\Modules\Companies\Processors; +use App\Classes\Modules\Unity\Processors\CreateEntityProcessor; use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject; use App\Classes\Modules\Companies\Services\CreatesCompanyModule; - +use App\Classes\Modules\Companies\Standards\Rules\CanCreateCompanyModule; use App\Classes\ValueObjects\Constants\BusinessType; - use Illuminate\Database\Eloquent\Model; - use App\Models\Company; class CreateCompanyModuleProcessor @@ -17,13 +16,19 @@ class CreateCompanyModuleProcessor /** @var CreatesCompanyModule */ private $createsCompanyModule; + private $createUnityEntityProcessor; + + private $canCreateCompanyModule; + /** * CreateCompanyModuleProcessor constructor. * @param CreatesCompanyModule $createsCompanyModule */ - public function __construct(CreatesCompanyModule $createsCompanyModule) + public function __construct(CanCreateCompanyModule $canCreateCompanyModule, CreatesCompanyModule $createsCompanyModule, CreateEntityProcessor $createUnityEntityProcessor) { $this->createsCompanyModule = $createsCompanyModule; + $this->createUnityEntityProcessor = $createUnityEntityProcessor; + $this->canCreateCompanyModule = $canCreateCompanyModule; } /** @@ -32,12 +37,17 @@ class CreateCompanyModuleProcessor */ public function execute(Company $company , ?int $businessType): Model { + $unityEntity = $this->createUnityEntityProcessor->execute($company->name); + $company_module_object = new CompanyModuleObject( $company->id, $businessType??BusinessType::IMPORTER, $company->status, + $unityEntity->hash_id ); + $this->canCreateCompanyModule->passes($company_module_object); + return $this->createsCompanyModule->execute($company_module_object); } } diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php index 95ef5eb9..09516c9d 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php @@ -50,8 +50,8 @@ class CreateCompanyProcessor $companyName, mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(), $companyType, - $status); - + $status + ); $this->canCreateCompany->passes($company_object); @@ -59,4 +59,4 @@ class CreateCompanyProcessor } -} \ No newline at end of file +} diff --git a/app/Classes/Modules/Companies/Services/CreatesCompanyModule.php b/app/Classes/Modules/Companies/Services/CreatesCompanyModule.php index ae6b2b78..ba974838 100644 --- a/app/Classes/Modules/Companies/Services/CreatesCompanyModule.php +++ b/app/Classes/Modules/Companies/Services/CreatesCompanyModule.php @@ -20,6 +20,7 @@ class CreatesCompanyModule extends AbstractUpdateRecord $model->company_id = $object->getCompanyId(); $model->type = $object->getType(); $model->status = $object->getStatus(); + $model->unity_hash_id = $object->getUnityHashId(); return $this->handler($model); } diff --git a/app/Classes/Modules/Companies/Standards/Rules/CanCreateCompanyModule.php b/app/Classes/Modules/Companies/Standards/Rules/CanCreateCompanyModule.php new file mode 100644 index 00000000..e017c7f1 --- /dev/null +++ b/app/Classes/Modules/Companies/Standards/Rules/CanCreateCompanyModule.php @@ -0,0 +1,51 @@ +companyModuleValidation = $companyModuleValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + /** + * @param CompanyObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->companyModuleValidation->validate($object); + } + + /** + * @param CompanyObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} diff --git a/app/Classes/Modules/Companies/Standards/Validators/CompanyModuleValidation.php b/app/Classes/Modules/Companies/Standards/Validators/CompanyModuleValidation.php new file mode 100644 index 00000000..f12dc234 --- /dev/null +++ b/app/Classes/Modules/Companies/Standards/Validators/CompanyModuleValidation.php @@ -0,0 +1,39 @@ + $object->getUnityHashId() + ]; + } + + /** + * @param string $type + * @return array + */ + protected function rules(): array + { + return [ + 'unity_hash_id' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} diff --git a/app/Classes/Modules/Companies/Standards/Validators/CompanyValidation.php b/app/Classes/Modules/Companies/Standards/Validators/CompanyValidation.php index 5ea263ac..e9809fff 100644 --- a/app/Classes/Modules/Companies/Standards/Validators/CompanyValidation.php +++ b/app/Classes/Modules/Companies/Standards/Validators/CompanyValidation.php @@ -15,7 +15,7 @@ class CompanyValidation extends AbstractValidation { return [ 'company_name' => $object->getName(), - 'company_reference' => $object->getReference(), + 'company_reference' => $object->getReference() ]; } diff --git a/app/Classes/Modules/Unity/Processors/CreateContractProcessor.php b/app/Classes/Modules/Unity/Processors/CreateContractProcessor.php new file mode 100644 index 00000000..70756d75 --- /dev/null +++ b/app/Classes/Modules/Unity/Processors/CreateContractProcessor.php @@ -0,0 +1,21 @@ +getContractObligations = $getContractObligations; + } + + public function execute(){ + return $this->getContractObligations->execute(); + } +} diff --git a/app/Classes/Modules/Unity/Processors/UpdateObligationStatus.php b/app/Classes/Modules/Unity/Processors/UpdateObligationStatus.php new file mode 100644 index 00000000..951b52fb --- /dev/null +++ b/app/Classes/Modules/Unity/Processors/UpdateObligationStatus.php @@ -0,0 +1,21 @@ +getContractObligations = $getContractObligations; + } + + public function execute(){ + return $this->getContractObligations->execute(); + } +} diff --git a/app/Classes/Modules/Unity/Services/GetAccessToken.php b/app/Classes/Modules/Unity/Services/GetAccessToken.php index 353389ed..fe1e78be 100644 --- a/app/Classes/Modules/Unity/Services/GetAccessToken.php +++ b/app/Classes/Modules/Unity/Services/GetAccessToken.php @@ -21,7 +21,7 @@ class GetAccessToken $accesToken=''; if($this->unityConfig['default_auth']=='login'){ $loginDetails = $this->unityConfig['auth']['login']; - $response = Http::post($this->unityConfig['url'].$loginDetails['endpoint'], [ + $response = Http::post($this->unityConfig['url'].$this->unityConfig['endpoint']['login'], [ 'email' => $loginDetails['username'], 'password' => $loginDetails['password'], ])->object(); diff --git a/config/unity.php b/config/unity.php index bcca587b..7408dc8c 100644 --- a/config/unity.php +++ b/config/unity.php @@ -7,6 +7,16 @@ return [ 'url' => env('UNITY_API_URL', 'https://dev.unity.izyim.com/user-backsys/api/'), + 'endpoint' => [ + 'login' => env('UNITY_LOGIN_ENDPOINT','login'), + 'create_entity' => env('UNITY_CREATE_ENTITY_ENDPOINT','entity/store'), + 'get_contract_obligations' => env('UNITY_OB_LIST_ENDPOINT','contract-template-obligation/list'), + 'create_contract' => env('UNITY_OB_LIST_ENDPOINT','contract-template-obligation/list'), + 'update_obligation_status' => env('UNITY_OB_LIST_ENDPOINT','contract-template-obligation/list'), + ], + + 'default_auth' => env('UNITY_AUTH','login'), + 'auth' => [ 'api_key' => [ @@ -16,7 +26,6 @@ return [ 'login' => [ 'username' => env('UNITY_LOGIN_USERNAME','one@izyim.com'), 'password' => env('UNITY_LOGIN_PASSWORD','pass123'), - 'endpoint' => env('UNITY_LOGIN_ENDPOINT','login') ], ], @@ -25,20 +34,13 @@ return [ 'create_entity_endpoint' => env('UNITY_CREATE_ENTITY_ENDPOINT','entity/store'), - 'default_auth' => env('UNITY_AUTH','login'), - 'on_error_email' => env('UNITY_ON_ERROR_EMAIL','dev@shipping.com,dev@unity.com'), 'contract_template_id' => env('UNITY_CONTRACT_TEMPLATE_ID', 102), - 'contract_template_cache' => env('UNITY_CONTRACT_TEMPLATE_CACHE','60'), + 'contract_template_hash_id' => env('UNITY_CONTRACT_TEMPLATE_HASH_ID', '5lpn70mA2VmgxoekgYrJ'), - 'entities' => [ - 'xxx_key' => Constant\OrderEntity::SUPPLIER, - 'zzz_key' => Constant\OrderEntity::WAREHOUSE_YIWU, - 'vvv_key' => Constant\OrderEntity::WAREHOUSE_GUANG_ZHOU, - 'wwww_key' => Constant\OrderEntity::SUPPLIER, - ], + 'contract_template_cache' => env('UNITY_CONTRACT_TEMPLATE_CACHE','60'), 'obligations' => [ 'PACKING' => Constant\OrderSteps::PACKING, diff --git a/database/migrations/2021_07_22_145827_modify_company_table.php b/database/migrations/2021_07_22_145827_modify_company_table.php new file mode 100644 index 00000000..59bc2b9e --- /dev/null +++ b/database/migrations/2021_07_22_145827_modify_company_table.php @@ -0,0 +1,30 @@ +string('unity_hash_id',200)->nullable()->after('status'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +}