diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php index fb36d01f..4d6fdf7c 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php @@ -33,7 +33,7 @@ class CreateCompanyModuleProcessor $company_module_object = new CompanyModuleObject( $company->id, $company->type, - $company->status, + $company->status ); return $this->createsCompanyModule->execute($company_module_object); diff --git a/app/Classes/Modules/OrderSteps/DataTransferObjects/OrderStepsObject.php b/app/Classes/Modules/OrderSteps/DataTransferObjects/OrderStepsObject.php new file mode 100644 index 00000000..ddd99820 --- /dev/null +++ b/app/Classes/Modules/OrderSteps/DataTransferObjects/OrderStepsObject.php @@ -0,0 +1,86 @@ +order_id = $order_id; + $this->appointee_id = $appointee_id; + $this->reference = $reference; + $this->primary = $primary; + + $this->sequence = $sequence; + $this->status = $status; + $this->contract_status = $contract_status; + $this->completed_date = $completed_date; + + $this->id = $id; + } + + public function getOrderId(): int + { + return $this->order_id; + } + + public function getAppointeeId(): int + { + return $this->appointee_id; + } + public function getReference(): string + { + return $this->reference; + } + public function getPrimary(): bool + { + return $this->primary; + } + + public function getSequence(): float + { + return $this->sequence; + } + + public function getStatus(): int + { + return $this->status; + } + + public function getContractStatus(): int + { + return $this->contract_status; + } + + public function getCompletedDate(): Carbon + { + return $this->completed_date ? Carbon::parse($this->completed_date) : Carbon::now(); + } + + public function getId(): int + { + return $this->id; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/OrderSteps/Processors/CreateOrderStepsProcessor.php b/app/Classes/Modules/OrderSteps/Processors/CreateOrderStepsProcessor.php new file mode 100644 index 00000000..57f6ce11 --- /dev/null +++ b/app/Classes/Modules/OrderSteps/Processors/CreateOrderStepsProcessor.php @@ -0,0 +1,31 @@ +canCreateOrder = $canCreateOrder; + $this->createsOrder = $createsOrder; + } + + public function execute(Request $request) { + + $order_object = new OrderObject(); + + $this->canCreateOrder->passes($order_object); + + return $this->createsOrder->execute($request); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/OrderSteps/Processors/UpdateOrderStep.php b/app/Classes/Modules/OrderSteps/Processors/UpdateOrderStep.php new file mode 100644 index 00000000..5ded78f4 --- /dev/null +++ b/app/Classes/Modules/OrderSteps/Processors/UpdateOrderStep.php @@ -0,0 +1,51 @@ +canUpdateCurrentStep = $canUpdateCurrentStep; + $this->updatesOrderCurrentStep = $updatesOrderCurrentStep; + $this->fetchesOrder = $fetchesOrder; + $this->fetchesOrderSteps = $fetchesOrderSteps; + } + + public function execute(int $orderId, string $currentStep){ + + $order_object = new OrderStepsObject($currentStep, 0, $currentStep, 0, 0, OrderStatus::PROCESSING, 0, null); + + $this->canUpdateCurrentStep->passes($order_object); + + $order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]); + + $order_steps = $this->fetchesOrderSteps->execute(['order_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING, 'order_by' => 'sequence', 'per_page' => 1]); + + $order_object->setCurrentStep($currentStep); + + $this->updatesOrderCurrentStep->execute($orderId, $currentStep); + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/OrderSteps/Services/FetchesOrderSteps.php b/app/Classes/Modules/OrderSteps/Services/FetchesOrderSteps.php new file mode 100644 index 00000000..50d506d2 --- /dev/null +++ b/app/Classes/Modules/OrderSteps/Services/FetchesOrderSteps.php @@ -0,0 +1,32 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/OrderSteps/Services/ListsOrderSteps.php b/app/Classes/Modules/OrderSteps/Services/ListsOrderSteps.php new file mode 100644 index 00000000..d156e915 --- /dev/null +++ b/app/Classes/Modules/OrderSteps/Services/ListsOrderSteps.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php index ce34fee1..6d976093 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderLogic.php @@ -3,20 +3,27 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use Illuminate\Http\JsonResponse; +use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; +use App\Classes\Modules\Orders\Services\CreatesOrder; +use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder; +use App\Classes\ValueObjects\Constants\OrderStatus; +use App\Classes\ValueObjects\Constants\OrderSteps; +use App\Classes\ValueObjects\Constants\OrderType; +use App\Http\Resources\OrderResource; use Illuminate\Http\Request; +use Illuminate\Http\JsonResponse; class CreateOrderLogic extends AbstractControllerLogic { - private $createOrderProcessor; + private $canCreateOrder; - private $createOrderStepsProcessor; + private $createsOrder; - public function __construct(CreateOrderProcessor $createOrderProcessor, CreateOrderStepsProcessor $createOrderStepsProcessor) + public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder) { - $this->createOrderProcessor = $createOrderProcessor; - $this->createOrderStepsProcessor = $createOrderStepsProcessor; + $this->canCreateOrder = $canCreateOrder; + $this->createsOrder = $createsOrder; } protected function notification():array { @@ -26,11 +33,13 @@ class CreateOrderLogic extends AbstractControllerLogic ]; } - public function logic(Request $request) { - $this->createOrderProcessor->execute($request); + public function logic(Request $request) : JsonResponse { + $order_object = new OrderObject($request->get('company_module_id'), '', '', OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING); - $this->createOrderStepsProcessor->execute($order_id, $request); + $this->canCreateOrder->passes($order_object); - //return resources JSON + $order = $this->createsOrder->execute($order_object); + + return $this->resourceResponse(new OrderResource($order)); } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php b/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php new file mode 100644 index 00000000..194bcb88 --- /dev/null +++ b/app/Classes/Modules/Orders/DataTransferObjects/OrderObject.php @@ -0,0 +1,74 @@ +company_module_id = $company_module_id; + $this->reference = $reference; + $this->reference_contract = $reference_contract; + $this->type = $type; + $this->status = $status; + $this->current_step = $current_step; + $this->id = $id; + } + + public function getId(): int + { + return $this->id; + } + + public function getCompanyModuleId(): int + { + return $this->company_module_id; + } + + public function getReference(): string + { + return $this->reference; + } + + public function getReferenceContract(): string + { + return $this->reference_contract; + } + + public function getType(): int + { + return $this->type; + } + + public function getStatus(): int + { + return $this->status; + } + + public function getCurrentStep(): string + { + return $this->current_step; + } + + public function setCurrentStep(string $step) + { + $this->current_step = $step; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php b/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php deleted file mode 100644 index 896d7dd8..00000000 --- a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php +++ /dev/null @@ -1,31 +0,0 @@ -canCreateOrder = $canCreateOrder; - $this->createsOrder = $createsOrder; - } - - public function execute(Request $request) { - - //Data object - - - $this->createOrderProcessor->execute($request); - - - //return resources JSON - } -} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Processors/UpdatesOrderCurrentStep.php b/app/Classes/Modules/Orders/Processors/UpdatesOrderCurrentStep.php new file mode 100644 index 00000000..367c1f9b --- /dev/null +++ b/app/Classes/Modules/Orders/Processors/UpdatesOrderCurrentStep.php @@ -0,0 +1,49 @@ +canUpdateCurrentStep = $canUpdateCurrentStep; + $this->updatesCurrentStep = $updatesCurrentStep; + $this->fetchesOrder = $fetchesOrder; + $this->fetchesOrderSteps = $fetchesOrderSteps; + } + + public function execute(int $orderId, string $currentStep){ + + $order_object = new OrderObject(0, '', '', 0, 0, $currentStep, $orderId); + + $this->canUpdateCurrentStep->passes($order_object); + + $order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]); + + $order_steps = $this->fetchesOrderSteps->execute(['order_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING, 'order_by' => 'sequence', 'per_page' => 1]); + + $order_object->setCurrentStep($currentStep); + + $order = $this->updatesCurrentStep->execute($order, $order_object); + + + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CreatesOrder.php b/app/Classes/Modules/Orders/Services/CreatesOrder.php new file mode 100644 index 00000000..6354c479 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CreatesOrder.php @@ -0,0 +1,29 @@ +company_module_id = $object->getCompanyModuleId(); + $model->reference = $object->getReference(); + $model->reference_contract = $object->getReferenceContract(); + $model->type = $object->getType(); + $model->status = $object->getStatus(); + $model->current_step = $object->getCurrentStep(); + + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/Orders/Services/FetchesOrder.php b/app/Classes/Modules/Orders/Services/FetchesOrder.php new file mode 100644 index 00000000..f353e3a9 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/FetchesOrder.php @@ -0,0 +1,32 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/UpdatesCurrentStep.php b/app/Classes/Modules/Orders/Services/UpdatesCurrentStep.php new file mode 100644 index 00000000..0da528b9 --- /dev/null +++ b/app/Classes/Modules/Orders/Services/UpdatesCurrentStep.php @@ -0,0 +1,19 @@ +current_step = $object->getCurrentStep(); + + return $this->handler($model); + + } +} diff --git a/app/Classes/Modules/Orders/Standards/Rules/CanCreateOrder.php b/app/Classes/Modules/Orders/Standards/Rules/CanCreateOrder.php new file mode 100644 index 00000000..c0fee466 --- /dev/null +++ b/app/Classes/Modules/Orders/Standards/Rules/CanCreateOrder.php @@ -0,0 +1,41 @@ +orderValidation = $orderValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + protected function validators($object): bool + { + return $this->orderValidation->validate($object); + } + + /** + * @param CompanyObject $object + * @return bool + */ + protected function criteria($object): bool + { + //Verify account? + //Contract created on Unity + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Standards/Rules/CanUpdateCurrentStep.php b/app/Classes/Modules/Orders/Standards/Rules/CanUpdateCurrentStep.php new file mode 100644 index 00000000..d32abe8a --- /dev/null +++ b/app/Classes/Modules/Orders/Standards/Rules/CanUpdateCurrentStep.php @@ -0,0 +1,39 @@ +orderValidation = $orderValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + protected function validators($object): bool + { + return $this->orderValidation->validate($object); + } + + /** + * @param CompanyObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Standards/Validators/OrderValidation.php b/app/Classes/Modules/Orders/Standards/Validators/OrderValidation.php new file mode 100644 index 00000000..bba459d6 --- /dev/null +++ b/app/Classes/Modules/Orders/Standards/Validators/OrderValidation.php @@ -0,0 +1,49 @@ + $object->getCompanyModuleId(), + 'reference' => $object->getReference(), + 'reference_contract' => $object->getReferenceContract(), + ]; + } + + /** + * @param string $type + * @return array + */ + protected function rules(?string $type = 'POST'): array + { + if ($type == 'POST') { + return [ + 'company_module_id' => 'required', + 'reference' => '', + 'reference_contract' => '' + ]; + } elseif ($type == 'PUT') { + return [ + 'id' => 'required' + ]; + } + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} diff --git a/app/Classes/Modules/Orders/Standards/Validators/UpdateCurrentStepValidation.php b/app/Classes/Modules/Orders/Standards/Validators/UpdateCurrentStepValidation.php new file mode 100644 index 00000000..037bdd52 --- /dev/null +++ b/app/Classes/Modules/Orders/Standards/Validators/UpdateCurrentStepValidation.php @@ -0,0 +1,41 @@ + $object->getId(), + 'current_step' => $object->getCurrentStep(), + ]; + } + + /** + * @param string $type + * @return array + */ + protected function rules(?string $type = 'POST'): array + { + return [ + 'id'=> 'required|numeric', + 'current_step'=> 'required', + ]; + } + + /** + * @return array + */ + protected function messages(): array + { + return []; + } +} diff --git a/app/Classes/ValueObjects/Constants/OrderStatus.php b/app/Classes/ValueObjects/Constants/OrderStatus.php new file mode 100644 index 00000000..ce26a4cc --- /dev/null +++ b/app/Classes/ValueObjects/Constants/OrderStatus.php @@ -0,0 +1,17 @@ + WarehouseUnpackingOrder::class, OrderSteps::ORDER_DELIVERY_STEP => DeliverOrder::class, ]; - +*/ } \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/OrderType.php b/app/Classes/ValueObjects/Constants/OrderType.php new file mode 100644 index 00000000..ca203697 --- /dev/null +++ b/app/Classes/ValueObjects/Constants/OrderType.php @@ -0,0 +1,11 @@ +[], + OrderSteps::PACKING=>[], + OrderSteps::SHIPPING=>[ + OrderSteps::WAREHOUSE_ARRIVAL=>[], + OrderSteps::WAREHOUSE_LOAD_CONTAINER=>[] + ], + OrderSteps::DELIVERY=>[ + OrderSteps::WAREHOUSE_RECEIVING=>[], + OrderSteps::WAREHOUSE_UNLOAD_CONTAINER=>[] + ], + ]; +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/CreateOrderController.php b/app/Http/Controllers/Orders/CreateOrderController.php index bfeb5b22..1e3b7dcc 100644 --- a/app/Http/Controllers/Orders/CreateOrderController.php +++ b/app/Http/Controllers/Orders/CreateOrderController.php @@ -1,8 +1,8 @@ execute($request); + return $logic->execute($request); } } \ No newline at end of file diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php new file mode 100644 index 00000000..e63893ae --- /dev/null +++ b/app/Http/Resources/OrderResource.php @@ -0,0 +1,32 @@ + $this->id, + 'reference' => $this->reference, + 'reference_contract' => (int) $this->type, + 'type' => (int) $this->type, + 'status' => (int) $this->status, + 'company' => new CompanyResource(Company::where('id',$this->companyModule()->first()->company_id)->first()), + + ]; + + } +} diff --git a/app/Http/Resources/OrderStepsResource.php b/app/Http/Resources/OrderStepsResource.php new file mode 100644 index 00000000..bdcdf2e2 --- /dev/null +++ b/app/Http/Resources/OrderStepsResource.php @@ -0,0 +1,52 @@ + $this->id, + 'name' => $this->name, + 'reference' => $this->reference, + 'type' => (int) $this->type, + 'business_type' => (int) $this->business_type, + 'status' => (int) $this->status, + 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), + 'address' => new AddressResource($this->when($this->has('addresses'), $this->addresses->where('billing', true)->first())), + // 'employee' => new UserResource($this->employees->first()), + // 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()), + // 'bookings' => BookingResource::collection($this->whenLoaded('bookings', $this->bookings()->orderBy('id', 'DESC')->get(), [])), + // 'personal_banks' => BankResource::collection($this->banks->where('type', BankAccountType::PERSONAL)), + // 'recipient_banks' => [ + // 'accounts' => BankResource::collection($this->banks->where('type', BankAccountType::EXTERNAL)), + // 'default' => new BankResource($this->banks->where('type', BankAccountType::EXTERNAL)->where('default', true)->first()) + // ], + // 'segments' => SegmentResource::collection($this->segments), + // 'services' => (new FetchesCompanyServices())->getServices($this->servicesConfigurations()), + // 'currencies' => $this->when($this->business_type === BusinessType::CURRENCY_VENDOR, function(){ + // $segment = SegmentConstant::where('reference', SegmentConstants::SUPPLIER_CURRENCIES)->where('detail->id', $this->id)->first(); + // return $segment ? CurrencyResource::collection(Currency::whereIn('id', $segment->detail->currencies)->get()) : []; + // }) + + + ]; + + } +} diff --git a/app/Models/Order.php b/app/Models/Order.php index 70b5c627..d0b2c451 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -2,10 +2,29 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\MorphMany; -class Order extends Model +class Order extends AbstractModel { - use HasFactory; + use SoftDeletes; + + protected $table = 'orders'; + + protected $dates = ['deleted_at']; + + + public function companyModule(): belongsTo + { + return $this->belongsTo(CompanyModule::class, 'company_module_id', 'id'); + } + + public function orderSteps() + { + return $this->hasMany(OrderStep::class, 'order_id'); + } + } diff --git a/database/migrations/2021_07_07_174510_create_orders_table.php b/database/migrations/2021_07_07_174510_create_orders_table.php index a6361e8c..8ea309dc 100644 --- a/database/migrations/2021_07_07_174510_create_orders_table.php +++ b/database/migrations/2021_07_07_174510_create_orders_table.php @@ -20,6 +20,7 @@ class CreateOrdersTable extends Migration $table->string('reference_contract')->comment('Reference no from Unity platform'); $table->integer('type')->default(0)->comment('Order packages can be shipped in shared or dedicated container'); $table->integer('status')->default(0)->comment('Status of this order, e.g. processing, shipping etc.'); + $table->string('current_step')->nullable(false)->comment('Current steps is quick reference for order steps'); $table->softDeletes(); $table->timestamps(); diff --git a/resources/views/swagger/json.blade.php b/resources/views/swagger/json.blade.php index 22d1811a..d50e1d78 100644 --- a/resources/views/swagger/json.blade.php +++ b/resources/views/swagger/json.blade.php @@ -1 +1,768 @@ -{"swagger":"2.0","info":{"description":"Shipping Portal to manage parcel","version":"1.0.0","title":"Shipping Portal"},"host":"{{request()->getHttpHost()}}","basePath":"/api/v1","tags":[{"name":"Account","description":"Endpoints related to user module, e.g. login, register."},{"name":"Address","description":"Endpoints related to address module, e.g. create, district."},{"name":"Company","description":"Endpoints related to company module."}],"schemes":["http","https"],"paths":{"/address/create":{"post":{"tags":["Address"],"produces":["application/json"],"operationId":"createAddress","summary":"Create address","description":"","parameters":[{"name":"district_id","in":"query","description":"District id","required":true,"type":"integer"},{"name":"street_one","in":"query","description":"Address line 1","required":true,"type":"string"},{"name":"street_two","in":"query","description":"Address line 2","required":true,"type":"string"},{"name":"post_code","in":"query","description":"Postcode of the address","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"}},"422":{"description":"Invalid input supplied"}}}},"/address/delete/{id}":{"delete":{"tags":["Address"],"produces":["application/json"],"operationId":"deleteAddress","summary":"Delete address","description":"","parameters":[{"name":"id","in":"path","description":"District id","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"}},"422":{"description":"Invalid input supplied"}}}},"/address/district/list":{"get":{"tags":["Address"],"produces":["application/json"],"operationId":"listDistrictAddress","summary":"List districts","description":"","parameters":[{"name":"filter","in":"query","description":"Filters","required":false,"type":"array","items":{"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"}},"422":{"description":"Invalid input supplied"}}}},"/address/list":{"get":{"tags":["Address"],"produces":["application/json"],"operationId":"listAddress","summary":"List addresses of logged in user","description":"","parameters":[{"name":"filter","in":"query","description":"Filters","required":false,"type":"array","items":{"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"}},"422":{"description":"Invalid input supplied"}}}},"/address/{id}/show":{"get":{"tags":["Address"],"produces":["application/json"],"operationId":"showAddress","summary":"List addresses of logged in user","description":"","parameters":[{"name":"id","in":"path","description":"Address id","required":true,"type":"integer"}],"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"}},"422":{"description":"Invalid input supplied"}}}},"/address/{id}/default":{"put":{"tags":["Address"],"produces":["application/json"],"operationId":"setDefaultAddress","summary":"Set default address","description":"","parameters":[{"name":"id","in":"path","description":"Address id","required":true,"type":"integer"},{"name":"district_id","in":"query","description":"District id","required":true,"type":"integer"},{"name":"street_one","in":"query","description":"Address line 1","required":true,"type":"string"},{"name":"street_two","in":"query","description":"Address line 2","required":true,"type":"string"},{"name":"post_code","in":"query","description":"Postcode of the address","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"}},"422":{"description":"Invalid input supplied"}}}},"/address/update/{id}":{"put":{"tags":["Address"],"produces":["application/json"],"operationId":"setDefaultAddress","summary":"Set default address","description":"","parameters":[{"name":"id","in":"path","description":"Address id","required":true,"type":"integer"}],"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"}},"422":{"description":"Invalid input supplied"}}}},"/account/authentication/login/check_email":{"post":{"tags":["Account"],"summary":"Check if email registered","description":"","operationId":"userList","produces":["application/json","application/xml"],"parameters":[{"name":"email","in":"query","description":"email","required":true,"type":"string"}],"responses":{"default":{"description":"successful operation"}}}},"/account/registration/registration":{"post":{"tags":["Account"],"produces":["application/json"],"summary":"Register user into the system","description":"","parameters":[{"name":"name","in":"query","description":"The name of user","required":true,"type":"string"},{"name":"email","in":"query","description":"The email for login","required":true,"type":"string","format":"email"},{"name":"password","in":"query","description":"The password for login","required":true,"type":"string","format":"password"},{"name":"password_confirmation","in":"query","description":"The confirmation password for login","required":true,"type":"string","format":"password"},{"name":"type","in":"query","description":"Account type - 1:Company 2:Individual","required":true,"default":2,"type":"integer"},{"name":"phone","in":"query","description":"Contact phone number","required":true,"type":"string"},{"name":"contact_email","in":"query","description":"Contact email","required":true,"type":"string"},{"name":"company_name","in":"query","description":"The company name - if not defined , name of user will save as the company name","required":false,"type":"string"},{"name":"wechat_id","in":"query","description":"Contact Wechat id","required":false,"type":"string"},{"name":"files[0]","in":"query","description":"File need to convert to base64 example : 'data:application/pdf;base64,{Base64}';","required":true,"type":"string"},{"name":"identification_no","in":"query","description":"Personal identification no or company registration no","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/login/attempt":{"post":{"tags":["Account"],"produces":["application/json"],"summary":"Logs user into the system","operationId":"aaa","description":"","parameters":[{"name":"email","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"}}}},"/account/user/list":{"get":{"tags":["Account"],"summary":"Logs out current logged in user session","description":"","operationId":"userList","produces":["application/json","application/xml"],"parameters":[],"responses":{"default":{"description":"successful operation"}}}},"/company/list":{"get":{"tags":["Company"],"summary":"List of Companies","description":"","operationId":"companyList","produces":["application/json","application/xml"],"parameters":[{"name":"filter","in":"query","description":"Filters","required":false,"type":"array","items":{"type":"string"}}],"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"}}}}} \ No newline at end of file +{ +"swagger": "2.0", +"info": { +"description": "Shipping Portal to manage parcel", +"version": "1.0.0", +"title": "Shipping Portal" +}, +"host": "{{request()->getHttpHost()}}", +"basePath": "/api/v1", +"tags": [ +{ +"name": "Account", +"description": "Endpoints related to user module, e.g. login, register." +}, +{ +"name": "Address", +"description": "Endpoints related to address module, e.g. create, district." +}, +{ +"name": "Company", +"description": "Endpoints related to company module." +}, +{ +"name": "Order", +"description": "Endpoints related to order module." +} +], +"schemes": [ +"http", +"https" +], +"paths": { +"/order/create": { +"post": { +"tags": [ +"Order" +], +"produces": [ +"application/json" +], +"operationId": "createOrder", +"summary": "Create order", +"description": "", +"parameters": [ +{ +"name": "company_module_id", +"in": "query", +"description": "Company Module ID", +"required": true, +"type": "integer" +}, +{ +"name": "reference", +"in": "query", +"description": "Internal reference id", +"required": true, +"type": "string" +}, +{ +"name": "reference_contract", +"in": "query", +"description": "Unity contract reference id", +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/create": { +"post": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "createAddress", +"summary": "Create address", +"description": "", +"parameters": [ +{ +"name": "district_id", +"in": "query", +"description": "District id", +"required": true, +"type": "integer" +}, +{ +"name": "street_one", +"in": "query", +"description": "Address line 1", +"required": true, +"type": "string" +}, +{ +"name": "street_two", +"in": "query", +"description": "Address line 2", +"required": true, +"type": "string" +}, +{ +"name": "post_code", +"in": "query", +"description": "Postcode of the address", +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/delete/{id}": { +"delete": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "deleteAddress", +"summary": "Delete address", +"description": "", +"parameters": [ +{ +"name": "id", +"in": "path", +"description": "District id", +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/district/list": { +"get": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "listDistrictAddress", +"summary": "List districts", +"description": "", +"parameters": [ +{ +"name": "filter", +"in": "query", +"description": "Filters", +"required": false, +"type": "array", +"items": { +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/list": { +"get": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "listAddress", +"summary": "List addresses of logged in user", +"description": "", +"parameters": [ +{ +"name": "filter", +"in": "query", +"description": "Filters", +"required": false, +"type": "array", +"items": { +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/{id}/show": { +"get": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "showAddress", +"summary": "List addresses of logged in user", +"description": "", +"parameters": [ +{ +"name": "id", +"in": "path", +"description": "Address id", +"required": true, +"type": "integer" +} +], +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/{id}/default": { +"put": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "setDefaultAddress", +"summary": "Set default address", +"description": "", +"parameters": [ +{ +"name": "id", +"in": "path", +"description": "Address id", +"required": true, +"type": "integer" +}, +{ +"name": "district_id", +"in": "query", +"description": "District id", +"required": true, +"type": "integer" +}, +{ +"name": "street_one", +"in": "query", +"description": "Address line 1", +"required": true, +"type": "string" +}, +{ +"name": "street_two", +"in": "query", +"description": "Address line 2", +"required": true, +"type": "string" +}, +{ +"name": "post_code", +"in": "query", +"description": "Postcode of the address", +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/address/update/{id}": { +"put": { +"tags": [ +"Address" +], +"produces": [ +"application/json" +], +"operationId": "updateAddress", +"summary": "Set default address", +"description": "", +"parameters": [ +{ +"name": "id", +"in": "path", +"description": "Address id", +"required": true, +"type": "integer" +} +], +"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" +} +}, +"422": { +"description": "Invalid input supplied" +} +} +} +}, +"/account/authentication/login/check_email": { +"post": { +"tags": [ +"Account" +], +"summary": "Check if email registered", +"description": "", +"operationId": "checkEmail", +"produces": [ +"application/json", +"application/xml" +], +"parameters": [ +{ +"name": "email", +"in": "query", +"description": "email", +"required": true, +"type": "string" +} +], +"responses": { +"default": { +"description": "successful operation" +} +} +} +}, +"/account/registration/registration": { +"post": { +"tags": [ +"Account" +], +"produces": [ +"application/json" +], +"summary": "Register user into the system", +"description": "", +"parameters": [ +{ +"name": "name", +"in": "query", +"description": "The name of user", +"required": true, +"type": "string" +}, +{ +"name": "email", +"in": "query", +"description": "The email for login", +"required": true, +"type": "string", +"format": "email" +}, +{ +"name": "password", +"in": "query", +"description": "The password for login", +"required": true, +"type": "string", +"format": "password" +}, +{ +"name": "password_confirmation", +"in": "query", +"description": "The confirmation password for login", +"required": true, +"type": "string", +"format": "password" +}, +{ +"name": "type", +"in": "query", +"description": "Account type - 1:Company 2:Individual", +"required": true, +"default": 2, +"type": "integer" +}, +{ +"name": "phone", +"in": "query", +"description": "Contact phone number", +"required": true, +"type": "string" +}, +{ +"name": "contact_email", +"in": "query", +"description": "Contact email", +"required": true, +"type": "string" +}, +{ +"name": "company_name", +"in": "query", +"description": "The company name - if not defined , name of user will save as the company name", +"required": false, +"type": "string" +}, +{ +"name": "wechat_id", +"in": "query", +"description": "Contact Wechat id", +"required": false, +"type": "string" +}, +{ +"name": "files[0]", +"in": "query", +"description": "File need to convert to base64 example : 'data:application/pdf;base64,{Base64}';", +"required": true, +"type": "string" +}, +{ +"name": "identification_no", +"in": "query", +"description": "Personal identification no or company registration no", +"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/login/attempt": { +"post": { +"tags": [ +"Account" +], +"produces": [ +"application/json" +], +"summary": "Logs user into the system", +"operationId": "aaa", +"description": "", +"parameters": [ +{ +"name": "email", +"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" +} +} +} +}, +"/account/user/list": { +"get": { +"tags": [ +"Account" +], +"summary": "Logs out current logged in user session", +"description": "", +"operationId": "userList", +"produces": [ +"application/json", +"application/xml" +], +"parameters": [], +"responses": { +"default": { +"description": "successful operation" +} +} +} +}, +"/company/list": { +"get": { +"tags": [ +"Company" +], +"summary": "List of Companies", +"description": "", +"operationId": "companyList", +"produces": [ +"application/json", +"application/xml" +], +"parameters": [ +{ +"name": "filter", +"in": "query", +"description": "Filters", +"required": false, +"type": "array", +"items": { +"type": "string" +} +} +], +"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" +} +} +} +} +} diff --git a/routes/order.php b/routes/order.php index 7ac0a7d6..b9d99f77 100644 --- a/routes/order.php +++ b/routes/order.php @@ -3,11 +3,11 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () { - Route::get('/{id}/show', 'FetchCompanyController@fetch')->name('show'); - Route::get('/list', 'ListCompaniesController@list')->name('list'); - Route::post('/create', 'CreateCompanyController@create')->name('create'); - Route::put('/update/{id}', 'UpdateCompanyController@update')->name('update'); - Route::delete('/delete/{id}', 'DeleteCompanyController@destroy')->name('delete'); + Route::get('/{id}/show', 'FetchOrderController@fetch')->name('show'); + Route::get('/list', 'ListOrdersController@list')->name('list'); + Route::post('/create', 'CreateOrderController@create')->name('create'); + Route::put('/update/{id}', 'UpdateOrderController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteOrderController@destroy')->name('delete'); Route::group(['prefix' => '{id}/step', 'as' => 'step.'], function () {});