From 5940fd16b0d41d2a429766045e156aef338e4a7c Mon Sep 17 00:00:00 2001 From: CheeSiong Date: Wed, 2 Dec 2020 17:31:00 +0800 Subject: [PATCH] ListCurrencyLogicClass Currency Converter Logic Class --- .../ControllerLogic/ListCurrencyLogic.php | 65 ++++++++++++++++++ .../RateCalculateCurrencyLogic.php | 66 +++++++++++++++++++ .../Currencies/Services/ListsCurrency.php | 33 ++++++++++ .../Services/RateCalculatesCurrency.php | 15 +++++ .../Standards/Rules/CanListCurrency.php | 45 +++++++++++++ .../Currencies/ListCurrencyController.php | 20 ++++++ .../RateCalculateCurrencyController.php | 19 ++++++ .../RateCalculateCurrencyResource.php | 32 +++++++++ database/seeds/CountriesTableSeeder.php | 8 +++ database/seeds/CurrenciesTableSeeder.php | 10 +++ routes/company_bank.php | 13 ++++ routes/currency.php | 15 +++++ 12 files changed, 341 insertions(+) create mode 100644 app/Classes/Modules/Currencies/ControllerLogic/ListCurrencyLogic.php create mode 100644 app/Classes/Modules/Currencies/ControllerLogic/RateCalculateCurrencyLogic.php create mode 100644 app/Classes/Modules/Currencies/Services/ListsCurrency.php create mode 100644 app/Classes/Modules/Currencies/Services/RateCalculatesCurrency.php create mode 100644 app/Classes/Modules/Currencies/Standards/Rules/CanListCurrency.php create mode 100644 app/Http/Controllers/Currencies/ListCurrencyController.php create mode 100644 app/Http/Controllers/Currencies/RateCalculateCurrencyController.php create mode 100644 app/Http/Resources/RateCalculateCurrencyResource.php create mode 100644 routes/company_bank.php create mode 100644 routes/currency.php diff --git a/app/Classes/Modules/Currencies/ControllerLogic/ListCurrencyLogic.php b/app/Classes/Modules/Currencies/ControllerLogic/ListCurrencyLogic.php new file mode 100644 index 00000000..985dd5e1 --- /dev/null +++ b/app/Classes/Modules/Currencies/ControllerLogic/ListCurrencyLogic.php @@ -0,0 +1,65 @@ + 'Retrieved Currency', + 'message' => 'You have successfully retrieved a list of Currency' + ]; + } + + /** @var CanListCurrency */ + private $canListCurrency; + + /** @var ListsCurrency */ + private $listsCurrency; + + /** + * ListCurrencyLogic constructor. + * @param CanListCurrency $canListCurrency + * @param ListsCurrency $listsCurrency + */ + public function __construct(CanListCurrency $canListCurrency, ListsCurrency $listsCurrency) + { + $this->canListCurrency = $canListCurrency; + $this->listsCurrency = $listsCurrency; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $this->canListCurrency->passes(); + + $query = $this->listsCurrency->execute(); + + return $this->collectionResponse(CurrencyResource::collection($query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/ControllerLogic/RateCalculateCurrencyLogic.php b/app/Classes/Modules/Currencies/ControllerLogic/RateCalculateCurrencyLogic.php new file mode 100644 index 00000000..e9f04c0e --- /dev/null +++ b/app/Classes/Modules/Currencies/ControllerLogic/RateCalculateCurrencyLogic.php @@ -0,0 +1,66 @@ + 'Rate Calculated Currency', + 'message' => 'You have successfully rate calculated a Currency' + ]; + } + + /** @var FetchesCurrency */ + private $fetchesCurrency; + + /** @var RateCalculatesCurrency */ + private $rateCalculatesCurrency; + + /** + * @param CanListStandardSegmentConstants $canListStandardSegmentConstants + * @param FetchesCurrency $fetchesCurrency + * @param RateCalculatesCurrency $rateCalculatesCurrency + */ + public function __construct(FetchesCurrency $fetchesCurrency, RateCalculatesCurrency $rateCalculatesCurrency) + { + $this->fetchesCurrency = $fetchesCurrency; + $this->rateCalculatesCurrency = $rateCalculatesCurrency; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $amount = $request->input('amount'); + $conversion_currency = $this->fetchesCurrency->execute(['id' => $request->input('conversion_currency_id')]); + $convertable_currency = $this->fetchesCurrency->execute(['id' => $request->input('convertable_currency_id')]); + $convert_amount = $this->rateCalculatesCurrency->execute($conversion_currency, $convertable_currency, $amount); + + return $this->resourceResponse(new RateCalculateCurrencyResource($conversion_currency, $convertable_currency, $amount)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/Services/ListsCurrency.php b/app/Classes/Modules/Currencies/Services/ListsCurrency.php new file mode 100644 index 00000000..8f5857c2 --- /dev/null +++ b/app/Classes/Modules/Currencies/Services/ListsCurrency.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/Currencies/Services/RateCalculatesCurrency.php b/app/Classes/Modules/Currencies/Services/RateCalculatesCurrency.php new file mode 100644 index 00000000..07975388 --- /dev/null +++ b/app/Classes/Modules/Currencies/Services/RateCalculatesCurrency.php @@ -0,0 +1,15 @@ +selling / $convertable_currency->selling) * $amount; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/Standards/Rules/CanListCurrency.php b/app/Classes/Modules/Currencies/Standards/Rules/CanListCurrency.php new file mode 100644 index 00000000..6593f566 --- /dev/null +++ b/app/Classes/Modules/Currencies/Standards/Rules/CanListCurrency.php @@ -0,0 +1,45 @@ +can('view currency')) { + return false; + } + + return true; + + } + + /** + * @param CurrencyObject $object + * @return bool + */ + protected function validators($object): bool + { + return true; + + } + + + /** + * @param CurrencyObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Currencies/ListCurrencyController.php b/app/Http/Controllers/Currencies/ListCurrencyController.php new file mode 100644 index 00000000..211590a3 --- /dev/null +++ b/app/Http/Controllers/Currencies/ListCurrencyController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Currencies/RateCalculateCurrencyController.php b/app/Http/Controllers/Currencies/RateCalculateCurrencyController.php new file mode 100644 index 00000000..6d96482b --- /dev/null +++ b/app/Http/Controllers/Currencies/RateCalculateCurrencyController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/RateCalculateCurrencyResource.php b/app/Http/Resources/RateCalculateCurrencyResource.php new file mode 100644 index 00000000..24ae41d4 --- /dev/null +++ b/app/Http/Resources/RateCalculateCurrencyResource.php @@ -0,0 +1,32 @@ +conversion_currency = $conversion_currency; + $this->convertable_currency = $convertable_currency; + $this->convert_amount = $convert_amount; + } + + /** + * Transform the resource into an array. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function toArray($request) + { + return [ + 'conversion_currency' => $this->conversion_currency->id, + 'convertable_currency' => $this->conversion_currency->id, + 'convert_amount' => $this->convert_amount, + ]; + } +} diff --git a/database/seeds/CountriesTableSeeder.php b/database/seeds/CountriesTableSeeder.php index f2548290..655f16d1 100644 --- a/database/seeds/CountriesTableSeeder.php +++ b/database/seeds/CountriesTableSeeder.php @@ -20,6 +20,14 @@ class CountriesTableSeeder extends Seeder 'phone_code' => '60', 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), + ], + [ + 'id' => 2, + 'name' => 'China', + 'short_code' => 'CN', + 'phone_code' => '852', + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), ] ]); } diff --git a/database/seeds/CurrenciesTableSeeder.php b/database/seeds/CurrenciesTableSeeder.php index f969b577..479f43f8 100644 --- a/database/seeds/CurrenciesTableSeeder.php +++ b/database/seeds/CurrenciesTableSeeder.php @@ -22,6 +22,16 @@ class CurrenciesTableSeeder extends Seeder 'selling' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') + ], + [ + 'id' => 2, + 'country_id' => 2, + 'name' => 'Renminbi', + 'short_code' => 'RMB', + 'symbol' => '¥', + 'selling' => 0.62, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s') ] ]); } diff --git a/routes/company_bank.php b/routes/company_bank.php new file mode 100644 index 00000000..daba8486 --- /dev/null +++ b/routes/company_bank.php @@ -0,0 +1,13 @@ + 'CompanyBanks'], function () { + Route::group(['middleware' => 'valid.token'], function () { + Route::group(['prefix' => 'company-bank'], function () { + Route::post('/create', 'CreateCompanyBankController@create')->name('create'); + Route::put('/update/{id}', 'UpdateCompanyBankController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteCompanyBankController@delete')->name('delete'); + }); + }); +}); \ No newline at end of file diff --git a/routes/currency.php b/routes/currency.php new file mode 100644 index 00000000..47752bad --- /dev/null +++ b/routes/currency.php @@ -0,0 +1,15 @@ + 'Currencies'], function () { + Route::group(['middleware' => 'valid.token'], function () { + Route::group(['prefix' => 'currency'], function () { + Route::get('/list', 'ListCurrencyController@list')->name('list'); + Route::get('/rate/calculate', 'RateCalculateCurrencyController@convert')->name('convert'); + Route::post('/create', 'CreateCurrencyController@create')->name('create'); + Route::put('/update-rate/{id}', 'UpdateCurrencyRateController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteCurrencyController@delete')->name('delete'); + }); + }); +}); \ No newline at end of file