List Currency Rate Logic Class

Fetch Currency Rate Logic Class
 Create Currency Rate Logic Class
 Update Currency Rate Logic Class
Currency Rate Converter Rate
This commit is contained in:
CheeSiong
2020-12-30 08:47:12 +08:00
parent 3b333ecfba
commit 1dfb75545f
52 changed files with 1293 additions and 153 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class CurrencyId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('currency_id', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PaymentMethodType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('payment_method_type', $value);
}
}
@@ -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);
@@ -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());
}
@@ -1,99 +0,0 @@
<?php
namespace App\Classes\Modules\Currencies\ControllersLogic;
use App\Http\Resources\CurrencyResource;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
use App\Classes\Modules\Currencies\Standards\Rules\CanUpdateCurrency;
use App\Classes\Modules\Currencies\Services\UpdatesCurrencyRate;
use App\Classes\Modules\Currencies\Services\CreatesCurrencyLog;
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UpdateCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -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;
}
}
@@ -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);
}
@@ -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',
];
}
@@ -0,0 +1,75 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\CurrencyRates\Services\FetchesCurrencyRate;
use App\Classes\Modules\CurrencyRates\Services\CalculatesCurrencyRate;
use App\Http\Resources\CalculateCurrencyRateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CalculateCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,99 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\Currencies\Services\FetchesCurrency;
use App\Classes\Modules\CurrencyRates\Standards\Rules\CanCreateCurrencyRate;
use App\Classes\Modules\CurrencyRates\Services\CreatesCurrencyRate;
use App\Classes\Modules\Currencies\Services\CreatesCurrencyRateLog;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
use App\Http\Resources\CurrencyRateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CreateCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,83 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Http\Resources\CurrencyRateResource;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\CurrencyRates\Services\FetchesCurrencyRate;
use App\Classes\Modules\CurrencyRates\Standards\Rules\CanDeleteCurrencyRate;
use App\Classes\Modules\CurrencyRates\Services\DeletesCurrencyRate;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\SegmentObject;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DeleteCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\CurrencyRates\Services\FetchesCurrencyRate;
use App\Classes\Modules\CurrencyRates\Standards\Rules\CanFetchCurrencyRate;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
use App\Http\Resources\CurrencyRateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,70 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\CurrencyRates\Services\ListsCurrencyRates;
use App\Classes\Modules\CurrencyRates\Standards\Rules\CanListCurrencyRates;
use App\Http\Resources\CurrencyRateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListCurrencyRatesLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,100 @@
<?php
namespace App\Classes\Modules\CurrencyRates\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllersLogic;
use App\Classes\Modules\CurrencyRates\Services\FetchesCurrencyRate;
use App\Classes\Modules\CurrencyRates\Standards\Rules\CanUpdateCurrencyRate;
use App\Classes\Modules\CurrencyRates\Services\UpdatesCurrencyRate;
use App\Classes\Modules\Currencies\Services\CreatesCurrencyRateLog;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
use App\Http\Resources\CurrencyRateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UpdateCurrencyRateLogic extends AbstractControllersLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => '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());
}
}
}
@@ -0,0 +1,58 @@
<?php
namespace App\Classes\Modules\CurrencyRates\DataTransferObjects;
use App\Classes\Interfaces\DataTransferObject;
class CurrencyRateObject implements DataTransferObject
{
/** @var int|null */
private $currency_id;
/** @var string|null */
private $selling;
/** @var string|null */
private $payment_method_type;
/**
* CurrencyRateObject constructor.
* @param int|null $currency_id
* @param string|null $selling
* @param string|null $payment_method_type
*/
public function __construct(
?int $currency_id,
?string $selling,
?string $payment_method_type
)
{
$this->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;
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CurrencyRate;
class CalculatesCurrencyRate extends AbstractUpdateRecord
{
public function execute(CurrencyRate $conversion_currency_rate, CurrencyRate $convertable_currency_rate, $amount)
{
return $convert_amount = ($conversion_currency_rate->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);
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
use App\Models\CurrencyRate;
class CreatesCurrencyRate extends AbstractUpdateRecord
{
/**
* @param CurrencyRateObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CurrencyRateObject $object)
{
$model = new CurrencyRate();
$model->currency_id = $object->getCurrencyId();
$model->selling = $object->getSelling();
$model->payment_method_type = $object->getPaymentMethodType();
return $this->handler($model);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Currencies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CurrencyRate;
use App\Models\CurrencyRateLog;
class CreatesCurrencyRateLog extends AbstractUpdateRecord
{
/**
* @param Currency $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CurrencyRate $object) {
$model = new CurrencyRateLog();
$model->currency_rate_id = $object->id;
$model->selling = $object->selling;
$model->created_by = \Auth::user()->id;
return $this->handler($model);
}
}
@@ -0,0 +1,14 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\CurrencyRate;
class DeletesCurrencyRAte extends AbstractDeleteRecord
{
public function execute(CurrencyRate $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CurrencyRate;
class FetchesCurrencyRate extends AbstractFetchRecord
{
/** @var CurrencyRate */
private $repository;
/**
* FetchesCurrencyRate constructor.
* @param CurrencyRate $repository
*/
public function __construct(CurrencyRate $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CurrencyRate;
class ListsCurrencyRates extends AbstractListRecord
{
/** @var CurrencyRate */
private $repository;
/**
* ListsCurrencyRates constructor.
* @param CurrencyRate $repository
*/
public function __construct(CurrencyRate $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,20 +1,20 @@
<?php
namespace App\Classes\Modules\Currencies\Services;
namespace App\Classes\Modules\CurrencyRates\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Currencies\DataTransferObjects\CurrencyObject;
use App\Models\Currency;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
use App\Models\CurrencyRate;
class UpdatesCurrencyRate extends AbstractUpdateRecord
{
/**
* @param CurrencyObject $object
* @param CurrencyRateObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Currency $model, CurrencyObject $object)
public function execute(CurrencyRate $model, CurrencyRateObject $object)
{
$model->selling = $object->getSelling();
@@ -0,0 +1,55 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\SegmentObject;
use App\Classes\Modules\CurrencyRates\Standards\Validators\CurrencyRateValidation;
class CanCreateCurrencyRate extends AbstractRule
{
/** @var CurrencyRateValidation */
private $currencyRateValidation;
/**
* CanCreateCurrencyRate constructor.
* @param CurrencyRateValidation $CurrencyRateValidation
*/
public function __construct(CurrencyRateValidation $currencyRateValidation)
{
$this->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;
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
class CanDeleteCurrencyRate extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
if (!\Auth::user()->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;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
class CanFetchCurrencyRate extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
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;
}
}
@@ -0,0 +1,45 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
class CanListCurrencyRates extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
if (!\Auth::user()->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;
}
}
@@ -0,0 +1,58 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\SegmentCompanyObject;
use App\Classes\Modules\CurrencyRates\Standards\Validators\CurrencyRateValidation;
class CanUpdateCurrencyRate extends AbstractRule
{
/** @var CurrencyRateValidation */
private $currencyRateValidation;
/**
* CanUpdateCurrencyRate constructor.
* @param CurrencyRateValidation $CurrencyRateValidation
*/
public function __construct(CurrencyRateValidation $currencyRateValidation)
{
$this->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;
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\CurrencyRates\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\CurrencyRates\DataTransferObjects\CurrencyRateObject;
class CurrencyRateValidation extends AbstractValidation
{
/**
* @param CurrencyRateObject $object
* @return array
*/
protected function data($object): array {
$data = [
'currency_id'=> $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 [];
}
}
@@ -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;
-10
View File
@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class CurrencyRate extends Model
{
//
}
-10
View File
@@ -1,10 +0,0 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class CurrencyRateLog extends Model
{
//
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\CurrencyRates\ControllersLogic\CalculateCurrencyRateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CalculateCurrencyRateController
{
/**
* @param Request $request
* @param CalculateCurrencyRateLogic $logic
* @return JsonResponse
*/
public function calculate(Request $request, CalculateCurrencyRateLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\CurrencyRates\ControllersLogic\CreateCurrencyRateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateCurrencyRateController
{
/**
* @param Request $request
* @param CreateCurrencyRateLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateCurrencyRateLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\CurrencyRates\ControllersLogic\DeleteCurrencyRateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteCurrencyRateController
{
/**
* @param Request $request
* @param DeleteCurrencyRateLogic $logic
* @return JsonResponse
*/
public function delete(Request $request, DeleteCurrencyRateLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\CurrencyRates\ControllersLogic\FetchCurrencyRateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchCurrencyRateController
{
/**
* @param Request $request
* @param FetchCurrencyRateLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchCurrencyRateLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\CurrencyRates\ControllersLogic\ListCurrencyRatesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListCurrencyRatesController
{
/**
* @param Request $request
* @param ListCompaniesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListCurrencyRatesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Currencies;
namespace App\Http\Controllers\CurrencyRates;
use App\Classes\Modules\Currencies\ControllersLogic\UpdateCurrencyRateLogic;
use App\Classes\Modules\CurrencyRates\ControllersLogic\UpdateCurrencyRateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -0,0 +1,32 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\CurrencyRate;
class CalculateCurrencyRateResource extends JsonResource
{
public function __construct(CurrencyRate $conversion_currency_rate, CurrencyRate $convertable_currency_rate, $convert_amount)
{
$this->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,
];
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class CurrencyRateResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'currency_id' => $this->currency_id,
'selling' => $this->selling,
'payment_method_type' => $this->payment_method_type
];
}
}
+1 -1
View File
@@ -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()
];
}
}
+10
View File
@@ -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');
}
}
+14
View File
@@ -0,0 +1,14 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class CurrencyRate extends AbstractModel
{
use SoftDeletes;
protected $table = 'currency_rates';
protected $dates = ['deleted_at'];
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Models;
class CurrencyRateLog extends AbstractModel
{
protected $table = 'currency_rate_logs';
}
@@ -20,7 +20,6 @@ class CreateCurrenciesTable extends Migration
$table->string('name')->nullable();
$table->string('short_code')->nullable();
$table->string('symbol')->nullable();
$table->decimal('selling', 20, 5)->nullable();
$table->timestamps();
$table->softDeletes();
});
@@ -1,6 +1,6 @@
<?php
use App\Classes\ValueObjects\Constants\CurrencyType;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
@@ -19,7 +19,7 @@ class CreateCurrencyRatesTable extends Migration
$table->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();
});
@@ -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']);
-2
View File
@@ -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')
]
@@ -0,0 +1,47 @@
<?php
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class CurrencyRatesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('currency_rates')->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')
]
]);
}
}
+2
View File
@@ -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);
@@ -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){
+2
View File
@@ -37,5 +37,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
require __DIR__ . '/currency.php';
require __DIR__ . '/currency_rate.php';
});
});
-1
View File
@@ -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');
});
});