From 1dfb75545f8d3f3fc0771f2f7f91af279eade0b4 Mon Sep 17 00:00:00 2001 From: CheeSiong Date: Wed, 30 Dec 2020 08:47:12 +0800 Subject: [PATCH] List Currency Rate Logic Class Fetch Currency Rate Logic Class Create Currency Rate Logic Class Update Currency Rate Logic Class Currency Rate Converter Rate --- .../General/Eloquent/Filters/CurrencyId.php | 20 ++++ .../Eloquent/Filters/PaymentMethodType.php | 20 ++++ .../ControllersLogic/CreateCurrencyLogic.php | 3 +- .../ControllersLogic/ListCurrencyLogic.php | 1 + .../UpdateCurrencyRateLogic.php | 99 ----------------- .../DataTransferObjects/CurrencyObject.php | 14 +-- .../Currencies/Services/CreatesCurrency.php | 1 - .../Validators/CurrencyValidation.php | 2 - .../CalculateCurrencyRateLogic.php | 75 +++++++++++++ .../CreateCurrencyRateLogic.php | 99 +++++++++++++++++ .../DeleteCurrencyRateLogic.php | 83 +++++++++++++++ .../FetchCurrencyRateLogic.php | 67 ++++++++++++ .../ListCurrencyRatesLogicLogic.php | 70 ++++++++++++ .../UpdateCurrencyRateLogic.php | 100 ++++++++++++++++++ .../CurrencyRateObject.php | 58 ++++++++++ .../Services/CalculatesCurrencyRate.php | 20 ++++ .../Services/CreatesCurrencyRate.php | 26 +++++ .../Services/CreatesCurrencyRateLog.php | 24 +++++ .../Services/DeletesCurrencyRate.php | 14 +++ .../Services/FetchesCurrencyRate.php | 33 ++++++ .../Services/ListsCurrencyRates.php | 33 ++++++ .../Services/UpdatesCurrencyRate.php | 10 +- .../Standards/Rules/CanCreateCurrencyRate.php | 55 ++++++++++ .../Standards/Rules/CanDeleteCurrencyRate.php | 45 ++++++++ .../Standards/Rules/CanFetchCurrencyRate.php | 43 ++++++++ .../Standards/Rules/CanListCurrencyRates.php | 45 ++++++++ .../Standards/Rules/CanUpdateCurrencyRate.php | 58 ++++++++++ .../Validators/CurrencyRateValidation.php | 44 ++++++++ ...CurrencyType.php => PaymentMethodType.php} | 2 +- app/CurrencyRate.php | 10 -- app/CurrencyRateLog.php | 10 -- .../CalculateCurrencyRateController.php | 19 ++++ .../CreateCurrencyRateController.php | 20 ++++ .../DeleteCurrencyRateController.php | 20 ++++ .../FetchCurrencyRateController.php | 20 ++++ .../ListCurrencyRatesController.php | 20 ++++ .../UpdateCompanyController.php} | 4 +- .../CalculateCurrencyRateResource.php | 32 ++++++ app/Http/Resources/CurrencyRateResource.php | 24 +++++ app/Http/Resources/CurrencyResource.php | 2 +- app/Models/Currency.php | 10 ++ app/Models/CurrencyRate.php | 14 +++ app/Models/CurrencyRateLog.php | 10 ++ ...4_10_11_100010_create_currencies_table.php | 1 - ..._28_133342_create_currency_rates_table.php | 4 +- .../seeds/AdminUserPermissionsTableSeeder.php | 5 + database/seeds/CurrenciesTableSeeder.php | 2 - database/seeds/CurrencyRatesTableSeeder.php | 47 ++++++++ database/seeds/DatabaseSeeder.php | 2 + .../accounts/forms/LoginFormComponent.vue | 3 +- routes/api.php | 2 + routes/currency.php | 1 - 52 files changed, 1293 insertions(+), 153 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/CurrencyId.php create mode 100644 app/Classes/General/Eloquent/Filters/PaymentMethodType.php delete mode 100644 app/Classes/Modules/Currencies/ControllersLogic/UpdateCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/CalculateCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/CreateCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/DeleteCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/FetchCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/ListCurrencyRatesLogicLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/ControllersLogic/UpdateCurrencyRateLogic.php create mode 100644 app/Classes/Modules/CurrencyRates/DataTransferObjects/CurrencyRateObject.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/CalculatesCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRateLog.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/DeletesCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/FetchesCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Services/ListsCurrencyRates.php rename app/Classes/Modules/{Currencies => CurrencyRates}/Services/UpdatesCurrencyRate.php (55%) create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Rules/CanCreateCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Rules/CanDeleteCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Rules/CanFetchCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Rules/CanListCurrencyRates.php create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Rules/CanUpdateCurrencyRate.php create mode 100644 app/Classes/Modules/CurrencyRates/Standards/Validators/CurrencyRateValidation.php rename app/Classes/ValueObjects/Constants/{CurrencyType.php => PaymentMethodType.php} (81%) delete mode 100644 app/CurrencyRate.php delete mode 100644 app/CurrencyRateLog.php create mode 100644 app/Http/Controllers/CurrencyRates/CalculateCurrencyRateController.php create mode 100644 app/Http/Controllers/CurrencyRates/CreateCurrencyRateController.php create mode 100644 app/Http/Controllers/CurrencyRates/DeleteCurrencyRateController.php create mode 100644 app/Http/Controllers/CurrencyRates/FetchCurrencyRateController.php create mode 100644 app/Http/Controllers/CurrencyRates/ListCurrencyRatesController.php rename app/Http/Controllers/{Currencies/UpdateCurrencyRateController.php => CurrencyRates/UpdateCompanyController.php} (74%) create mode 100644 app/Http/Resources/CalculateCurrencyRateResource.php create mode 100644 app/Http/Resources/CurrencyRateResource.php create mode 100644 app/Models/CurrencyRate.php create mode 100644 app/Models/CurrencyRateLog.php create mode 100644 database/seeds/CurrencyRatesTableSeeder.php diff --git a/app/Classes/General/Eloquent/Filters/CurrencyId.php b/app/Classes/General/Eloquent/Filters/CurrencyId.php new file mode 100644 index 00000000..a9fba8e8 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/CurrencyId.php @@ -0,0 +1,20 @@ +where('currency_id', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/PaymentMethodType.php b/app/Classes/General/Eloquent/Filters/PaymentMethodType.php new file mode 100644 index 00000000..07350f0c --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/PaymentMethodType.php @@ -0,0 +1,20 @@ +where('payment_method_type', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/ControllersLogic/CreateCurrencyLogic.php b/app/Classes/Modules/Currencies/ControllersLogic/CreateCurrencyLogic.php index 81d7f9f8..06e49e16 100644 --- a/app/Classes/Modules/Currencies/ControllersLogic/CreateCurrencyLogic.php +++ b/app/Classes/Modules/Currencies/ControllersLogic/CreateCurrencyLogic.php @@ -67,8 +67,7 @@ class CreateCurrencyLogic extends AbstractControllersLogic $request->input('country_id'), $request->input('name'), $request->input('short_code'), - $request->input('symbol'), - number_format( (float) $request->input('selling'), 5, '.', '') + $request->input('symbol') ); $this->canCreateCurrency->passes($currency_object); $currency_query = $this->createsCurrency->execute($currency_object); diff --git a/app/Classes/Modules/Currencies/ControllersLogic/ListCurrencyLogic.php b/app/Classes/Modules/Currencies/ControllersLogic/ListCurrencyLogic.php index e0bd11b3..8efab677 100644 --- a/app/Classes/Modules/Currencies/ControllersLogic/ListCurrencyLogic.php +++ b/app/Classes/Modules/Currencies/ControllersLogic/ListCurrencyLogic.php @@ -57,6 +57,7 @@ class ListCurrencyLogic extends AbstractControllersLogic return $this->collectionResponse(CurrencyResource::collection($query)); } catch (\Exception $exception){ + dd($exception); throw new ErrorException($exception->getMessage(), $exception->getCode()); } diff --git a/app/Classes/Modules/Currencies/ControllersLogic/UpdateCurrencyRateLogic.php b/app/Classes/Modules/Currencies/ControllersLogic/UpdateCurrencyRateLogic.php deleted file mode 100644 index 821bce3f..00000000 --- a/app/Classes/Modules/Currencies/ControllersLogic/UpdateCurrencyRateLogic.php +++ /dev/null @@ -1,99 +0,0 @@ - 'Updated Currency Rate', - 'message' => 'You have successfully updated the Currency Rate' - ]; - } - - /** @var CanUpdateCurrency */ - private $canUpdateCurrency; - - /** @var UpdatesCurrencyRate */ - private $updatesCurrencyRate; - - /** @var FetchesCurrency */ - private $fetchesCurrency; - - /** @var CreatesCurrencyLog */ - private $createsCurrencyLog; - - /** - * UpdateStandardSegmentConstantLogic constructor. - * @param CanUpdateCurrency $canUpdateCurrency - * @param UpdatesCurrencyRate $updatesCurrencyRate - * @param CreatesCurrencyLog $createsCurrencyLog - * @param FetchesCurrency $fetchesCurrency - */ - public function __construct( - CanUpdateCurrency $canUpdateCurrency, - UpdatesCurrencyRate $updatesCurrencyRate, - CreatesCurrencyLog $createsCurrencyLog, - FetchesCurrency $fetchesCurrency - ) - { - $this->canUpdateCurrency = $canUpdateCurrency; - $this->updatesCurrencyRate = $updatesCurrencyRate; - $this->createsCurrencyLog = $createsCurrencyLog; - $this->fetchesCurrency = $fetchesCurrency; - } - - /** - * @param Request $request - * @return JsonResponse - * @throws ErrorException - */ - public function logic(Request $request) : JsonResponse - { - try { - DB::beginTransaction(); - - $currency_query = $this->fetchesCurrency->execute(['id' => $request->route('id')]); - - $currency_object = new CurrencyObject( - $currency_query->country_id, - $currency_query->name, - $currency_query->short_code, - $currency_query->symbol, - $request->input('selling', $currency_query->selling) - ); - $this->canUpdateCurrency->passes($currency_object); - $currency_query = $this->updatesCurrencyRate->execute($currency_query, $currency_object); - - $currency_log_query = $this->createsCurrencyLog->execute($currency_query); - - DB::commit(); - - return $this->resourceResponse(new CurrencyResource($currency_query)); - - } catch (\Exception $exception){ - throw new ErrorException($exception->getMessage(), $exception->getCode()); - } - } - -} \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/DataTransferObjects/CurrencyObject.php b/app/Classes/Modules/Currencies/DataTransferObjects/CurrencyObject.php index 66e712b0..78460524 100644 --- a/app/Classes/Modules/Currencies/DataTransferObjects/CurrencyObject.php +++ b/app/Classes/Modules/Currencies/DataTransferObjects/CurrencyObject.php @@ -11,7 +11,6 @@ class CurrencyObject implements DataTransferObject private $name; private $short_code; private $symbol; - private $selling; /** @@ -20,21 +19,18 @@ class CurrencyObject implements DataTransferObject * @param null|string $name * @param null|string $short_code * @param null|string $symbol - * @param float|null $selling */ public function __construct( ?int $country_id, ?string $name, ?string $short_code, - ?string $symbol, - ?float $selling + ?string $symbol ) { $this->country_id = $country_id; $this->name = $name; $this->short_code = $short_code; $this->symbol = $symbol; - $this->selling = $selling; } /** @@ -68,12 +64,4 @@ class CurrencyObject implements DataTransferObject { return $this->symbol; } - - /** - * @return float - */ - public function getSelling(): ?float - { - return $this->selling; - } } \ No newline at end of file diff --git a/app/Classes/Modules/Currencies/Services/CreatesCurrency.php b/app/Classes/Modules/Currencies/Services/CreatesCurrency.php index e2c8f5c1..1f4f9cb6 100644 --- a/app/Classes/Modules/Currencies/Services/CreatesCurrency.php +++ b/app/Classes/Modules/Currencies/Services/CreatesCurrency.php @@ -19,7 +19,6 @@ class CreatesCurrency extends AbstractUpdateRecord $model->name = $object->getName(); $model->short_code = $object->getShortCode(); $model->symbol = $object->getSymbol(); - $model->selling = $object->getSelling(); return $this->handler($model); } diff --git a/app/Classes/Modules/Currencies/Standards/Validators/CurrencyValidation.php b/app/Classes/Modules/Currencies/Standards/Validators/CurrencyValidation.php index e11d468f..15ab0f89 100644 --- a/app/Classes/Modules/Currencies/Standards/Validators/CurrencyValidation.php +++ b/app/Classes/Modules/Currencies/Standards/Validators/CurrencyValidation.php @@ -18,7 +18,6 @@ class CurrencyValidation extends AbstractValidation 'name' => $object->getName(), 'short_code' => $object->getShortCode(), 'symbol' => $object->getSymbol(), - 'selling' => $object->getSelling() ]; } @@ -32,7 +31,6 @@ class CurrencyValidation extends AbstractValidation 'name' => 'required', 'short_code' => 'required', 'short_code' => 'required', - 'selling' => 'required', ]; } diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/CalculateCurrencyRateLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/CalculateCurrencyRateLogic.php new file mode 100644 index 00000000..ed2481fc --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/CalculateCurrencyRateLogic.php @@ -0,0 +1,75 @@ + 'Calculated Currency Rate', + 'message' => 'You have successfully rate calculated a Currency' + ]; + } + + /** @var FetchesCurrencyRate */ + private $fetchesCurrencyRate; + + /** @var CalculatesCurrencyRate */ + private $calculatesCurrencyRate; + + /** + * @param CanListStandardSegmentConstants $canListStandardSegmentConstants + * @param FetchesCurrencyRate $fetchesCurrencyRate + * @param CalculatesCurrencyRate $calculatesCurrencyRate + */ + public function __construct(FetchesCurrencyRate $fetchesCurrencyRate, CalculatesCurrencyRate $calculatesCurrencyRate) + { + $this->fetchesCurrencyRate = $fetchesCurrencyRate; + $this->calculatesCurrencyRate = $calculatesCurrencyRate; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $amount = $request->input('amount'); + $conversion_currency_rate = $this->fetchesCurrencyRate->execute( + [ + 'id' => $request->input('conversion_currency_rate_id'), + ] + ); + $convertable_currency_rate = $this->fetchesCurrencyRate->execute( + [ + 'id' => $request->input('convertable_currency_rate_id') + ] + ); + + $convert_amount = $this->calculatesCurrencyRate->execute($conversion_currency_rate, $convertable_currency_rate, $amount); + + return $this->resourceResponse(new CalculateCurrencyRateResource($conversion_currency_rate, $convertable_currency_rate, $convert_amount)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/CreateCurrencyRateLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/CreateCurrencyRateLogic.php new file mode 100644 index 00000000..999856c1 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/CreateCurrencyRateLogic.php @@ -0,0 +1,99 @@ + 'Created Currency Rate', + 'message' => 'You have successfully created a new Currency Rate' + ]; + } + + /** @var CanCreateCurrencyRate */ + private $canCreateCurrencyRate; + + /** @var CreatesCurrencyRate */ + private $createsCurrencyRate; + + /** @var CreatesCurrencyRateLog */ + private $createsCurrencyRateLog; + + /** @var FetchesCurrency */ + private $fetchesCurrency; + + /** + * CreateCurrencyRateLogic constructor. + * @param CanCreateCurrencyRate $canCreateCurrencyRate + * @param CreatesCurrencyRate $createsCurrencyRate + * @param FetchesCurrency $fetchesCurrency + */ + public function __construct( + CanCreateCurrencyRate $canCreateCurrencyRate, + CreatesCurrencyRate $createsCurrencyRate, + CreatesCurrencyRateLog $createsCurrencyRateLog, + FetchesCurrency $fetchesCurrency + ) + { + $this->canCreateCurrencyRate = $canCreateCurrencyRate; + $this->createsCurrencyRate = $createsCurrencyRate; + $this->createsCurrencyRateLog = $createsCurrencyRateLog; + $this->fetchesCurrency = $fetchesCurrency; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $currency_query = $this->fetchesCurrency->execute([ + 'id' => $request->input('currency_id', 1), + ]); + + $currency_rate_object = new CurrencyRateObject( + $request->input('currency_id'), + number_format( (float) $request->input('selling'), 5, '.', ''), + $request->input('payment_method_type') + ); + + $this->canCreateCurrencyRate->passes($currency_rate_object); + $currency_rate_query = $this->createsCurrencyRate->execute($currency_rate_object); + + $currency_rate_log_query = $this->createsCurrencyRateLog->execute($currency_rate_query); + + DB::commit(); + + return $this->resourceResponse(new CurrencyRateResource($currency_rate_query)); + + } catch (\Exception $exception) { + dd($exception); + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/DeleteCurrencyRateLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/DeleteCurrencyRateLogic.php new file mode 100644 index 00000000..ee6200bc --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/DeleteCurrencyRateLogic.php @@ -0,0 +1,83 @@ + 'Delete Currency Rate', + 'message' => 'You have successfully deleted the Currency Rate' + ]; + } + + /** @var CanDeleteCurrencyRate */ + private $canDeleteCurrencyRate; + + /** @var DeletesCurrencyRate */ + private $deletesCurrencyRate; + + /** @var FetchesCurrencyRate */ + private $fetchesCurrencyRate; + + + /** + * DeleteCurrencyRateRateLogic constructor. + * @param CanDeleteCurrencyRate $canDeleteCurrencyRate + * @param DeletesCurrencyRate $deletesCurrencyRate + * @param FetchesCurrencyRate $fetchesCurrencyRate + */ + public function __construct( + CanDeleteCurrencyRate $canDeleteCurrencyRate, + DeletesCurrencyRate $deletesCurrencyRate, + FetchesCurrencyRate $fetchesCurrencyRate + ) + { + $this->canDeleteCurrencyRate = $canDeleteCurrencyRate; + $this->deletesCurrencyRate = $deletesCurrencyRate; + $this->fetchesCurrencyRate = $fetchesCurrencyRate; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $currency_rate = $this->fetchesCurrencyRate->execute(['id' => $request->route('id')]); + $this->canDeleteCurrencyRate->passes(); + $this->deletesCurrencyRate->execute($currency_rate); + + DB::commit(); + + return $this->resourceResponse(new CurrencyRateResource($currency_rate)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/FetchCurrencyRateLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/FetchCurrencyRateLogic.php new file mode 100644 index 00000000..6dd31699 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/FetchCurrencyRateLogic.php @@ -0,0 +1,67 @@ + 'Retrieved Currency Rate', + 'message' => 'You have successfully retrieved a Currency Rate' + ]; + } + + /** @var CanFetchCurrencyRate */ + private $canFetchCurrencyRate; + + /** @var FetchesCurrencyRate */ + private $fetchesCurrencyRate; + + /** + * FetchCurrencyRateControllersLogic constructor. + * @param CanFetchCurrencyRate $canFetchCurrencyRate + * @param FetchesCurrencyRate $fetchesCurrencyRate + */ + public function __construct(CanFetchCurrencyRate $canFetchCurrencyRate, FetchesCurrencyRate $fetchesCurrencyRate) + { + $this->canFetchCurrencyRate = $canFetchCurrencyRate; + $this->fetchesCurrencyRate = $fetchesCurrencyRate; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + + $this->canFetchCurrencyRate->passes(); + + $query = $this->fetchesCurrencyRate->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new CurrencyRateResource($query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/ListCurrencyRatesLogicLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/ListCurrencyRatesLogicLogic.php new file mode 100644 index 00000000..94c9312c --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/ListCurrencyRatesLogicLogic.php @@ -0,0 +1,70 @@ + 'Retrieved Currency Rate', + 'message' => 'You have successfully retrieved a list of Currency Rate' + ]; + } + + /** @var CanListCurrencyRates */ + private $canListCurrencyRates; + + /** @var ListsCurrencyRates */ + private $listsCurrencyRates; + + /** + * ListCurrencyRatesLogic constructor. + * @param CanListCurrencyRates $canListCurrencyRates + * @param ListsCurrencyRates $listsCurrencyRates + */ + public function __construct(CanListCurrencyRates $canListCurrencyRates, ListsCurrencyRates $listsCurrencyRates) + { + $this->canListCurrencyRates = $canListCurrencyRates; + $this->listsCurrencyRates = $listsCurrencyRates; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + $this->canListCurrencyRates->passes(); + + $query = $this->listsCurrencyRates->execute( + [ + 'currency_id' => $request->input('currency_id'), + 'payment_method_type' => $request->input('payment_method_type') + ] + ); + + return $this->collectionResponse(CurrencyRateResource::collection($query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/ControllersLogic/UpdateCurrencyRateLogic.php b/app/Classes/Modules/CurrencyRates/ControllersLogic/UpdateCurrencyRateLogic.php new file mode 100644 index 00000000..eeb19ccd --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/ControllersLogic/UpdateCurrencyRateLogic.php @@ -0,0 +1,100 @@ + 'Updated Currency Rate', + 'message' => 'You have successfully updated the Currency Rate' + ]; + } + + /** @var CanUpdateCurrencyRate */ + private $canUpdateCurrencyRate; + + /** @var UpdatesCurrencyRate */ + private $updatesCurrencyRate; + + /** @var CreatesCurrencyRateLog */ + private $createsCurrencyRateLog; + + /** @var FetchesCurrencyRate */ + private $fetchesCurrencyRate; + + /** + * UpdateStandardCurrencyRateLogic constructor. + * @param CanUpdateCurrencyRate $canUpdateCurrencyRate + * @param UpdatesCurrencyRate $updatesCurrencyRate + * @param FetchesCurrencyRate $fetchesCurrencyRate + */ + public function __construct( + CanUpdateCurrencyRate $canUpdateCurrencyRate, + UpdatesCurrencyRate $updatesCurrencyRate, + CreatesCurrencyRateLog $createsCurrencyRateLog, + FetchesCurrencyRate $fetchesCurrencyRate + ) + { + $this->canUpdateCurrencyRate = $canUpdateCurrencyRate; + $this->updatesCurrencyRate = $updatesCurrencyRate; + $this->createsCurrencyRateLog = $createsCurrencyRateLog; + $this->fetchesCurrencyRate = $fetchesCurrencyRate; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $currency_rate_query = $this->fetchesCurrencyRate->execute(['id' => $request->route('id')]); + + $currency_object_object = new CurrencyRateObject( + $currency_rate_query->currency_id, + $request->input('selling', $currency_rate_query->selling), + $currency_rate_query->payment_method_type + ); + + $this->canUpdateCurrencyRate->passes($currency_object_object); + $currency_rate_query = $this->updatesCurrencyRate->execute($currency_rate_query, $currency_object_object); + + $currency_rate_log_query = $this->createsCurrencyRateLog->execute($currency_rate_query); + + DB::commit(); + + return $this->resourceResponse(new CurrencyRateResource($currency_rate_query)); + + } catch (\Exception $exception){ + dd($exception); + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/DataTransferObjects/CurrencyRateObject.php b/app/Classes/Modules/CurrencyRates/DataTransferObjects/CurrencyRateObject.php new file mode 100644 index 00000000..bd58dec9 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/DataTransferObjects/CurrencyRateObject.php @@ -0,0 +1,58 @@ +currency_id = $currency_id; + $this->selling = $selling; + $this->payment_method_type = $payment_method_type; + } + + /** + * @return int + */ + public function getCurrencyId(): ?int + { + return $this->currency_id; + } + + /** + * @return string + */ + public function getSelling(): ?string + { + return $this->selling; + } + + /** + * @return string + */ + public function getPaymentMethodType(): ?string + { + return $this->payment_method_type; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Services/CalculatesCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Services/CalculatesCurrencyRate.php new file mode 100644 index 00000000..31396eeb --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/CalculatesCurrencyRate.php @@ -0,0 +1,20 @@ +selling / $convertable_currency_rate->selling) * $amount; + } + + public function execute_rate(CurrencyRate $conversion_currency_rate, CurrencyRate $convertable_currency_rate) + { + return $convert_rate = ($conversion_currency_rate->selling / $convertable_currency_rate->selling); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRate.php new file mode 100644 index 00000000..9de33ca7 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRate.php @@ -0,0 +1,26 @@ +currency_id = $object->getCurrencyId(); + $model->selling = $object->getSelling(); + $model->payment_method_type = $object->getPaymentMethodType(); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRateLog.php b/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRateLog.php new file mode 100644 index 00000000..1d120a05 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/CreatesCurrencyRateLog.php @@ -0,0 +1,24 @@ +currency_rate_id = $object->id; + $model->selling = $object->selling; + $model->created_by = \Auth::user()->id; + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Services/DeletesCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Services/DeletesCurrencyRate.php new file mode 100644 index 00000000..e6167808 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/DeletesCurrencyRate.php @@ -0,0 +1,14 @@ +handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Services/FetchesCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Services/FetchesCurrencyRate.php new file mode 100644 index 00000000..7254387c --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/FetchesCurrencyRate.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/CurrencyRates/Services/ListsCurrencyRates.php b/app/Classes/Modules/CurrencyRates/Services/ListsCurrencyRates.php new file mode 100644 index 00000000..bbb25984 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Services/ListsCurrencyRates.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/UpdatesCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Services/UpdatesCurrencyRate.php similarity index 55% rename from app/Classes/Modules/Currencies/Services/UpdatesCurrencyRate.php rename to app/Classes/Modules/CurrencyRates/Services/UpdatesCurrencyRate.php index ac8704f3..dc252f98 100644 --- a/app/Classes/Modules/Currencies/Services/UpdatesCurrencyRate.php +++ b/app/Classes/Modules/CurrencyRates/Services/UpdatesCurrencyRate.php @@ -1,20 +1,20 @@ selling = $object->getSelling(); diff --git a/app/Classes/Modules/CurrencyRates/Standards/Rules/CanCreateCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanCreateCurrencyRate.php new file mode 100644 index 00000000..56ad219a --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanCreateCurrencyRate.php @@ -0,0 +1,55 @@ +currencyRateValidation = $currencyRateValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + if (!\Auth::user()->can('add currency_rate')) { + return false; + } + + return true; + } + + /** + * @param SegmentObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->currencyRateValidation->validate($object, 'POST'); + } + + /** + * @param SegmentObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Standards/Rules/CanDeleteCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanDeleteCurrencyRate.php new file mode 100644 index 00000000..33e47744 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanDeleteCurrencyRate.php @@ -0,0 +1,45 @@ +can('delete currency_rate')) { + return false; + } + + return true; + + } + + /** + * @param CurrencyRateObject $object + * @return bool + */ + protected function validators($object): bool + { + return true; + + } + + + /** + * @param CurrencyRateObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Standards/Rules/CanFetchCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanFetchCurrencyRate.php new file mode 100644 index 00000000..db751d2f --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanFetchCurrencyRate.php @@ -0,0 +1,43 @@ +can('view currency_rate')) { + return false; + } + + return true; + + } + + /** + * @param SegmentObject $object + * @return bool + */ + protected function validators($object): bool + { + return true; + + } + + + /** + * @param SegmentObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Standards/Rules/CanUpdateCurrencyRate.php b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanUpdateCurrencyRate.php new file mode 100644 index 00000000..8dcb1982 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Standards/Rules/CanUpdateCurrencyRate.php @@ -0,0 +1,58 @@ +currencyRateValidation = $currencyRateValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + + if (!\Auth::user()->can('view currency_rate')) { + return false; + } + + return true; + } + + /** + * @param CurrencyRateValidation $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->currencyRateValidation->validate($object, 'PUT'); + } + + /** + * @param CurrencyRateValidation $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/CurrencyRates/Standards/Validators/CurrencyRateValidation.php b/app/Classes/Modules/CurrencyRates/Standards/Validators/CurrencyRateValidation.php new file mode 100644 index 00000000..3f57ba03 --- /dev/null +++ b/app/Classes/Modules/CurrencyRates/Standards/Validators/CurrencyRateValidation.php @@ -0,0 +1,44 @@ + $object->getCurrencyId(), + 'selling' => $object->getSelling(), + 'payment_method_type' => $object->getPaymentMethodType(), + ]; + + return $data; + } + + /** + * @return array + */ + protected function rules(?string $type = 'POST'): array { + return [ + 'currency_id' => $type == 'POST' ? 'required' : '', + 'selling' => 'required', + 'payment_method_type' => 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/CurrencyType.php b/app/Classes/ValueObjects/Constants/PaymentMethodType.php similarity index 81% rename from app/Classes/ValueObjects/Constants/CurrencyType.php rename to app/Classes/ValueObjects/Constants/PaymentMethodType.php index 58eb2f76..8c95650b 100644 --- a/app/Classes/ValueObjects/Constants/CurrencyType.php +++ b/app/Classes/ValueObjects/Constants/PaymentMethodType.php @@ -2,7 +2,7 @@ namespace App\Classes\ValueObjects\Constants; -final class CurrencyType { +final class PaymentMethodType { public const CASH = 1; public const CHEQUE = 2; public const PA = 3; diff --git a/app/CurrencyRate.php b/app/CurrencyRate.php deleted file mode 100644 index 81b8a98d..00000000 --- a/app/CurrencyRate.php +++ /dev/null @@ -1,10 +0,0 @@ -execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/CurrencyRates/CreateCurrencyRateController.php b/app/Http/Controllers/CurrencyRates/CreateCurrencyRateController.php new file mode 100644 index 00000000..cfe150c5 --- /dev/null +++ b/app/Http/Controllers/CurrencyRates/CreateCurrencyRateController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/CurrencyRates/DeleteCurrencyRateController.php b/app/Http/Controllers/CurrencyRates/DeleteCurrencyRateController.php new file mode 100644 index 00000000..91a5df45 --- /dev/null +++ b/app/Http/Controllers/CurrencyRates/DeleteCurrencyRateController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/CurrencyRates/FetchCurrencyRateController.php b/app/Http/Controllers/CurrencyRates/FetchCurrencyRateController.php new file mode 100644 index 00000000..524ef007 --- /dev/null +++ b/app/Http/Controllers/CurrencyRates/FetchCurrencyRateController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/CurrencyRates/ListCurrencyRatesController.php b/app/Http/Controllers/CurrencyRates/ListCurrencyRatesController.php new file mode 100644 index 00000000..7254bca8 --- /dev/null +++ b/app/Http/Controllers/CurrencyRates/ListCurrencyRatesController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Currencies/UpdateCurrencyRateController.php b/app/Http/Controllers/CurrencyRates/UpdateCompanyController.php similarity index 74% rename from app/Http/Controllers/Currencies/UpdateCurrencyRateController.php rename to app/Http/Controllers/CurrencyRates/UpdateCompanyController.php index 7f04c1c1..a6c6d61c 100644 --- a/app/Http/Controllers/Currencies/UpdateCurrencyRateController.php +++ b/app/Http/Controllers/CurrencyRates/UpdateCompanyController.php @@ -1,8 +1,8 @@ conversion_currency_rate = $conversion_currency_rate; + $this->convertable_currency_rate = $convertable_currency_rate; + $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_rate' => $this->conversion_currency_rate->id, + 'convertable_currency_rate' => $this->conversion_currency_rate->id, + 'convert_amount' => $this->convert_amount, + ]; + } +} diff --git a/app/Http/Resources/CurrencyRateResource.php b/app/Http/Resources/CurrencyRateResource.php new file mode 100644 index 00000000..e94f0f67 --- /dev/null +++ b/app/Http/Resources/CurrencyRateResource.php @@ -0,0 +1,24 @@ + $this->id, + 'currency_id' => $this->currency_id, + 'selling' => $this->selling, + 'payment_method_type' => $this->payment_method_type + ]; + } +} diff --git a/app/Http/Resources/CurrencyResource.php b/app/Http/Resources/CurrencyResource.php index 11ff5361..52454483 100644 --- a/app/Http/Resources/CurrencyResource.php +++ b/app/Http/Resources/CurrencyResource.php @@ -20,7 +20,7 @@ class CurrencyResource extends JsonResource 'name' => $this->name, 'short_code' => $this->short_code, 'symbol' => $this->symbol, - 'selling' => $this->selling + 'currency_rates' => $this->currency_rates()->get() ]; } } diff --git a/app/Models/Currency.php b/app/Models/Currency.php index e29fc0d1..7297a2ce 100644 --- a/app/Models/Currency.php +++ b/app/Models/Currency.php @@ -5,6 +5,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Eloquent\Relations\hasMany; + /** * Class Currency * @package App\Models @@ -31,4 +33,12 @@ class Currency extends AbstractModel { return $this->hasOne(Country::class, 'country_id', 'id'); } + + /** + * @return hasMany + */ + public function currency_rates(): hasMany + { + return $this->hasMany(CurrencyRate::class, 'currency_id'); + } } diff --git a/app/Models/CurrencyRate.php b/app/Models/CurrencyRate.php new file mode 100644 index 00000000..73b42c50 --- /dev/null +++ b/app/Models/CurrencyRate.php @@ -0,0 +1,14 @@ +string('name')->nullable(); $table->string('short_code')->nullable(); $table->string('symbol')->nullable(); - $table->decimal('selling', 20, 5)->nullable(); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/migrations/2020_12_28_133342_create_currency_rates_table.php b/database/migrations/2020_12_28_133342_create_currency_rates_table.php index 37030696..33d733b7 100644 --- a/database/migrations/2020_12_28_133342_create_currency_rates_table.php +++ b/database/migrations/2020_12_28_133342_create_currency_rates_table.php @@ -1,6 +1,6 @@ bigInteger('currency_id')->unsigned()->nullable(); $table->foreign('currency_id')->references('id')->on('currencies')->onDelete('cascade'); $table->decimal('selling', 20, 5)->nullable(); - $table->integer('currency_type')->default(CurrencyType::CASH); + $table->integer('payment_method_type')->default(PaymentMethodType::CASH); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/seeds/AdminUserPermissionsTableSeeder.php b/database/seeds/AdminUserPermissionsTableSeeder.php index 4d747771..0ab43f98 100644 --- a/database/seeds/AdminUserPermissionsTableSeeder.php +++ b/database/seeds/AdminUserPermissionsTableSeeder.php @@ -54,6 +54,11 @@ class AdminUserPermissionsTableSeeder extends Seeder Permission::create(['name' => 'edit currency', 'guard_name' => 'web']); Permission::create(['name' => 'delete currency', 'guard_name' => 'web']); + Permission::create(['name' => 'view currency_rate', 'guard_name' => 'web']); + Permission::create(['name' => 'add currency_rate', 'guard_name' => 'web']); + Permission::create(['name' => 'edit currency_rate', 'guard_name' => 'web']); + Permission::create(['name' => 'delete currency_rate', 'guard_name' => 'web']); + Permission::create(['name' => 'view booking', 'guard_name' => 'web']); Permission::create(['name' => 'add booking', 'guard_name' => 'web']); Permission::create(['name' => 'edit booking', 'guard_name' => 'web']); diff --git a/database/seeds/CurrenciesTableSeeder.php b/database/seeds/CurrenciesTableSeeder.php index 479f43f8..bf87e811 100644 --- a/database/seeds/CurrenciesTableSeeder.php +++ b/database/seeds/CurrenciesTableSeeder.php @@ -19,7 +19,6 @@ class CurrenciesTableSeeder extends Seeder 'name' => 'Ringgit', 'short_code' => 'MYR', 'symbol' => 'RM', - 'selling' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ], @@ -29,7 +28,6 @@ class CurrenciesTableSeeder extends Seeder '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/database/seeds/CurrencyRatesTableSeeder.php b/database/seeds/CurrencyRatesTableSeeder.php new file mode 100644 index 00000000..31202e35 --- /dev/null +++ b/database/seeds/CurrencyRatesTableSeeder.php @@ -0,0 +1,47 @@ +insert([ + [ + 'currency_id' => 1, + 'selling' => 1, + 'payment_method_type' => PaymentMethodType::CASH, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s') + ], + [ + 'currency_id' => 1, + 'selling' => 1.1, + 'payment_method_type' => PaymentMethodType::CHEQUE, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s') + ], + [ + 'currency_id' => 2, + 'selling' => 0.62, + 'payment_method_type' => PaymentMethodType::CASH, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s') + ], + [ + 'currency_id' => 2, + 'selling' => 0.70, + 'payment_method_type' => PaymentMethodType::CHEQUE, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s') + ] + ]); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 441291eb..bcd12e9b 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -16,6 +16,8 @@ class DatabaseSeeder extends Seeder //General $this->call(CountriesTableSeeder::class); $this->call(CurrenciesTableSeeder::class); + $this->call(CurrencyRatesTableSeeder::class); + $this->call(StatesTableSeeder::class); $this->call(DistrictsTableSeeder::class); diff --git a/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue index 25c12827..d233a606 100644 --- a/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue @@ -89,12 +89,13 @@ methods:{ successHandler(response){ localStorage.setItem('user-token', response.payload.access_token); + console.log(response.payload.access_token); this.$store.dispatch('userAuthentication', {access_token: response.payload.access_token}); this.error = ''; this.$store.dispatch('toggleSection', {name: 'loginSuccess', status: true}) setTimeout(function(){ - window.location.href = response.payload.redirect_url; + // window.location.href = response.payload.redirect_url; }, 2000); }, errorHandler(error){ diff --git a/routes/api.php b/routes/api.php index 5be35d8b..3cb80bd8 100644 --- a/routes/api.php +++ b/routes/api.php @@ -37,5 +37,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/currency.php'; + require __DIR__ . '/currency_rate.php'; + }); }); diff --git a/routes/currency.php b/routes/currency.php index 47752bad..6a6fbdab 100644 --- a/routes/currency.php +++ b/routes/currency.php @@ -8,7 +8,6 @@ Route::group(['namespace' => 'Currencies'], 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'); }); });