From ab16dcac6106124b017355b1addd4934b97afe4b Mon Sep 17 00:00:00 2001 From: merdan Date: Fri, 29 Jul 2022 12:47:47 +0500 Subject: [PATCH] Account profile with strategy pattern --- app/AccountTypes/AccountTypesService.php | 6 ++++ app/AccountTypes/BusinessAccount.php | 17 ++++++++++ app/AccountTypes/CompanyAccount.php | 18 ++++++++++ .../Controllers/API/AccountController.php | 34 +++++++++++++++++++ .../Controllers/{ => API}/AuthController.php | 12 ++++--- app/Http/Requests/API/RegisterRequest.php | 2 +- app/Http/Requests/BankAccountRequest.php | 30 ++++++++++++++++ app/Http/Requests/ContactsRequest.php | 30 ++++++++++++++++ app/Http/Resources/AccountResource.php | 32 +++++++++++++++++ .../Resources/BusinessProfileResource.php | 19 +++++++++++ app/Http/Resources/CompanyProfileResource.php | 20 +++++++++++ app/Models/Account.php | 2 +- app/Services/AccountTypesService.php | 6 ---- app/Services/Business.php | 12 ------- app/Services/Company.php | 13 ------- config/services.php | 10 ++++-- routes/api.php | 19 ++++++++--- 17 files changed, 238 insertions(+), 44 deletions(-) create mode 100644 app/AccountTypes/AccountTypesService.php create mode 100644 app/AccountTypes/BusinessAccount.php create mode 100644 app/AccountTypes/CompanyAccount.php create mode 100644 app/Http/Controllers/API/AccountController.php rename app/Http/Controllers/{ => API}/AuthController.php (98%) create mode 100644 app/Http/Requests/BankAccountRequest.php create mode 100644 app/Http/Requests/ContactsRequest.php create mode 100644 app/Http/Resources/AccountResource.php create mode 100644 app/Http/Resources/BusinessProfileResource.php create mode 100644 app/Http/Resources/CompanyProfileResource.php delete mode 100644 app/Services/AccountTypesService.php delete mode 100644 app/Services/Business.php delete mode 100644 app/Services/Company.php diff --git a/app/AccountTypes/AccountTypesService.php b/app/AccountTypes/AccountTypesService.php new file mode 100644 index 00000000..711994ee --- /dev/null +++ b/app/AccountTypes/AccountTypesService.php @@ -0,0 +1,6 @@ +fill($data); + } + +} diff --git a/app/AccountTypes/CompanyAccount.php b/app/AccountTypes/CompanyAccount.php new file mode 100644 index 00000000..319a1881 --- /dev/null +++ b/app/AccountTypes/CompanyAccount.php @@ -0,0 +1,18 @@ +fill($data); + } + +} + diff --git a/app/Http/Controllers/API/AccountController.php b/app/Http/Controllers/API/AccountController.php new file mode 100644 index 00000000..e479ae77 --- /dev/null +++ b/app/Http/Controllers/API/AccountController.php @@ -0,0 +1,34 @@ +user() + ->account() + ->with('profile'); + + return AccountResource::make($account); + + } + + public function storeContacts(ContactsRequest $request){ + + } + + public function storeBankAccount(BankAccountRequest $request){ + + } + + public function storeProfile(){ + + } +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/API/AuthController.php similarity index 98% rename from app/Http/Controllers/AuthController.php rename to app/Http/Controllers/API/AuthController.php index 2dc1cf50..1620cde0 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/API/AuthController.php @@ -1,6 +1,6 @@ only(['email','firstname','lastname']); @@ -165,10 +166,11 @@ public function register(RegisterRequest $request){ $data['verification_token'] = rand(10000, 99999); - $client = Client::create($data); + $account = Account::create($request->only(['country_id','account_type'])); - //create account -// $account = new Account() + $data['account_id'] = $account->id; + + $client = Client::create($data); if($email_verification) { diff --git a/app/Http/Requests/API/RegisterRequest.php b/app/Http/Requests/API/RegisterRequest.php index 4fe52ecc..0cd23bc7 100644 --- a/app/Http/Requests/API/RegisterRequest.php +++ b/app/Http/Requests/API/RegisterRequest.php @@ -30,7 +30,7 @@ public function rules() 'lastname' => 'required', 'account_type' => 'required|in:company,business', 'country' => 'required', - 'legalization_number' => 'required_if:is_registered,on' +// 'legalization_number' => 'required_if:is_registered,on' ]; } } diff --git a/app/Http/Requests/BankAccountRequest.php b/app/Http/Requests/BankAccountRequest.php new file mode 100644 index 00000000..2152bed0 --- /dev/null +++ b/app/Http/Requests/BankAccountRequest.php @@ -0,0 +1,30 @@ + + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/ContactsRequest.php b/app/Http/Requests/ContactsRequest.php new file mode 100644 index 00000000..69672844 --- /dev/null +++ b/app/Http/Requests/ContactsRequest.php @@ -0,0 +1,30 @@ + + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Resources/AccountResource.php b/app/Http/Resources/AccountResource.php new file mode 100644 index 00000000..1b341c80 --- /dev/null +++ b/app/Http/Resources/AccountResource.php @@ -0,0 +1,32 @@ + $this->id, + 'bank_account' => $this->bank_account, + 'contacts' => $this->contacts, + 'account_type' => $this->account_type, + 'profile' => $this->profile() + ]; + } + + private function profile() : JsonResource + { + $type = config('services.account.'.$this->account_type.'.resource'); + + return $type::make($this->profile); + } +} diff --git a/app/Http/Resources/BusinessProfileResource.php b/app/Http/Resources/BusinessProfileResource.php new file mode 100644 index 00000000..117316bf --- /dev/null +++ b/app/Http/Resources/BusinessProfileResource.php @@ -0,0 +1,19 @@ + 'array', diff --git a/app/Services/AccountTypesService.php b/app/Services/AccountTypesService.php deleted file mode 100644 index 121cf2ee..00000000 --- a/app/Services/AccountTypesService.php +++ /dev/null @@ -1,6 +0,0 @@ - [ - 'business' => App\Services\Business::class, - 'company' => App\Services\Company::class, + 'business' => [ + 'class' => App\AccountTypes\BusinessAccount::class, + 'resources' => App\Http\Resources\BusinessProfileResource::class + ], + 'company' => [ + 'class' => App\AccountTypes\CompanyAccount::class, + 'resources' => App\Http\Resources\CompanyProfileResource::class + ] ] ]; diff --git a/routes/api.php b/routes/api.php index 894179af..793f0ac7 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,8 +1,7 @@ group(function () { + /** + * Client endpoints + */ Route::get('/client', [AuthController::class, 'client']); Route::post('/logout', [AuthController::class, 'logout']); Route::post('/update-client', [AuthController::class, 'updateClient']); + /** + * Account endpoints + */ + Route::group(['prefix' => 'account'],function () { + Route::get('/',[AccountController::class, 'account']); + Route::put('contacts',[AccountController::class,'storeContacts']); + Route::put('bank',[AccountController::class,'storeBankAccount']); + }); + });