WIP - Order steps & remaining APIs

This commit is contained in:
Fairuz
2021-07-23 01:16:19 +08:00
parent d87c4f7df4
commit d74d12da96
51 changed files with 2042 additions and 13 deletions
@@ -0,0 +1,79 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\CreatesRemark;
use App\Classes\Modules\Remarks\Services\FetchesDistrict;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Remark',
'message' => 'You have successfully created a new Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesRemark */
private $createsRemark;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompany $fetchesCompany
* @param CreatesRemark $createsRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesRemark $createsRemark)
{
$this->canCreateRemark = $canCreateRemark;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompany = $fetchesCompany;
$this->createsRemark = $createsRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new RemarkObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
$this->canCreateRemark->passes($object);
$query = $this->createsRemark->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object);
return $this->resourceResponse(new RemarkResource($query));
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\DeletesRemark;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanDeleteRemark;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Deleted Remark',
'message' => 'You have successfully deleted a Remark'
];
}
/** @var CanDeleteRemark */
private $canDeleteRemark;
/** @var DeletesRemark */
private $deletesRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/**
* DeleteRemarkControllersLogic constructor.
* @param CanDeleteRemark $canDeleteRemark
* @param DeletesRemark $deletesRemark
* @param FetchesRemark $fetchesRemark
*/
public function __construct(CanDeleteRemark $canDeleteRemark, DeletesRemark $deletesRemark, FetchesRemark $fetchesRemark)
{
$this->canDeleteRemark = $canDeleteRemark;
$this->deletesRemark = $deletesRemark;
$this->fetchesRemark = $fetchesRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canDeleteRemark->passes();
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
$this->deletesRemark->execute($query);
return $this->response([]);
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanFetchRemark;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Remark',
'message' => 'You have successfully retrieved a Remark'
];
}
/** @var CanFetchRemark */
private $canFetchRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/**
* FetchRemarkControllersLogic constructor.
* @param CanFetchRemark $canFetchRemark
* @param FetchesRemark $fetchesRemark
*/
public function __construct(CanFetchRemark $canFetchRemark, FetchesRemark $fetchesRemark)
{
$this->canFetchRemark = $canFetchRemark;
$this->fetchesRemark = $fetchesRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canFetchRemark->passes();
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new RemarkResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\ListsRemarks;
use App\Classes\Modules\Remarks\Standards\Rules\CanListRemarks;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListRemarksLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Remarks',
'message' => 'You have successfully retrieved a list of Remarks'
];
}
/** @var CanListRemarks */
private $canListRemarks;
/** @var ListsRemarks */
private $listsRemarks;
/**
* ListRemarksLogic constructor.
* @param CanListRemarks $canListRemarks
* @param ListsRemarks $listsRemarks
*/
public function __construct(CanListRemarks $canListRemarks, ListsRemarks $listsRemarks)
{
$this->canListRemarks = $canListRemarks;
$this->listsRemarks = $listsRemarks;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListRemarks->passes();
$query = $this->listsRemarks->execute($this->listsRemarks->deserializeFilters($request->input('filters')));
return $this->collectionResponse(RemarkResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\UpdatesRemark;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Services\FetchesDistrict;
use App\Classes\Modules\Remarks\Standards\Rules\CanUpdateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Remark',
'message' => 'You have successfully updated the Remark'
];
}
/** @var CanUpdateRemark */
private $canUpdateRemark;
/** @var UpdatesRemark */
private $updatesRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/** @var FetchesDistrict */
private $fetchesDistrict;
/**
* UpdateRemarkLogic constructor.
* @param CanUpdateRemark $canUpdateRemark
* @param UpdatesRemark $updatesRemark
* @param FetchesRemark $fetchesRemark
* @param FetchesDistrict $fetchesDistrict
*/
public function __construct(CanUpdateRemark $canUpdateRemark, UpdatesRemark $updatesRemark, FetchesRemark $fetchesRemark, FetchesDistrict $fetchesDistrict)
{
$this->canUpdateRemark = $canUpdateRemark;
$this->updatesRemark = $updatesRemark;
$this->fetchesRemark = $fetchesRemark;
$this->fetchesDistrict = $fetchesDistrict;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new RemarkObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
//$object = new RemarkObject($request->input('company_id'), $request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'), $request->input('default'), $request->input('billing'));
$this->canUpdateRemark->passes($object);
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
$query = $this->updatesRemark->execute($query, $object);
return $this->resourceResponse(new RemarkResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,96 @@
<?php
namespace App\Classes\Modules\Remarks\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class RemarkObject implements DataTransferObject
{
/** @var string */
private $streetOne;
/** @var string|null */
private $streetTwo;
/** @var int */
private $countryId;
/** @var int */
private $stateId;
/** @var int */
private $districtId;
/** @var int */
private $postCode;
/**
* RemarkObject constructor.
* @param string $streetOne
* @param null|string $streetTwo
* @param int $countryId
* @param int $stateId
* @param int $districtId
* @param int $postCode
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
$this->countryId = $countryId;
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
}
/**
* @return string
*/
public function getStreetOne(): string
{
return $this->streetOne;
}
/**
* @return null|string
*/
public function getStreetTwo(): ?string
{
return $this->streetTwo;
}
/**
* @return int
*/
public function getCountryId(): int
{
return $this->countryId;
}
/**
* @return int
*/
public function getStateId(): int
{
return $this->stateId;
}
/**
* @return int
*/
public function getDistrictId(): int
{
return $this->districtId;
}
/**
* @return int
*/
public function getPostCode(): int
{
return $this->postCode;
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Company;
class CreatesRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $company, RemarkObject $object) {
$model = new Remark();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->country_id = $object->getCountryId();
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
return $this->handler($company->Remarks(), $model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Remark;
class DeletesRemark extends AbstractDeleteRecord
{
/**
* @param Remark $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Remark $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Remark;
class FetchesRemark extends AbstractFetchRecord
{
/** @var Remark */
private $repository;
/**
* FetchesRemark constructor.
* @param Remark $repository
*/
public function __construct(Remark $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Remark;
class ListsRemarks extends AbstractListRecord
{
/** @var Remark */
private $repository;
/**
* ListsRemarks constructor.
* @param Remark $repository
*/
public function __construct(Remark $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
class UpdatesRemark extends AbstractUpdateRecord
{
/**
* @param Remark $model
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Remark $model, RemarkObject $object) {
//$model->company_id = $object->getCompanyId();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->district_id = $object->getDistrictId();
$model->state_id = $object->getStateId();
$model->postcode = $object->getPostCode();
$model->country_id = $object->getCountryId();
//$model->default = $object->getDefault();
//$model->billing = $object->getBilling();
return $this->handler($model);
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Standards\Validators\RemarkValidation;
class CanCreateRemark extends AbstractRule
{
/** @var RemarkValidation */
private $RemarkValidation;
/**
* CanCreateRemark constructor.
* @param RemarkValidation $RemarkValidation
*/
public function __construct(RemarkValidation $RemarkValidation)
{
$this->RemarkValidation = $RemarkValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->RemarkValidation->validate($object);
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanDeleteRemark extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanFetchRemark extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanListRemarks extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Standards\Validators\RemarkValidation;
class CanUpdateRemark extends AbstractRule
{
/** @var RemarkValidation */
private $RemarkValidation;
/**
* CanUpdateRemark constructor.
* @param RemarkValidation $RemarkValidation
*/
public function __construct(RemarkValidation $RemarkValidation)
{
$this->RemarkValidation = $RemarkValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->RemarkValidation->validate($object);
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class RemarkValidation extends AbstractValidation
{
/**
* @param RemarkObject $object
* @return array
*/
protected function data($object): array {
return [
'street_one' => $object->getStreetOne(),
'street_two' => $object->getStreetTwo(),
'district_id' => $object->getDistrictId()
];
}
/**
* @return array
*/
protected function rules(): array {
return [
'street_one' => 'required',
'district_id' => 'required',
];
}
/**
* @return array
*/
protected function messages(): array {
return [];
}
}
@@ -0,0 +1,79 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\CreatesRemark;
use App\Classes\Modules\Remarks\Services\FetchesDistrict;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Remark',
'message' => 'You have successfully created a new Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesRemark */
private $createsRemark;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompany $fetchesCompany
* @param CreatesRemark $createsRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesRemark $createsRemark)
{
$this->canCreateRemark = $canCreateRemark;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompany = $fetchesCompany;
$this->createsRemark = $createsRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new RemarkObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
$this->canCreateRemark->passes($object);
$query = $this->createsRemark->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object);
return $this->resourceResponse(new RemarkResource($query));
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\DeletesRemark;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanDeleteRemark;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Deleted Remark',
'message' => 'You have successfully deleted a Remark'
];
}
/** @var CanDeleteRemark */
private $canDeleteRemark;
/** @var DeletesRemark */
private $deletesRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/**
* DeleteRemarkControllersLogic constructor.
* @param CanDeleteRemark $canDeleteRemark
* @param DeletesRemark $deletesRemark
* @param FetchesRemark $fetchesRemark
*/
public function __construct(CanDeleteRemark $canDeleteRemark, DeletesRemark $deletesRemark, FetchesRemark $fetchesRemark)
{
$this->canDeleteRemark = $canDeleteRemark;
$this->deletesRemark = $deletesRemark;
$this->fetchesRemark = $fetchesRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canDeleteRemark->passes();
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
$this->deletesRemark->execute($query);
return $this->response([]);
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanFetchRemark;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Remark',
'message' => 'You have successfully retrieved a Remark'
];
}
/** @var CanFetchRemark */
private $canFetchRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/**
* FetchRemarkControllersLogic constructor.
* @param CanFetchRemark $canFetchRemark
* @param FetchesRemark $fetchesRemark
*/
public function __construct(CanFetchRemark $canFetchRemark, FetchesRemark $fetchesRemark)
{
$this->canFetchRemark = $canFetchRemark;
$this->fetchesRemark = $fetchesRemark;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canFetchRemark->passes();
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new RemarkResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\ListsRemarks;
use App\Classes\Modules\Remarks\Standards\Rules\CanListRemarks;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListRemarksLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Remarks',
'message' => 'You have successfully retrieved a list of Remarks'
];
}
/** @var CanListRemarks */
private $canListRemarks;
/** @var ListsRemarks */
private $listsRemarks;
/**
* ListRemarksLogic constructor.
* @param CanListRemarks $canListRemarks
* @param ListsRemarks $listsRemarks
*/
public function __construct(CanListRemarks $canListRemarks, ListsRemarks $listsRemarks)
{
$this->canListRemarks = $canListRemarks;
$this->listsRemarks = $listsRemarks;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListRemarks->passes();
$query = $this->listsRemarks->execute($this->listsRemarks->deserializeFilters($request->input('filters')));
return $this->collectionResponse(RemarkResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\UpdatesRemark;
use App\Classes\Modules\Remarks\Services\FetchesRemark;
use App\Classes\Modules\Remarks\Services\FetchesDistrict;
use App\Classes\Modules\Remarks\Standards\Rules\CanUpdateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Remark',
'message' => 'You have successfully updated the Remark'
];
}
/** @var CanUpdateRemark */
private $canUpdateRemark;
/** @var UpdatesRemark */
private $updatesRemark;
/** @var FetchesRemark */
private $fetchesRemark;
/** @var FetchesDistrict */
private $fetchesDistrict;
/**
* UpdateRemarkLogic constructor.
* @param CanUpdateRemark $canUpdateRemark
* @param UpdatesRemark $updatesRemark
* @param FetchesRemark $fetchesRemark
* @param FetchesDistrict $fetchesDistrict
*/
public function __construct(CanUpdateRemark $canUpdateRemark, UpdatesRemark $updatesRemark, FetchesRemark $fetchesRemark, FetchesDistrict $fetchesDistrict)
{
$this->canUpdateRemark = $canUpdateRemark;
$this->updatesRemark = $updatesRemark;
$this->fetchesRemark = $fetchesRemark;
$this->fetchesDistrict = $fetchesDistrict;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new RemarkObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
//$object = new RemarkObject($request->input('company_id'), $request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'), $request->input('default'), $request->input('billing'));
$this->canUpdateRemark->passes($object);
$query = $this->fetchesRemark->execute(['id' => $request->route('id')]);
$query = $this->updatesRemark->execute($query, $object);
return $this->resourceResponse(new RemarkResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,96 @@
<?php
namespace App\Classes\Modules\Remarks\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class RemarkObject implements DataTransferObject
{
/** @var string */
private $streetOne;
/** @var string|null */
private $streetTwo;
/** @var int */
private $countryId;
/** @var int */
private $stateId;
/** @var int */
private $districtId;
/** @var int */
private $postCode;
/**
* RemarkObject constructor.
* @param string $streetOne
* @param null|string $streetTwo
* @param int $countryId
* @param int $stateId
* @param int $districtId
* @param int $postCode
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
$this->countryId = $countryId;
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
}
/**
* @return string
*/
public function getStreetOne(): string
{
return $this->streetOne;
}
/**
* @return null|string
*/
public function getStreetTwo(): ?string
{
return $this->streetTwo;
}
/**
* @return int
*/
public function getCountryId(): int
{
return $this->countryId;
}
/**
* @return int
*/
public function getStateId(): int
{
return $this->stateId;
}
/**
* @return int
*/
public function getDistrictId(): int
{
return $this->districtId;
}
/**
* @return int
*/
public function getPostCode(): int
{
return $this->postCode;
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Company;
class CreatesRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $company, RemarkObject $object) {
$model = new Remark();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->country_id = $object->getCountryId();
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
return $this->handler($company->Remarks(), $model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Remark;
class DeletesRemark extends AbstractDeleteRecord
{
/**
* @param Remark $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Remark $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Remark;
class FetchesRemark extends AbstractFetchRecord
{
/** @var Remark */
private $repository;
/**
* FetchesRemark constructor.
* @param Remark $repository
*/
public function __construct(Remark $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Remark;
class ListsRemarks extends AbstractListRecord
{
/** @var Remark */
private $repository;
/**
* ListsRemarks constructor.
* @param Remark $repository
*/
public function __construct(Remark $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Remarks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
class UpdatesRemark extends AbstractUpdateRecord
{
/**
* @param Remark $model
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Remark $model, RemarkObject $object) {
//$model->company_id = $object->getCompanyId();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->district_id = $object->getDistrictId();
$model->state_id = $object->getStateId();
$model->postcode = $object->getPostCode();
$model->country_id = $object->getCountryId();
//$model->default = $object->getDefault();
//$model->billing = $object->getBilling();
return $this->handler($model);
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Standards\Validators\RemarkValidation;
class CanCreateRemark extends AbstractRule
{
/** @var RemarkValidation */
private $RemarkValidation;
/**
* CanCreateRemark constructor.
* @param RemarkValidation $RemarkValidation
*/
public function __construct(RemarkValidation $RemarkValidation)
{
$this->RemarkValidation = $RemarkValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->RemarkValidation->validate($object);
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanDeleteRemark extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanFetchRemark extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class CanListRemarks extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Standards\Validators\RemarkValidation;
class CanUpdateRemark extends AbstractRule
{
/** @var RemarkValidation */
private $RemarkValidation;
/**
* CanUpdateRemark constructor.
* @param RemarkValidation $RemarkValidation
*/
public function __construct(RemarkValidation $RemarkValidation)
{
$this->RemarkValidation = $RemarkValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param RemarkObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->RemarkValidation->validate($object);
}
/**
* @param RemarkObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Classes\Modules\Remarks\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
class RemarkValidation extends AbstractValidation
{
/**
* @param RemarkObject $object
* @return array
*/
protected function data($object): array {
return [
'street_one' => $object->getStreetOne(),
'street_two' => $object->getStreetTwo(),
'district_id' => $object->getDistrictId()
];
}
/**
* @return array
*/
protected function rules(): array {
return [
'street_one' => 'required',
'district_id' => 'required',
];
}
/**
* @return array
*/
protected function messages(): array {
return [];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Packages;
use App\Classes\Modules\Packages\ControllersLogic\CreatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreatePackageController
{
/**
* @param Request $request
* @param CreatePackageLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreatePackageLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Packages;
use App\Classes\Modules\Packages\ControllersLogic\DeletePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeletePackageController
{
/**
* @param Request $request
* @param DeletePackageLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeletePackageLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Packages;
use App\Classes\Modules\Packages\ControllersLogic\FetchPackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchPackageController
{
/**
* @param Request $request
* @param FetchPackageLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchPackageLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Packages;
use App\Classes\Modules\Packages\ControllersLogic\ListPackagesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListPackagesController
{
/**
* @param Request $request
* @param ListPackageLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListPackagesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Packages;
use App\Classes\Modules\Packages\ControllersLogic\UpdatePackageLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdatePackageController
{
/**
* @param Request $request
* @param UpdatePackageLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdatePackageLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingList;
use App\Classes\Modules\PackingLists\ControllersLogic\CreatePackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreatePackingListController
{
/**
* @param Request $request
* @param CreatePackingListLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreatePackingListLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\DeletePackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeletePackingListController
{
/**
* @param Request $request
* @param DeletePackingListLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeletePackingListLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\FetchPackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchPackingListController
{
/**
* @param Request $request
* @param FetchPackingListLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchPackingListLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\ListPackingListsLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListPackingListsController
{
/**
* @param Request $request
* @param ListPackingListLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListPackingListsLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\PackingLists;
use App\Classes\Modules\PackingLists\ControllersLogic\UpdatePackingListLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdatePackingListController
{
/**
* @param Request $request
* @param UpdatePackingListLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdatePackingListLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Remark;
namespace App\Http\Controllers\Remarks;
use App\Classes\Modules\Remark\ControllersLogic\CreateRemarkLogic;
use App\Classes\Modules\Remarks\ControllersLogic\CreateRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Remark;
namespace App\Http\Controllers\Remarks;
use App\Classes\Modules\Remark\ControllersLogic\DeleteRemarkLogic;
use App\Classes\Modules\Remarks\ControllersLogic\DeleteRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Remark;
namespace App\Http\Controllers\Remarks;
use App\Classes\Modules\Remark\ControllersLogic\FetchRemarkLogic;
use App\Classes\Modules\Remarks\ControllersLogic\FetchRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Remark;
namespace App\Http\Controllers\Remarks;
use App\Classes\Modules\Remark\ControllersLogic\ListRemarkLogic;
use App\Classes\Modules\Remarks\ControllersLogic\ListRemarksLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -13,7 +13,7 @@ class ListRemarksController
* @param ListRemarkLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListRemarkLogic $logic): JsonResponse {
public function list(Request $request, ListRemarksLogic $logic): JsonResponse {
return $logic->execute($request);
}
@@ -1,8 +1,8 @@
<?php
namespace App\Http\Controllers\Remark;
namespace App\Http\Controllers\Remarks;
use App\Classes\Modules\Remark\ControllersLogic\UpdateRemarkLogic;
use App\Classes\Modules\Remarks\ControllersLogic\UpdateRemarkLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
+10 -2
View File
@@ -40,8 +40,6 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
//
require __DIR__ . '/bank.php';
require __DIR__ . '/order.php';
require __DIR__ . '/currency.php';
require __DIR__ . '/address.php';
@@ -50,6 +48,16 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
require __DIR__ . '/receipt.php';
require __DIR__ . '/order.php';
require __DIR__ . '/package.php';
require __DIR__ . '/remark.php';
require __DIR__ . '/transport.php';
require __DIR__ . '/schedule.php';
// require __DIR__ . '/announcement.php';
// require __DIR__ . '/wallet.php';
// require __DIR__ . '/rate.php';
+19
View File
@@ -0,0 +1,19 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['namespace' => 'Packages', 'as' => 'package.', 'prefix' => 'package'], function () {
Route::get('/{id}/show', 'FetchPackageController@fetch')->name('show');
Route::get('/list', 'ListPackageController@list')->name('list');
Route::post('/create', 'CreatePackageController@create')->name('create');
Route::put('/update/{id}', 'UpdatePackageController@update')->name('update');
Route::delete('/delete/{id}', 'DeletePackageController@delete')->name('delete');
});
Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' => 'packing_list'], function () {
Route::get('/{id}/show', 'FetchPackingListController@fetch')->name('show');
Route::get('/list', 'ListPackingListController@list')->name('list');
Route::post('/create', 'CreatePackingListController@create')->name('create');
Route::put('/update/{id}', 'UpdatePackingListController@update')->name('update');
Route::delete('/delete/{id}', 'DeletePackingListController@delete')->name('delete');
});