From f33c316ba56e89887bf9c5695195d1c82bb734fa Mon Sep 17 00:00:00 2001 From: Hafiz Date: Wed, 23 Jun 2021 21:58:07 +0800 Subject: [PATCH] Add address API,Model,Controller --- .../EmailVerificationAttemptExpiration.php | 42 +++++++ .../Jobs/PasswordResetTokenExpiration.php | 39 ++++++ app/Classes/Jobs/SendResetPasswordEmail.php | 42 +++++++ .../Jobs/SendUserVerificationEmail.php | 41 ++++++ .../ControllersLogic/CreateAddressLogic.php | 79 ++++++++++++ .../ControllersLogic/DeleteAddressLogic.php | 73 +++++++++++ .../ControllersLogic/FetchAddressLogic.php | 66 ++++++++++ .../ControllersLogic/ListAddressesLogic.php | 66 ++++++++++ .../ControllersLogic/ListDistrictsLogic.php | 54 ++++++++ .../SetAddressToDefaultLogic.php | 70 +++++++++++ .../ControllersLogic/UpdateAddressLogic.php | 86 +++++++++++++ .../DataTransferObjects/AddressObject.php | 96 ++++++++++++++ .../Addresses/Services/CreatesAddress.php | 32 +++++ .../Addresses/Services/DeletesAddress.php | 19 +++ .../Addresses/Services/FetchesAddress.php | 33 +++++ .../Addresses/Services/FetchesDistrict.php | 34 +++++ .../Addresses/Services/ListsAddresses.php | 33 +++++ .../Addresses/Services/ListsDistricts.php | 33 +++++ .../Services/ResetsAddressesDefault.php | 19 +++ .../Services/SetsAddressToDefault.php | 22 ++++ .../Addresses/Services/UpdatesAddress.php | 33 +++++ .../Standards/Rules/CanCreateAddress.php | 57 +++++++++ .../Standards/Rules/CanDeleteAddress.php | 43 +++++++ .../Standards/Rules/CanFetchAddress.php | 43 +++++++ .../Standards/Rules/CanListAddresses.php | 43 +++++++ .../Standards/Rules/CanUpdateAddress.php | 57 +++++++++ .../Validators/AddressValidation.php | 42 +++++++ .../ValueObjects/Constants/ApprovalStatus.php | 21 ++++ .../ValueObjects/Constants/BusinessType.php | 13 ++ .../ValueObjects/Constants/CompanyType.php | 11 ++ .../ValueObjects/Constants/Countries.php | 11 ++ .../Addresses/CreateAddressController.php | 20 +++ .../Addresses/DeleteAddressController.php | 20 +++ .../Addresses/FetchAddressController.php | 20 +++ .../Addresses/ListAddressesController.php | 20 +++ .../Addresses/ListDistrictsController.php | 20 +++ .../SetAddressToDefaultController.php | 20 +++ .../Addresses/UpdateAddressController.php | 20 +++ .../CreateServiceTypeController.php | 20 +++ .../DeleteServiceTypeController.php | 20 +++ .../FetchServiceTypeController.php | 20 +++ .../ListServiceTypesController.php | 20 +++ .../UpdateServiceTypeController.php | 20 +++ .../UpdateServiceTypeStatusController.php | 20 +++ .../Middleware/CheckForMaintenanceMode.php | 17 +++ app/Models/Address.php | 61 +++++++++ app/Models/Company.php | 117 ++++++++++++++++++ app/Models/Country.php | 33 +++++ app/Models/District.php | 41 ++++++ app/Models/State.php | 30 +++++ composer.json | 6 +- database/factories/AddressFactory.php | 20 +++ .../2021_06_21_222722_create_states_table.php | 31 +++++ ...21_06_21_222851_create_districts_table.php | 41 ++++++ ...21_06_21_230834_create_countries_table.php | 35 ++++++ ...21_06_21_232943_create_companies_table.php | 40 ++++++ ...21_06_21_232944_create_addresses_table.php | 45 +++++++ package.json | 6 +- routes/address.php | 37 ++++++ routes/api.php | 43 ++++++- 60 files changed, 2210 insertions(+), 6 deletions(-) create mode 100644 app/Classes/Jobs/EmailVerificationAttemptExpiration.php create mode 100644 app/Classes/Jobs/PasswordResetTokenExpiration.php create mode 100644 app/Classes/Jobs/SendResetPasswordEmail.php create mode 100644 app/Classes/Jobs/SendUserVerificationEmail.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/DeleteAddressLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/FetchAddressLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/ListAddressesLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/ListDistrictsLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/SetAddressToDefaultLogic.php create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php create mode 100644 app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php create mode 100644 app/Classes/Modules/Addresses/Services/CreatesAddress.php create mode 100644 app/Classes/Modules/Addresses/Services/DeletesAddress.php create mode 100644 app/Classes/Modules/Addresses/Services/FetchesAddress.php create mode 100644 app/Classes/Modules/Addresses/Services/FetchesDistrict.php create mode 100644 app/Classes/Modules/Addresses/Services/ListsAddresses.php create mode 100644 app/Classes/Modules/Addresses/Services/ListsDistricts.php create mode 100644 app/Classes/Modules/Addresses/Services/ResetsAddressesDefault.php create mode 100644 app/Classes/Modules/Addresses/Services/SetsAddressToDefault.php create mode 100644 app/Classes/Modules/Addresses/Services/UpdatesAddress.php create mode 100644 app/Classes/Modules/Addresses/Standards/Rules/CanCreateAddress.php create mode 100644 app/Classes/Modules/Addresses/Standards/Rules/CanDeleteAddress.php create mode 100644 app/Classes/Modules/Addresses/Standards/Rules/CanFetchAddress.php create mode 100644 app/Classes/Modules/Addresses/Standards/Rules/CanListAddresses.php create mode 100644 app/Classes/Modules/Addresses/Standards/Rules/CanUpdateAddress.php create mode 100644 app/Classes/Modules/Addresses/Standards/Validators/AddressValidation.php create mode 100644 app/Classes/ValueObjects/Constants/ApprovalStatus.php create mode 100644 app/Classes/ValueObjects/Constants/BusinessType.php create mode 100644 app/Classes/ValueObjects/Constants/CompanyType.php create mode 100644 app/Classes/ValueObjects/Constants/Countries.php create mode 100644 app/Http/Controllers/Addresses/CreateAddressController.php create mode 100644 app/Http/Controllers/Addresses/DeleteAddressController.php create mode 100644 app/Http/Controllers/Addresses/FetchAddressController.php create mode 100644 app/Http/Controllers/Addresses/ListAddressesController.php create mode 100644 app/Http/Controllers/Addresses/ListDistrictsController.php create mode 100644 app/Http/Controllers/Addresses/SetAddressToDefaultController.php create mode 100644 app/Http/Controllers/Addresses/UpdateAddressController.php create mode 100644 app/Http/Controllers/ServiceTypes/CreateServiceTypeController.php create mode 100644 app/Http/Controllers/ServiceTypes/DeleteServiceTypeController.php create mode 100644 app/Http/Controllers/ServiceTypes/FetchServiceTypeController.php create mode 100644 app/Http/Controllers/ServiceTypes/ListServiceTypesController.php create mode 100644 app/Http/Controllers/ServiceTypes/UpdateServiceTypeController.php create mode 100644 app/Http/Controllers/ServiceTypes/UpdateServiceTypeStatusController.php create mode 100644 app/Http/Middleware/CheckForMaintenanceMode.php create mode 100644 app/Models/Address.php create mode 100644 app/Models/Company.php create mode 100644 app/Models/Country.php create mode 100644 app/Models/District.php create mode 100644 app/Models/State.php create mode 100644 database/factories/AddressFactory.php create mode 100644 database/migrations/2021_06_21_222722_create_states_table.php create mode 100644 database/migrations/2021_06_21_222851_create_districts_table.php create mode 100644 database/migrations/2021_06_21_230834_create_countries_table.php create mode 100644 database/migrations/2021_06_21_232943_create_companies_table.php create mode 100644 database/migrations/2021_06_21_232944_create_addresses_table.php create mode 100644 routes/address.php diff --git a/app/Classes/Jobs/EmailVerificationAttemptExpiration.php b/app/Classes/Jobs/EmailVerificationAttemptExpiration.php new file mode 100644 index 00000000..e327a941 --- /dev/null +++ b/app/Classes/Jobs/EmailVerificationAttemptExpiration.php @@ -0,0 +1,42 @@ +attempt = $attempt; + } + + + /** + * @throws MalformedRequestException + */ + public function handle() + { + (new ExpiresEmailVerificationAttempt())->execute($this->attempt); + + } +} diff --git a/app/Classes/Jobs/PasswordResetTokenExpiration.php b/app/Classes/Jobs/PasswordResetTokenExpiration.php new file mode 100644 index 00000000..d5010964 --- /dev/null +++ b/app/Classes/Jobs/PasswordResetTokenExpiration.php @@ -0,0 +1,39 @@ +attempt = $attempt; + } + + + /** + * @throws MalformedRequestException + */ + public function handle() + { + (new ExpiresPasswordReset())->execute($this->attempt); + } +} diff --git a/app/Classes/Jobs/SendResetPasswordEmail.php b/app/Classes/Jobs/SendResetPasswordEmail.php new file mode 100644 index 00000000..1a8d2488 --- /dev/null +++ b/app/Classes/Jobs/SendResetPasswordEmail.php @@ -0,0 +1,42 @@ +user = $user; + $this->attempt = $attempt; + } + + + public function handle() + { + $this->user->notify(new ResetPasswordEmail($this->user, $this->attempt)); + + } +} diff --git a/app/Classes/Jobs/SendUserVerificationEmail.php b/app/Classes/Jobs/SendUserVerificationEmail.php new file mode 100644 index 00000000..2bb54f47 --- /dev/null +++ b/app/Classes/Jobs/SendUserVerificationEmail.php @@ -0,0 +1,41 @@ +user = $user; + $this->attempt = $attempt; + } + + + public function handle() + { + $this->user->notify(new UserVerificationEmail($this->user, $this->attempt)); + } +} diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php new file mode 100644 index 00000000..8fd6fe7f --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -0,0 +1,79 @@ + 'Created Address', + 'message' => 'You have successfully created a new Address' + ]; + } + + /** @var CanCreateAddress */ + private $canCreateAddress; + + /** @var FetchesDistrict */ + private $fetchesDistrict; + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var CreatesAddress */ + private $createsAddress; + + /** + * CreateAddressLogic constructor. + * @param CanCreateAddress $canCreateAddress + * @param FetchesDistrict $fetchesDistrict + * @param FetchesCompany $fetchesCompany + * @param CreatesAddress $createsAddress + */ + public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesAddress $createsAddress) + { + $this->canCreateAddress = $canCreateAddress; + $this->fetchesDistrict = $fetchesDistrict; + $this->fetchesCompany = $fetchesCompany; + $this->createsAddress = $createsAddress; + } + + /** + * @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 AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code')); + + $this->canCreateAddress->passes($object); + + $query = $this->createsAddress->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object); + + return $this->resourceResponse(new AddressResource($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/ControllersLogic/DeleteAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/DeleteAddressLogic.php new file mode 100644 index 00000000..3a3593aa --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/DeleteAddressLogic.php @@ -0,0 +1,73 @@ + 'Deleted Address', + 'message' => 'You have successfully deleted a Address' + ]; + } + + + /** @var CanDeleteAddress */ + private $canDeleteAddress; + + /** @var DeletesAddress */ + private $deletesAddress; + + /** @var FetchesAddress */ + private $fetchesAddress; + + /** + * DeleteAddressControllersLogic constructor. + * @param CanDeleteAddress $canDeleteAddress + * @param DeletesAddress $deletesAddress + * @param FetchesAddress $fetchesAddress + */ + public function __construct(CanDeleteAddress $canDeleteAddress, DeletesAddress $deletesAddress, FetchesAddress $fetchesAddress) + { + $this->canDeleteAddress = $canDeleteAddress; + $this->deletesAddress = $deletesAddress; + $this->fetchesAddress = $fetchesAddress; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + $this->canDeleteAddress->passes(); + + $query = $this->fetchesAddress->execute(['id' => $request->route('id')]); + + $this->deletesAddress->execute($query); + + return $this->response([]); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/ControllersLogic/FetchAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/FetchAddressLogic.php new file mode 100644 index 00000000..12320e0f --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/FetchAddressLogic.php @@ -0,0 +1,66 @@ + 'Retrieved Address', + 'message' => 'You have successfully retrieved a Address' + ]; + } + + /** @var CanFetchAddress */ + private $canFetchAddress; + + /** @var FetchesAddress */ + private $fetchesAddress; + + /** + * FetchAddressControllersLogic constructor. + * @param CanFetchAddress $canFetchAddress + * @param FetchesAddress $fetchesAddress + */ + public function __construct(CanFetchAddress $canFetchAddress, FetchesAddress $fetchesAddress) + { + $this->canFetchAddress = $canFetchAddress; + $this->fetchesAddress = $fetchesAddress; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + $this->canFetchAddress->passes(); + + $query = $this->fetchesAddress->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new AddressResource($query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/ControllersLogic/ListAddressesLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/ListAddressesLogic.php new file mode 100644 index 00000000..57e3a2f0 --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/ListAddressesLogic.php @@ -0,0 +1,66 @@ + 'Retrieved Addresses', + 'message' => 'You have successfully retrieved a list of Addresses' + ]; + } + + /** @var CanListAddresses */ + private $canListAddresses; + + /** @var ListsAddresses */ + private $listsAddresses; + + /** + * ListAddressesLogic constructor. + * @param CanListAddresses $canListAddresses + * @param ListsAddresses $listsAddresses + */ + public function __construct(CanListAddresses $canListAddresses, ListsAddresses $listsAddresses) + { + $this->canListAddresses = $canListAddresses; + $this->listsAddresses = $listsAddresses; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + $this->canListAddresses->passes(); + + $query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(AddressResource::collection($query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/ControllersLogic/ListDistrictsLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/ListDistrictsLogic.php new file mode 100644 index 00000000..b9a97fb3 --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/ListDistrictsLogic.php @@ -0,0 +1,54 @@ + 'Retrieved Addresses', + 'message' => 'You have successfully retrieved a list of Addresses' + ]; + } + + /** @var ListsDistricts */ + private $listDistricts; + + /** + * ListDistrictsLogic constructor. + * @param ListsDistricts $listDistricts + */ + public function __construct(ListsDistricts $listDistricts) + { + $this->listDistricts = $listDistricts; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $query = $this->listDistricts->execute($this->listDistricts->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(DistrictResource::collection($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/ControllersLogic/SetAddressToDefaultLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/SetAddressToDefaultLogic.php new file mode 100644 index 00000000..2f94809b --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/SetAddressToDefaultLogic.php @@ -0,0 +1,70 @@ + 'Updated Address', + 'message' => 'You have successfully set the default Address' + ]; + } + + /** @var ResetsAddressesDefault */ + private $resetsAddressesDefault; + + /** @var FetchesAddress */ + private $fetchesAddress; + + /** @var SetsAddressToDefault*/ + private $setsAddressToDefault; + + /** + * SetAddressToDefaultLogic constructor. + * @param ResetsAddressesDefault $resetsAddressesDefault + * @param FetchesAddress $fetchesAddress + * @param SetsAddressToDefault $setsAddressToDefault + */ + public function __construct(ResetsAddressesDefault $resetsAddressesDefault, FetchesAddress $fetchesAddress, SetsAddressToDefault $setsAddressToDefault) + { + $this->resetsAddressesDefault = $resetsAddressesDefault; + $this->fetchesAddress = $fetchesAddress; + $this->setsAddressToDefault = $setsAddressToDefault; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request): JsonResponse + { + + /** @var Address $address */ + + $address = $this->fetchesAddress->execute(['id' => $request->route('id')]); + + $this->resetsAddressesDefault->execute($address); + + return $this->resourceResponse(new AddressResource($this->setsAddressToDefault->execute($address))); + } +} diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php new file mode 100644 index 00000000..805bc7ac --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -0,0 +1,86 @@ + 'Updated Address', + 'message' => 'You have successfully updated the Address' + ]; + } + + /** @var CanUpdateAddress */ + private $canUpdateAddress; + + /** @var UpdatesAddress */ + private $updatesAddress; + + /** @var FetchesAddress */ + private $fetchesAddress; + + /** @var FetchesDistrict */ + private $fetchesDistrict; + + /** + * UpdateAddressLogic constructor. + * @param CanUpdateAddress $canUpdateAddress + * @param UpdatesAddress $updatesAddress + * @param FetchesAddress $fetchesAddress + * @param FetchesDistrict $fetchesDistrict + */ + public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict) + { + $this->canUpdateAddress = $canUpdateAddress; + $this->updatesAddress = $updatesAddress; + $this->fetchesAddress = $fetchesAddress; + $this->fetchesDistrict = $fetchesDistrict; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + $district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]); + $object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code')); + //$object = new AddressObject($request->input('company_id'), $request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'), $request->input('default'), $request->input('billing')); + + $this->canUpdateAddress->passes($object); + + $query = $this->fetchesAddress->execute(['id' => $request->route('id')]); + + $query = $this->updatesAddress->execute($query, $object); + + return $this->resourceResponse(new AddressResource($query)); + + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php new file mode 100644 index 00000000..8c164317 --- /dev/null +++ b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php @@ -0,0 +1,96 @@ +streetOne = $streetOne; + $this->streetTwo = $streetTwo; + $this->countryId = $countryId; + $this->stateId = $stateId; + $this->districtId = $districtId; + $this->postCode = $postCode; + } + + /** + * @return string + */ + public function getStreetOne(): string + { + return $this->streetOne; + } + + /** + * @return null|string + */ + public function getStreetTwo(): ?string + { + return $this->streetTwo; + } + + /** + * @return int + */ + public function getCountryId(): int + { + return $this->countryId; + } + + /** + * @return int + */ + public function getStateId(): int + { + return $this->stateId; + } + + /** + * @return int + */ + public function getDistrictId(): int + { + return $this->districtId; + } + + /** + * @return int + */ + public function getPostCode(): int + { + return $this->postCode; + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/CreatesAddress.php b/app/Classes/Modules/Addresses/Services/CreatesAddress.php new file mode 100644 index 00000000..e6a7b8b3 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/CreatesAddress.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->addresses(), $model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/DeletesAddress.php b/app/Classes/Modules/Addresses/Services/DeletesAddress.php new file mode 100644 index 00000000..a36ab903 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/DeletesAddress.php @@ -0,0 +1,19 @@ +handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/FetchesAddress.php b/app/Classes/Modules/Addresses/Services/FetchesAddress.php new file mode 100644 index 00000000..a91900b7 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/FetchesAddress.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/FetchesDistrict.php b/app/Classes/Modules/Addresses/Services/FetchesDistrict.php new file mode 100644 index 00000000..f2fcd371 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/FetchesDistrict.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/ListsAddresses.php b/app/Classes/Modules/Addresses/Services/ListsAddresses.php new file mode 100644 index 00000000..7a0f1213 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/ListsAddresses.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/ListsDistricts.php b/app/Classes/Modules/Addresses/Services/ListsDistricts.php new file mode 100644 index 00000000..b5b65341 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/ListsDistricts.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/ResetsAddressesDefault.php b/app/Classes/Modules/Addresses/Services/ResetsAddressesDefault.php new file mode 100644 index 00000000..b9f6346e --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/ResetsAddressesDefault.php @@ -0,0 +1,19 @@ +company->addresses()->update(['billing' => false]); + } +} diff --git a/app/Classes/Modules/Addresses/Services/SetsAddressToDefault.php b/app/Classes/Modules/Addresses/Services/SetsAddressToDefault.php new file mode 100644 index 00000000..07d2a2fc --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/SetsAddressToDefault.php @@ -0,0 +1,22 @@ +billing = true; + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/UpdatesAddress.php b/app/Classes/Modules/Addresses/Services/UpdatesAddress.php new file mode 100644 index 00000000..907edc73 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/UpdatesAddress.php @@ -0,0 +1,33 @@ +company_id = $object->getCompanyId(); + $model->street_one = $object->getStreetOne(); + $model->street_two = $object->getStreetTwo(); + $model->district_id = $object->getDistrictId(); + $model->state_id = $object->getStateId(); + $model->postcode = $object->getPostCode(); + $model->country_id = $object->getCountryId(); + //$model->default = $object->getDefault(); + //$model->billing = $object->getBilling(); + + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Standards/Rules/CanCreateAddress.php b/app/Classes/Modules/Addresses/Standards/Rules/CanCreateAddress.php new file mode 100644 index 00000000..42508b1d --- /dev/null +++ b/app/Classes/Modules/Addresses/Standards/Rules/CanCreateAddress.php @@ -0,0 +1,57 @@ +addressValidation = $addressValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param AddressObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->addressValidation->validate($object); + + } + + + /** + * @param AddressObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Standards/Rules/CanDeleteAddress.php b/app/Classes/Modules/Addresses/Standards/Rules/CanDeleteAddress.php new file mode 100644 index 00000000..c13a890c --- /dev/null +++ b/app/Classes/Modules/Addresses/Standards/Rules/CanDeleteAddress.php @@ -0,0 +1,43 @@ +addressValidation = $addressValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param AddressObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->addressValidation->validate($object); + + } + + + /** + * @param AddressObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Standards/Validators/AddressValidation.php b/app/Classes/Modules/Addresses/Standards/Validators/AddressValidation.php new file mode 100644 index 00000000..5d8b0ee6 --- /dev/null +++ b/app/Classes/Modules/Addresses/Standards/Validators/AddressValidation.php @@ -0,0 +1,42 @@ + $object->getStreetOne(), + 'street_two' => $object->getStreetTwo(), + 'district_id' => $object->getDistrictId() + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'street_one' => 'required', + 'district_id' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/ApprovalStatus.php b/app/Classes/ValueObjects/Constants/ApprovalStatus.php new file mode 100644 index 00000000..2f6a7a4a --- /dev/null +++ b/app/Classes/ValueObjects/Constants/ApprovalStatus.php @@ -0,0 +1,21 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/DeleteAddressController.php b/app/Http/Controllers/Addresses/DeleteAddressController.php new file mode 100644 index 00000000..dc0fc6b1 --- /dev/null +++ b/app/Http/Controllers/Addresses/DeleteAddressController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/FetchAddressController.php b/app/Http/Controllers/Addresses/FetchAddressController.php new file mode 100644 index 00000000..3691100d --- /dev/null +++ b/app/Http/Controllers/Addresses/FetchAddressController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/ListAddressesController.php b/app/Http/Controllers/Addresses/ListAddressesController.php new file mode 100644 index 00000000..75ae20a4 --- /dev/null +++ b/app/Http/Controllers/Addresses/ListAddressesController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/ListDistrictsController.php b/app/Http/Controllers/Addresses/ListDistrictsController.php new file mode 100644 index 00000000..26780cca --- /dev/null +++ b/app/Http/Controllers/Addresses/ListDistrictsController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/SetAddressToDefaultController.php b/app/Http/Controllers/Addresses/SetAddressToDefaultController.php new file mode 100644 index 00000000..4dc7115f --- /dev/null +++ b/app/Http/Controllers/Addresses/SetAddressToDefaultController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/UpdateAddressController.php b/app/Http/Controllers/Addresses/UpdateAddressController.php new file mode 100644 index 00000000..78ca4136 --- /dev/null +++ b/app/Http/Controllers/Addresses/UpdateAddressController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/CreateServiceTypeController.php b/app/Http/Controllers/ServiceTypes/CreateServiceTypeController.php new file mode 100644 index 00000000..831383d0 --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/CreateServiceTypeController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/DeleteServiceTypeController.php b/app/Http/Controllers/ServiceTypes/DeleteServiceTypeController.php new file mode 100644 index 00000000..2178f11a --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/DeleteServiceTypeController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/FetchServiceTypeController.php b/app/Http/Controllers/ServiceTypes/FetchServiceTypeController.php new file mode 100644 index 00000000..80742a54 --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/FetchServiceTypeController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/ListServiceTypesController.php b/app/Http/Controllers/ServiceTypes/ListServiceTypesController.php new file mode 100644 index 00000000..848e7f4c --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/ListServiceTypesController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/UpdateServiceTypeController.php b/app/Http/Controllers/ServiceTypes/UpdateServiceTypeController.php new file mode 100644 index 00000000..0e103dcb --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/UpdateServiceTypeController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ServiceTypes/UpdateServiceTypeStatusController.php b/app/Http/Controllers/ServiceTypes/UpdateServiceTypeStatusController.php new file mode 100644 index 00000000..472d2535 --- /dev/null +++ b/app/Http/Controllers/ServiceTypes/UpdateServiceTypeStatusController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 00000000..35b9824b --- /dev/null +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,17 @@ +BelongsTo(Country::class, 'country_id', 'id'); + } + + /** + * @return BelongsTo + */ + public function company(): BelongsTo + { + return $this->BelongsTo(Company::class, 'company_id', 'id'); + } + + /** + * @return BelongsTo + */ + public function state(): BelongsTo + { + return $this->BelongsTo(State::class, 'state_id', 'id'); + } + + /** + * @return BelongsTo + */ + public function district(): BelongsTo + { + return $this->BelongsTo(District::class, 'district_id', 'id'); + } +} diff --git a/app/Models/Company.php b/app/Models/Company.php new file mode 100644 index 00000000..c1a6a191 --- /dev/null +++ b/app/Models/Company.php @@ -0,0 +1,117 @@ +HasMany(Contact::class, 'company_id'); + } + + /** + * @return HasMany + */ + public function addresses(): HasMany + { + return $this->HasMany(Address::class, 'company_id'); + } + + /** + * @return belongsToMany + */ + public function segments(): belongsToMany + { + return $this->belongsToMany(Segment::class, (new SegmentCompany())->getTable(), 'company_id', 'segment_id'); + } + + /** + * @return belongsToMany + */ + public function employees(): belongsToMany + { + return $this->belongsToMany(User::class, (new Employee())->getTable(), 'company_id','user_id'); + } + + /** + * @return MorphMany + */ + public function documents(): morphMany + { + return $this->morphMany(Document::class, 'owner'); + } + + /** + * @return HasMany + */ + public function banks(): HasMany + { + return $this->HasMany(Bank::class, 'company_id'); + } + + /** + * @return HasMany + */ + public function bookings(): HasMany + { + return $this->HasMany(Booking::class, 'company_id'); + } + + /** + * @return Builder + */ + public function services(): Builder { + return ServiceType::where('status', ApprovalStatus::APPROVED)->whereHas('constants', function($query) { + $query->Where(function($query){ + $query->where('reference', SegmentConstants::SERVICE_TYPE)->where('detail->is_active', true); + })->orWhere(function($query) { + $query->where('reference', SegmentConstants::CUSTOM_SERVICE_TYPE)->where('detail->is_active', true)->whereIn('segment_id', $this->segments->pluck('id')); + }); + }); + } + + public function servicesConfigurations(): Collection { + return $this->services()->get()->map(function($service) { + return new ServiceConfigurationsObject($service, + $service->constants->where('reference', SegmentConstants::SERVICE_TYPE)->first(), + $service->constants->where('reference', SegmentConstants::CUSTOM_SERVICE_TYPE)->whereIn('segment_id', $this->segments->pluck('id'))); + }); + } + +} + + + diff --git a/app/Models/Country.php b/app/Models/Country.php new file mode 100644 index 00000000..3232366a --- /dev/null +++ b/app/Models/Country.php @@ -0,0 +1,33 @@ +HasMany(Currency::class, 'country_id', 'id'); + } +} diff --git a/app/Models/District.php b/app/Models/District.php new file mode 100644 index 00000000..13a90f85 --- /dev/null +++ b/app/Models/District.php @@ -0,0 +1,41 @@ +belongsTo(Country::class, 'country_id', 'id'); + } + + /** + * @return BelongsTo + **/ + public function state(): BelongsTo + { + return $this->BelongsTo(State::class, 'state_id', 'id'); + } +} diff --git a/app/Models/State.php b/app/Models/State.php new file mode 100644 index 00000000..fa920454 --- /dev/null +++ b/app/Models/State.php @@ -0,0 +1,30 @@ +hasOne(Country::class, 'country_id', 'id'); + } +} diff --git a/composer.json b/composer.json index 61a75285..753e17ac 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,11 @@ "autoload-dev": { "psr-4": { "Tests\\": "tests/" - } + }, + "classmap": [ + "database/seeds", + "database/factories" + ] }, "scripts": { "post-autoload-dump": [ diff --git a/database/factories/AddressFactory.php b/database/factories/AddressFactory.php new file mode 100644 index 00000000..6f3569c4 --- /dev/null +++ b/database/factories/AddressFactory.php @@ -0,0 +1,20 @@ +define(App\Models\Address::class, function (Faker $faker) { + + return [ + 'company_id' => $faker->numberBetween(1, 30), + 'street_one' => $faker->streetAddress, + 'street_two' => $faker->streetAddress, + 'city' => $faker->city, + 'state' => $faker->state, + 'post_code' => $faker->postcode, + 'country' => $faker->country, + 'default' => 1, + 'billing' => 1 + ]; +}); diff --git a/database/migrations/2021_06_21_222722_create_states_table.php b/database/migrations/2021_06_21_222722_create_states_table.php new file mode 100644 index 00000000..d734729d --- /dev/null +++ b/database/migrations/2021_06_21_222722_create_states_table.php @@ -0,0 +1,31 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('states'); + } +} diff --git a/database/migrations/2021_06_21_222851_create_districts_table.php b/database/migrations/2021_06_21_222851_create_districts_table.php new file mode 100644 index 00000000..a5d1f51c --- /dev/null +++ b/database/migrations/2021_06_21_222851_create_districts_table.php @@ -0,0 +1,41 @@ +id(); + $table->foreignId('country_id')->unsigned(); + $table->foreignId('state_id')->unsigned(); + $table->string('name'); + $table->text('postcode'); + $table->integer('status')->default(ApprovalStatus::APPROVED); + $table->softDeletes(); + $table->timestamps(); + + $table->foreign('country_id')->references('id')->on('countries'); + $table->foreign('state_id')->references('id')->on('states'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('districts'); + } +} diff --git a/database/migrations/2021_06_21_230834_create_countries_table.php b/database/migrations/2021_06_21_230834_create_countries_table.php new file mode 100644 index 00000000..11069e71 --- /dev/null +++ b/database/migrations/2021_06_21_230834_create_countries_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('name')->unique(); + $table->string('short_code')->unique(); + $table->string('phone_code')->unique(); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('countries'); + } +} diff --git a/database/migrations/2021_06_21_232943_create_companies_table.php b/database/migrations/2021_06_21_232943_create_companies_table.php new file mode 100644 index 00000000..d23b63e0 --- /dev/null +++ b/database/migrations/2021_06_21_232943_create_companies_table.php @@ -0,0 +1,40 @@ +id(); + $table->string('name'); + $table->string('reference'); + $table->integer('type')->default(CompanyType::COMPANY_BUSINESS); + $table->integer('business_type')->default(BusinessType::IMPORTER); + $table->integer('status')->default(ApprovalStatus::PENDING_SUBMISSION); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('companies'); + } +} diff --git a/database/migrations/2021_06_21_232944_create_addresses_table.php b/database/migrations/2021_06_21_232944_create_addresses_table.php new file mode 100644 index 00000000..3228b65e --- /dev/null +++ b/database/migrations/2021_06_21_232944_create_addresses_table.php @@ -0,0 +1,45 @@ +id(); + $table->foreignId('company_id')->unsigned(); + $table->foreignId('country_id')->unsigned(); + $table->foreignId('state_id')->unsigned(); + $table->foreignId('district_id')->unsigned(); + $table->string('postcode'); + $table->string('street_one'); + $table->string('street_two')->nullable(); + $table->integer('billing')->default(true); + $table->softDeletes(); + $table->timestamps(); + + $table->foreign('country_id')->references('id')->on('countries'); + $table->foreign('company_id')->references('id')->on('companies'); + $table->foreign('state_id')->references('id')->on('states'); + $table->foreign('district_id')->references('id')->on('districts'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('addresses'); + } +} diff --git a/package.json b/package.json index 694987df..26b57108 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,6 @@ }, "devDependencies": { "axios": "^0.21", - "laravel-mix": "^5.0.9", - "lodash": "^4.17.19", - "postcss": "^8.1.14", "cross-env": "^7.0.2", "del": "^6.0.0", "fancy-log": "^1.3.0", @@ -61,6 +58,9 @@ "gulp-streamify": "^1.0.2", "gulp-uglify": "^3.0.0", "gulp-uglify-es": "^2.0.0", + "laravel-mix": "^5.0.9", + "lodash": "^4.17.19", + "postcss": "^8.1.14", "resolve-url-loader": "^3.1.2" }, "paths": { diff --git a/routes/address.php b/routes/address.php new file mode 100644 index 00000000..be074cdc --- /dev/null +++ b/routes/address.php @@ -0,0 +1,37 @@ + 'address', 'as' => 'address.', 'namespace' => 'Addresses'], function () { + + Route::get('/{id}/show', 'FetchAddressController@fetch')->name('show'); + + Route::get('/list', 'ListAddressesController@list')->name('list'); + Route::get('district/list', 'ListDistrictsController@list')->name('district.list'); + + Route::post('/create', 'CreateAddressController@create')->name('create'); + + Route::put('/update/{id}', 'UpdateAddressController@update')->name('update'); + + Route::put('/{id}/default', 'SetAddressToDefaultController@update')->name('default'); + + Route::delete('/delete/{id}', 'DeleteAddressController@destroy')->name('delete'); + +}); + + Route::group(['prefix' => 'service_type', 'as' => 'service_type.', 'namespace' => 'ServiceTypes'], function () { + + Route::get('/{id}/show', 'FetchServiceTypeController@fetch')->name('show'); + + Route::get('/list', 'ListServiceTypesController@list')->name('list'); + + Route::post('/create', 'CreateServiceTypeController@create')->name('create'); + + Route::put('/update/{id}', 'UpdateServiceTypeController@update')->name('update'); + + Route::put('/status/{id}/{status}', 'UpdateServiceTypeStatusController@activate')->where('status', 'active|inactive')->name('status'); + + Route::delete('/delete/{id}', 'DeleteServiceTypeController@destroy')->name('delete'); + +}); diff --git a/routes/api.php b/routes/api.php index bcb8b189..8cc29dd3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,45 @@ use Illuminate\Support\Facades\Route; | */ -Route::middleware('auth:api')->get('/user', function (Request $request) { - return $request->user(); +//Route::middleware('auth:api')->get('/user', function (Request $request) { +// return $request->user(); +//}); + +Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function () { + +// require __DIR__ . '/account.php'; + +// Route::get('/rate/calculate', 'RateCalculateCurrencyController@convert')->name('calculate'); + + Route::group(['prefix' => 'service', 'as' => 'service.'], function () { + Route::get('countries/list', 'Services\CountriesListController@index')->name('list.countries'); + }); + + Route::group(['middleware' => 'valid.token'], function () { + + Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); + +// require __DIR__ . '/company.php'; +// +// require __DIR__ . '/document.php'; +// +// require __DIR__ . '/segment.php'; +// +// require __DIR__ . '/currency.php'; +// +// require __DIR__ . '/bank.php'; +// +// require __DIR__ . '/booking.php'; +// +// require __DIR__ . '/transaction.php'; + + require __DIR__ . '/address.php'; + +// require __DIR__ . '/announcement.php'; + +// require __DIR__ . '/wallet.php'; +// require __DIR__ . '/rate.php'; +// require __DIR__ . '/receipt.php'; + + }); });