Merge branch 'master' into 199-user-registration-api

# Conflicts:
#	routes/api.php
This commit is contained in:
weichien00
2021-06-25 13:00:07 +08:00
60 changed files with 1984 additions and 4 deletions
@@ -0,0 +1,79 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Address',
'message' => 'You have successfully created a new Address'
];
}
/** @var CanCreateAddress */
private $canCreateAddress;
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesAddress */
private $createsAddress;
/**
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompany $fetchesCompany
* @param CreatesAddress $createsAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesAddress $createsAddress)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompany = $fetchesCompany;
$this->createsAddress = $createsAddress;
}
/**
* @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 AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
$this->canCreateAddress->passes($object);
$query = $this->createsAddress->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object);
return $this->resourceResponse(new AddressResource($query));
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\DeletesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanDeleteAddress;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Deleted Address',
'message' => 'You have successfully deleted a Address'
];
}
/** @var CanDeleteAddress */
private $canDeleteAddress;
/** @var DeletesAddress */
private $deletesAddress;
/** @var FetchesAddress */
private $fetchesAddress;
/**
* DeleteAddressControllersLogic constructor.
* @param CanDeleteAddress $canDeleteAddress
* @param DeletesAddress $deletesAddress
* @param FetchesAddress $fetchesAddress
*/
public function __construct(CanDeleteAddress $canDeleteAddress, DeletesAddress $deletesAddress, FetchesAddress $fetchesAddress)
{
$this->canDeleteAddress = $canDeleteAddress;
$this->deletesAddress = $deletesAddress;
$this->fetchesAddress = $fetchesAddress;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canDeleteAddress->passes();
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->deletesAddress->execute($query);
return $this->response([]);
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanFetchAddress;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Address',
'message' => 'You have successfully retrieved a Address'
];
}
/** @var CanFetchAddress */
private $canFetchAddress;
/** @var FetchesAddress */
private $fetchesAddress;
/**
* FetchAddressControllersLogic constructor.
* @param CanFetchAddress $canFetchAddress
* @param FetchesAddress $fetchesAddress
*/
public function __construct(CanFetchAddress $canFetchAddress, FetchesAddress $fetchesAddress)
{
$this->canFetchAddress = $canFetchAddress;
$this->fetchesAddress = $fetchesAddress;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canFetchAddress->passes();
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\ListsAddresses;
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAddressesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Addresses',
'message' => 'You have successfully retrieved a list of Addresses'
];
}
/** @var CanListAddresses */
private $canListAddresses;
/** @var ListsAddresses */
private $listsAddresses;
/**
* ListAddressesLogic constructor.
* @param CanListAddresses $canListAddresses
* @param ListsAddresses $listsAddresses
*/
public function __construct(CanListAddresses $canListAddresses, ListsAddresses $listsAddresses)
{
$this->canListAddresses = $canListAddresses;
$this->listsAddresses = $listsAddresses;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListAddresses->passes();
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
return $this->collectionResponse(AddressResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\ListsAddresses;
use App\Classes\Modules\Addresses\Services\ListsDistricts;
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
use App\Http\Resources\AddressResource;
use App\Http\Resources\DistrictResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListDistrictsLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Addresses',
'message' => 'You have successfully retrieved a list of Addresses'
];
}
/** @var ListsDistricts */
private $listDistricts;
/**
* ListDistrictsLogic constructor.
* @param ListsDistricts $listDistricts
*/
public function __construct(ListsDistricts $listDistricts)
{
$this->listDistricts = $listDistricts;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$query = $this->listDistricts->execute($this->listDistricts->deserializeFilters($request->input('filters')));
return $this->collectionResponse(DistrictResource::collection($query));
}
}
@@ -0,0 +1,70 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Http\Resources\AddressResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\Services\ResetsAddressesDefault;
use App\Classes\Modules\Addresses\Services\SetsAddressToDefault;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SetAddressToDefaultLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Updated Address',
'message' => 'You have successfully set the default Address'
];
}
/** @var ResetsAddressesDefault */
private $resetsAddressesDefault;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var SetsAddressToDefault*/
private $setsAddressToDefault;
/**
* SetAddressToDefaultLogic constructor.
* @param ResetsAddressesDefault $resetsAddressesDefault
* @param FetchesAddress $fetchesAddress
* @param SetsAddressToDefault $setsAddressToDefault
*/
public function __construct(ResetsAddressesDefault $resetsAddressesDefault, FetchesAddress $fetchesAddress, SetsAddressToDefault $setsAddressToDefault)
{
$this->resetsAddressesDefault = $resetsAddressesDefault;
$this->fetchesAddress = $fetchesAddress;
$this->setsAddressToDefault = $setsAddressToDefault;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
/** @var Address $address */
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->resetsAddressesDefault->execute($address);
return $this->resourceResponse(new AddressResource($this->setsAddressToDefault->execute($address)));
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\UpdatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateAddressLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Address',
'message' => 'You have successfully updated the Address'
];
}
/** @var CanUpdateAddress */
private $canUpdateAddress;
/** @var UpdatesAddress */
private $updatesAddress;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var FetchesDistrict */
private $fetchesDistrict;
/**
* UpdateAddressLogic constructor.
* @param CanUpdateAddress $canUpdateAddress
* @param UpdatesAddress $updatesAddress
* @param FetchesAddress $fetchesAddress
* @param FetchesDistrict $fetchesDistrict
*/
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict)
{
$this->canUpdateAddress = $canUpdateAddress;
$this->updatesAddress = $updatesAddress;
$this->fetchesAddress = $fetchesAddress;
$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 AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
//$object = new AddressObject($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->canUpdateAddress->passes($object);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->updatesAddress->execute($query, $object);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
}
@@ -0,0 +1,96 @@
<?php
namespace App\Classes\Modules\Addresses\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class AddressObject 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;
/**
* AddressObject 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\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
use App\Models\Company;
class CreatesAddress extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param AddressObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $company, AddressObject $object) {
$model = new Address();
$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->addresses(), $model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Address;
class DeletesAddress extends AbstractDeleteRecord
{
/**
* @param Address $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Address $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Address;
class FetchesAddress extends AbstractFetchRecord
{
/** @var Address */
private $repository;
/**
* FetchesAddress constructor.
* @param Address $repository
*/
public function __construct(Address $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use App\Models\District;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Address;
class FetchesDistrict extends AbstractFetchRecord
{
/** @var District */
private $repository;
/**
* FetchesDistrict constructor.
* @param District $repository
*/
public function __construct(District $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Address;
class ListsAddresses extends AbstractListRecord
{
/** @var Address */
private $repository;
/**
* ListsAddresses constructor.
* @param Address $repository
*/
public function __construct(Address $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use App\Models\District;
use Illuminate\Database\Eloquent\Builder;
class ListsDistricts extends AbstractListRecord
{
/** @var District */
private $repository;
/**
* ListsDistricts constructor.
* @param District $repository
*/
public function __construct(District $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Address;
class ResetsAddressesDefault extends AbstractUpdateRecord
{
/**
* @param Address $address
* @return void
*/
public function execute(Address $address)
{
$address->company->addresses()->update(['billing' => false]);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Address;
class SetsAddressToDefault extends AbstractUpdateRecord
{
/**
* @param Address $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Address $model)
{
$model->billing = true;
return $this->handler($model);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
class UpdatesAddress extends AbstractUpdateRecord
{
/**
* @param Address $model
* @param AddressObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Address $model, AddressObject $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\Addresses\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Standards\Validators\AddressValidation;
class CanCreateAddress extends AbstractRule
{
/** @var AddressValidation */
private $addressValidation;
/**
* CanCreateAddress constructor.
* @param AddressValidation $addressValidation
*/
public function __construct(AddressValidation $addressValidation)
{
$this->addressValidation = $addressValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AddressObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->addressValidation->validate($object);
}
/**
* @param AddressObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Addresses\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
class CanDeleteAddress extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Addresses\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
class CanFetchAddress extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Addresses\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
class CanListAddresses extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AddressObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Addresses\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Standards\Validators\AddressValidation;
class CanUpdateAddress extends AbstractRule
{
/** @var AddressValidation */
private $addressValidation;
/**
* CanUpdateAddress constructor.
* @param AddressValidation $addressValidation
*/
public function __construct(AddressValidation $addressValidation)
{
$this->addressValidation = $addressValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AddressObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->addressValidation->validate($object);
}
/**
* @param AddressObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,42 @@
<?php
namespace App\Classes\Modules\Addresses\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
class AddressValidation extends AbstractValidation
{
/**
* @param AddressObject $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\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\CreateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateAddressController
{
/**
* @param Request $request
* @param CreateAddressLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\DeleteAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteAddressController
{
/**
* @param Request $request
* @param DeleteAddressLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\FetchAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchAddressController
{
/**
* @param Request $request
* @param FetchAddressLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\ListAddressesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAddressesController
{
/**
* @param Request $request
* @param ListAddressesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListAddressesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\ListDistrictsLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListDistrictsController
{
/**
* @param Request $request
* @param ListDistrictsLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListDistrictsLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\SetAddressToDefaultLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SetAddressToDefaultController
{
/**
* @param Request $request
* @param SetAddressToDefaultLogic $logic
* @return JsonResponse
*/
public function update(Request $request, SetAddressToDefaultLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\UpdateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateAddressController
{
/**
* @param Request $request
* @param UpdateAddressLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\CreateServiceTypeLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateServiceTypeController
{
/**
* @param Request $request
* @param CreateServiceTypeLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateServiceTypeLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\DeleteServiceTypeLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteServiceTypeController
{
/**
* @param Request $request
* @param DeleteServiceTypeLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteServiceTypeLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\FetchServiceTypeLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchServiceTypeController
{
/**
* @param Request $request
* @param FetchServiceTypeLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchServiceTypeLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\ListServiceTypesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListServiceTypesController
{
/**
* @param Request $request
* @param ListServiceTypesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListServiceTypesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\UpdateServiceTypeLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateServiceTypeController
{
/**
* @param Request $request
* @param UpdateServiceTypeLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateServiceTypeLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\ServiceTypes;
use App\Classes\Modules\ServiceTypes\ControllersLogic\UpdateServiceTypeStatusLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateServiceTypeStatusController
{
/**
* @param Request $request
* @param UpdateServiceTypeStatusLogic $logic
* @return JsonResponse
*/
public function activate(Request $request, UpdateServiceTypeStatusLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}
+61
View File
@@ -0,0 +1,61 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class Address
* @package App\Models
*
* @property \App\Models\Country country_id
* @property \App\Models\Company company_id
* @property \App\Models\State state_id
* @property \App\Models\District district_id
* @property string postcode
* @property string street_one
* @property string street_two
* @property integer billing_type
*/
class Address extends AbstractModel
{
use SoftDeletes;
protected $table = 'addresses';
protected $dates = ['deleted_at'];
/**
* @return BelongsTo
*/
public function country(): BelongsTo
{
return $this->BelongsTo(Country::class, 'country_id', 'id');
}
/**
* @return BelongsTo
*/
public function company(): BelongsTo
{
return $this->BelongsTo(Company::class, 'company_id', 'id');
}
/**
* @return BelongsTo
*/
public function state(): BelongsTo
{
return $this->BelongsTo(State::class, 'state_id', 'id');
}
/**
* @return BelongsTo
*/
public function district(): BelongsTo
{
return $this->BelongsTo(District::class, 'district_id', 'id');
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class Country
* @package App\Models
*
* @property string name
* @property string short_code
* @property string phone_code
*/
class Country extends AbstractModel
{
use SoftDeletes;
protected $table = 'countries';
protected $dates = ['deleted_at'];
protected $fillable = ['name', 'short_code', 'phone_code'];
/**
* @return HasMany
*/
public function currencies(): HasMany
{
return $this->HasMany(Currency::class, 'country_id', 'id');
}
}
+41
View File
@@ -0,0 +1,41 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class District
* @package App\Models
*
* @property \App\Models\Country country_id
* @property \App\Models\State state_id
* @property string name
* @property string postcode
*/
class District extends AbstractModel
{
use SoftDeletes;
protected $table = 'districts';
protected $dates = ['deleted_at'];
/**
* @return BelongsTo
*/
public function country(): BelongsTo
{
return $this->belongsTo(Country::class, 'country_id', 'id');
}
/**
* @return BelongsTo
**/
public function state(): BelongsTo
{
return $this->BelongsTo(State::class, 'state_id', 'id');
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class State
* @package App\Models
*
* @property \App\Models\Country country_id
* @property string name
*/
class State extends AbstractModel
{
use SoftDeletes;
protected $table = 'states';
protected $dates = ['deleted_at'];
/**
* @return HasOne
*/
public function country(): HasOne
{
return $this->hasOne(Country::class, 'country_id', 'id');
}
}
+5 -1
View File
@@ -39,7 +39,11 @@
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"scripts": {
"post-autoload-dump": [
+20
View File
@@ -0,0 +1,20 @@
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use Faker\Generator as Faker;
$factory->define(App\Models\Address::class, function (Faker $faker) {
return [
'company_id' => $faker->numberBetween(1, 30),
'street_one' => $faker->streetAddress,
'street_two' => $faker->streetAddress,
'city' => $faker->city,
'state' => $faker->state,
'post_code' => $faker->postcode,
'country' => $faker->country,
'default' => 1,
'billing' => 1
];
});
@@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCountriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('countries', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->string('short_code')->unique();
$table->string('phone_code')->unique();
$table->softDeletes();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('countries');
}
}
@@ -0,0 +1,38 @@
<?php
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStatesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('states', function (Blueprint $table) {
$table->id();
$table->foreignId('country_id')->unsigned();
$table->string('name');
$table->integer('status')->default(ApprovalStatus::APPROVED);
$table->softDeletes();
$table->timestamps();
$table->foreign('country_id')->references('id')->on('countries');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('states');
}
}
@@ -0,0 +1,41 @@
<?php
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDistrictsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('districts', function (Blueprint $table) {
$table->id();
$table->foreignId('country_id')->unsigned();
$table->foreignId('state_id')->unsigned();
$table->string('name');
$table->text('postcode');
$table->integer('status')->default(ApprovalStatus::APPROVED);
$table->softDeletes();
$table->timestamps();
$table->foreign('country_id')->references('id')->on('countries');
$table->foreign('state_id')->references('id')->on('states');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('districts');
}
}
@@ -0,0 +1,40 @@
<?php
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCompaniesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('companies', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('reference');
$table->integer('type')->default(CompanyType::COMPANY_BUSINESS);
$table->integer('business_type')->default(BusinessType::IMPORTER);
$table->integer('status')->default(ApprovalStatus::PENDING_SUBMISSION);
$table->softDeletes();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('companies');
}
}
@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAddressesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('addresses', function (Blueprint $table) {
$table->id();
$table->foreignId('company_id')->unsigned();
$table->foreignId('country_id')->unsigned();
$table->foreignId('state_id')->unsigned();
$table->foreignId('district_id')->unsigned();
$table->string('postcode');
$table->string('street_one');
$table->string('street_two')->nullable();
$table->integer('billing')->default(true);
$table->softDeletes();
$table->timestamps();
$table->foreign('country_id')->references('id')->on('countries');
$table->foreign('company_id')->references('id')->on('companies');
$table->foreign('state_id')->references('id')->on('states');
$table->foreign('district_id')->references('id')->on('districts');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('addresses');
}
}
+3 -3
View File
@@ -38,9 +38,6 @@
},
"devDependencies": {
"axios": "^0.21",
"laravel-mix": "^5.0.9",
"lodash": "^4.17.19",
"postcss": "^8.1.14",
"cross-env": "^7.0.2",
"del": "^6.0.0",
"fancy-log": "^1.3.0",
@@ -61,6 +58,9 @@
"gulp-streamify": "^1.0.2",
"gulp-uglify": "^3.0.0",
"gulp-uglify-es": "^2.0.0",
"laravel-mix": "^5.0.9",
"lodash": "^4.17.19",
"postcss": "^8.1.14",
"resolve-url-loader": "^3.1.2"
},
"paths": {
Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+82
View File
@@ -0,0 +1,82 @@
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link rel="stylesheet" type="text/css" href="./swagger-assets/swagger-ui.css" />
<link rel="icon" type="image/png" href="./swagger-assets/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./swagger-assets/favicon-16x16.png" sizes="16x16" />
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body
{
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-assets/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="./swagger-assets/swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "{{ env('APP_URL') }}/swagger/json",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
responseInterceptor:
function (response) {
if (response.obj.data) {
console.log('Response');
console.log(response.obj);
if (response.obj.data.token) {
console.log("Auth Token: " + response.obj.data.token);
const token = response.obj.data.token;
localStorage.setItem("token", token)
}
return response;
}
},
requestInterceptor:
function (request) {
console.log('Request');
console.log(request);
if( request.url.indexOf('login') < 0 && request.url.indexOf('swagger/json') < 0) {
request.headers.Authorization = "Bearer " + localStorage.getItem("token");
}
return request;
},
layout: "StandaloneLayout"
});
// End Swagger UI call region
window.ui = ui;
};
</script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
{"swagger":"2.0","info":{"description":"Shipping Portal to manage parcel","version":"1.0.0","title":"Shipping Portal"},"host":"{{request()->getHttpHost()}}","basePath":"/api","tags":[{"name":"Account","description":"Endpoints related to user module, e.g. login, register."},{"name":"Address","description":"Endpoints related t address module, e.g. create, district."}],"schemes":["http","https"],"paths":{"/account/authentication/login/attempt":{"post":{"tags":["Account"],"produces":["application/json"],"summary":"Logs user into the system","description":"","parameters":[{"name":"username","in":"query","description":"The user name for login","required":true,"type":"string"},{"name":"password","in":"query","description":"The password for login in clear text","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","headers":{"X-Expires-After":{"type":"string","format":"date-time","description":"date in UTC when token expires"},"X-Rate-Limit":{"type":"integer","format":"int32","description":"calls per hour allowed by the user"}},"schema":{"type":"string"}},"400":{"description":"Invalid username/password supplied"}}}},"/account/authentication/logout":{"get":{"tags":["Account"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/address/id/show":{"get":{"tags":["Address"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/address/create":{"post":{"tags":["Address"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/address/update/id":{"put":{"tags":["Address"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/address/delete/id":{"delete":{"tags":["Address"],"summary":"Logs out current logged in user session","description":"","operationId":"logoutUser","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}}},"securityDefinitions":{"Authorization":{"type":"apiKey","name":"api_key","in":"header"},"petstore_auth":{"type":"oauth2","authorizationUrl":"https://petstore.swagger.io/oauth/authorize","flow":"implicit","scopes":{"read:pets":"read your pets","write:pets":"modify pets in your account"}}},"definitions":{"ApiResponse":{"type":"object","properties":{"code":{"type":"integer","format":"int32"},"title":{"type":"string"},"message":{"type":"string"},"payload":{"type":"object"}}}}}
+37
View File
@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'address', 'as' => 'address.', 'namespace' => 'Addresses'], function () {
Route::get('/{id}/show', 'FetchAddressController@fetch')->name('show');
Route::get('/list', 'ListAddressesController@list')->name('list');
Route::get('district/list', 'ListDistrictsController@list')->name('district.list');
Route::post('/create', 'CreateAddressController@create')->name('create');
Route::put('/update/{id}', 'UpdateAddressController@update')->name('update');
Route::put('/{id}/default', 'SetAddressToDefaultController@update')->name('default');
Route::delete('/delete/{id}', 'DeleteAddressController@destroy')->name('delete');
});
Route::group(['prefix' => 'service_type', 'as' => 'service_type.', 'namespace' => 'ServiceTypes'], function () {
Route::get('/{id}/show', 'FetchServiceTypeController@fetch')->name('show');
Route::get('/list', 'ListServiceTypesController@list')->name('list');
Route::post('/create', 'CreateServiceTypeController@create')->name('create');
Route::put('/update/{id}', 'UpdateServiceTypeController@update')->name('update');
Route::put('/status/{id}/{status}', 'UpdateServiceTypeStatusController@activate')->where('status', 'active|inactive')->name('status');
Route::delete('/delete/{id}', 'DeleteServiceTypeController@destroy')->name('delete');
});
+40
View File
@@ -1,5 +1,6 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
/*
@@ -13,6 +14,45 @@ use Illuminate\Support\Facades\Route;
|
*/
//Route::middleware('auth:api')->get('/user', function (Request $request) {
// return $request->user();
//});
Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function () {
require __DIR__ . '/account.php';
// Route::get('/rate/calculate', 'RateCalculateCurrencyController@convert')->name('calculate');
Route::group(['prefix' => 'service', 'as' => 'service.'], function () {
Route::get('countries/list', 'Services\CountriesListController@index')->name('list.countries');
});
Route::group(['middleware' => 'valid.token'], function () {
Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file');
// require __DIR__ . '/company.php';
//
// require __DIR__ . '/document.php';
//
// require __DIR__ . '/segment.php';
//
// require __DIR__ . '/currency.php';
//
// require __DIR__ . '/bank.php';
//
// require __DIR__ . '/booking.php';
//
// require __DIR__ . '/transaction.php';
require __DIR__ . '/address.php';
// require __DIR__ . '/announcement.php';
// require __DIR__ . '/wallet.php';
// require __DIR__ . '/rate.php';
// require __DIR__ . '/receipt.php';
});
});
+9
View File
@@ -16,3 +16,12 @@ use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::group(['prefix' => 'swagger'], function () {
Route::get('/', function () {
return view('swagger.index');
});
Route::get('/json', function () {
return view('swagger.json');
});
});