Cleann Back-End Warehouse

This commit is contained in:
mhmj
2019-05-23 14:35:14 +08:00
parent a276c8982f
commit 4ff0c448c6
22 changed files with 611 additions and 146 deletions
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\ControllersLogic\Warehouses;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class DeleteWarehouse
{
public function execute(string $id) {
// Get warehouse
$warehouse = Warehouse::findOrFail($id);
if($warehouse->delete()){
// Return single warehouse as a resource
return new WarehouseResource($warehouse);
}
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Classes\ControllersLogic\Warehouses;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class ListWarehouses
{
public function execute(?bool $pagination = false) {
// Get warehouses
$warehouses = $pagination ? Warehouse::all() : Warehouse::orderBy('created_at')->paginate(10) ;
// Return collection of warehouses as a resource
return WarehouseResource::collection($warehouses);
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Classes\ControllersLogic\Warehouses;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
use Illuminate\Http\Request;
class UpdateWarehouse
{
public function execute(Request $request) {
$warehouse = $request->method() === 'PUT' ? Warehouse::findOrFail($request->input('id')) : new Warehouse;
$warehouse->fill($request->except('id'));
if($warehouse->save()){
return new WarehouseResource($warehouse);
}
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Classes\ControllersLogic\Warehouses;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class WarehouseProfile
{
public function execute(string $id) {
// Get warehouse
$warehouse = Warehouse::findOrFail($id);
// Return single warehouse as a resource
return new WarehouseResource($warehouse);
}
}
@@ -0,0 +1,39 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 3:16 PM
*/
namespace App\Classes\Modules\ControllersLogic\Warehouses;
use App\Classes\Modules\Warehouses\DataTransferObjects\WarehouseObject;
use App\Classes\Modules\Warehouses\Services\CreatesWarehouse;
use Illuminate\Http\Request;
class CreateWarehouseLogic
{
/** @var CreatesWarehouse */
private $CreatesWarehouse;
/**
* CreateWarehouseLogic constructor.
* @param CreatesWarehouse $CreatesWarehouse
*/
public function __construct(CreatesWarehouse $CreatesWarehouse)
{
$this->CreatesWarehouse = $CreatesWarehouse;
}
public function execute(Request $request){
$object = new WarehouseObject($request->input('name'), $request->input('email'),$request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'));
return $this->CreatesWarehouse->execute($object);
}
}
@@ -0,0 +1,33 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 10:40 AM
*/
namespace App\Classes\Modules\ControllersLogic\Warehouses;
use App\Classes\Modules\Warehouses\Services\DeletesWarehouse;
class DeleteWarehouseLogic
{
/** @var DeletesWarehouse */
private $DeletesWarehouse;
/**
* DeleteWarehouseLogic constructor.
* @param DeletesWarehouse $DeletesWarehouse
*/
public function __construct(DeletesWarehouse $DeletesWarehouse)
{
$this->DeletesWarehouse = $DeletesWarehouse;
}
public function execute(string $id){
return $this->DeletesWarehouse->execute($id);
}
}
@@ -0,0 +1,34 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 10:13 AM
*/
namespace App\Classes\Modules\ControllersLogic\Warehouses;
use App\Classes\Modules\Warehouses\Services\ListsWarehouse;
class ListWarehouseLogic
{
/** @var ListsWarehouse */
private $ListsWarehouse;
/**
* ListWarehouseLogic constructor.
* @param ListsWarehouse $ListsWarehouse
*/
public function __construct(ListsWarehouse $ListsWarehouse)
{
$this->ListsWarehouse = $ListsWarehouse;
}
public function execute(){
return $this->ListsWarehouse->execute();
}
}
@@ -0,0 +1,31 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 10:32 AM
*/
namespace App\Classes\Modules\ControllersLogic\Warehouses;
use App\Classes\Modules\Warehouses\Services\ProfilesWarehouse;
class ProfileWarehouseLogic
{
/** @var ProfilesWarehouse */
private $ProfilesWarehouse;
/**
* ProfileWarehouseLogic constructor.
* @param ProfilesWarehouse $ProfilesWarehouse
*/
public function __construct(ProfilesWarehouse $ProfilesWarehouse)
{
$this->ProfilesWarehouse = $ProfilesWarehouse;
}
public function execute(String $id){
return $this->ProfilesWarehouse->execute($id);
}
}
@@ -0,0 +1,34 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 9:57 AM
*/
namespace App\Classes\Modules\ControllersLogic\Warehouses;
use App\Classes\Modules\Warehouses\Services\UpdatesWarehouse;
use Illuminate\Http\Request;
class UpdateWarehouseLogic
{
/** @var UpdatesWarehouse */
private $UpdatesWarehouse;
/**
* UpdateWarehouseLogic constructor.
* @param UpdatesWarehouse $UpdatesWarehouse
*/
public function __construct(UpdatesWarehouse $UpdatesWarehouse)
{
$this->UpdatesWarehouse = $UpdatesWarehouse;
}
public function execute(string $id, Request $request){
return $this->UpdatesWarehouse->execute($id,$request);
}
}
@@ -0,0 +1,125 @@
<?php
namespace App\Classes\Modules\Warehouses\DataTransferObjects;
class WarehouseObject
{
/** @var string */
private $name;
/** @var string */
private $email;
/** @var string */
private $street_one;
/** @var string */
private $street_two;
/** @var string */
private $city;
/** @var string */
private $state;
/** @var string */
private $post_code;
/** @var string */
private $country;
/**
* WarehouseObject constructor.
* @param string $name
* @param string $email
* @param string $street_one
* @param string $street_two
* @param string $city
* @param string $state
* @param string $post_code
* @param string $country
*/
public function __construct(string $name, string $email, string $street_one, string $street_two, string $city, string $state, string $post_code, string $country)
{
$this->name = $name;
$this->email = $email;
$this->street_one = $street_one;
$this->street_two = $street_two;
$this->city = $city;
$this->state = $state;
$this->post_code = $post_code;
$this->country = $country;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @return string
*/
public function getStreetOne(): string
{
return $this->street_one;
}
/**
* @return string
*/
public function getStreetTwo(): string
{
return $this->street_two;
}
/**
* @return string
*/
public function getCity(): string
{
return $this->city;
}
/**
* @return string
*/
public function getState(): string
{
return $this->state;
}
/**
* @return string
*/
public function getPostCode(): string
{
return $this->post_code;
}
/**
* @return string
*/
public function getCountry(): string
{
return $this->country;
}
}
@@ -0,0 +1,47 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 3:17 PM
*/
namespace App\Classes\Modules\Warehouses\Services;
use App\Classes\Modules\Warehouses\DataTransferObjects\WarehouseObject;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class CreatesWarehouse
{
/** @var Warehouse */
private $repository;
/**
* CreatesWarehouse constructor.
* @param Warehouse $repository
*/
public function __construct(Warehouse $repository)
{
$this->repository = $repository;
}
public function execute(WarehouseObject $warehouse){
$this->repository->name = $warehouse->getName();
$this->repository->email = $warehouse->getEmail();
$this->repository->street_one = $warehouse->getStreetOne();
$this->repository->street_two = $warehouse->getStreetTwo();
$this->repository->city = $warehouse->getCity();
$this->repository->state = $warehouse->getState();
$this->repository->post_code = $warehouse->getPostCode();
$this->repository->country = $warehouse->getCountry();
$this->repository->save();
return $this->repository;
}
}
@@ -0,0 +1,38 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 10:40 AM
*/
namespace App\Classes\Modules\Warehouses\Services;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class DeletesWarehouse
{
/** @var Warehouse */
private $repository;
/**
* DeletesWarehouse constructor.
* @param Warehouse $repository
*/
public function __construct(Warehouse $repository)
{
$this->repository = $repository;
}
public function execute(string $id){
$warehouse = $this->repository->findOrFail($id);
if($warehouse->delete()){
return new WarehouseResource($warehouse);
}
}
}
@@ -0,0 +1,36 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 10:15 AM
*/
namespace App\Classes\Modules\Warehouses\Services;
use App\Http\Resources\Warehouse as WarehouseResource;
use App\Models\Warehouse;
class ListsWarehouse
{
/** @var Warehouse */
private $repository;
/**
* ListsWarehouse constructor.
* @param Warehouse $repository
*/
public function __construct(Warehouse $repository)
{
$this->repository = $repository;
}
public function execute(){
$warehouses = $this->repository->orderBy('created_at')->paginate(10);
return WarehouseResource::collection($warehouses);
}
}
@@ -0,0 +1,36 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 11:35 AM
*/
namespace App\Classes\Modules\Warehouses\Services;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
class ProfilesWarehouse
{
/** @var Warehouse */
private $repository;
/**
* ProfilesWarehouse constructor.
* @param Warehouse $repository
*/
public function __construct(Warehouse $repository)
{
$this->repository = $repository;
}
public function execute(String $id){
$warehouse = $this->repository->findOrFail($id);
return new WarehouseResource($warehouse);
}
}
@@ -0,0 +1,51 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 9:57 AM
*/
namespace App\Classes\Modules\Warehouses\Services;
use App\Models\Warehouse;
use App\Http\Resources\Warehouse as WarehouseResource;
use Illuminate\Http\Request;
class UpdatesWarehouse
{
/** @var Warehouse */
private $repository;
/**
* UpdatesWarehouse constructor.
* @param Warehouse $repository
*/
public function __construct(Warehouse $repository)
{
$this->repository = $repository;
}
public function execute(string $id, Request $request){
$warehouse = $this->repository->findOrFail($id);
$warehouse->name = $request->input('name');
$warehouse->email = $request->input('email');
$warehouse->street_one = $request->input('street_one');
$warehouse->street_two = $request->input('street_two');
$warehouse->city = $request->input('city');
$warehouse->state = $request->input('state');
$warehouse->post_code = $request->input('post_code');
$warehouse->country = $request->input('country');
if($warehouse->save()){
return new WarehouseResource($warehouse);
}
}
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 3:14 PM
*/
namespace App\Http\Controllers\Warehouses;
use App\Classes\Modules\ControllersLogic\Warehouses\CreateWarehouseLogic;
use Illuminate\Http\Request;
class CreateWarehouseController
{
public function create(Request $request, CreateWarehouseLogic $logic){
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 10:40 AM
*/
namespace App\Http\Controllers\Warehouses;
use App\Classes\Modules\ControllersLogic\Warehouses\DeleteWarehouseLogic;
class DeleteWarehouseController
{
public function destroy(string $id, DeleteWarehouseLogic $logic){
return $logic->execute($id);
}
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 10:15 AM
*/
namespace App\Http\Controllers\Warehouses;
use App\Classes\Modules\ControllersLogic\Warehouses\ListWarehouseLogic;
class ListWarehouseController
{
public function list(ListWarehouseLogic $logic){
return $logic->execute();
}
}
@@ -0,0 +1,19 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 22/05/2019
* Time: 10:31 AM
*/
namespace App\Http\Controllers\Warehouses;
use App\Classes\Modules\ControllersLogic\Warehouses\ProfileWarehouseLogic;
class ProfileWarehouseController
{
public function show(String $id, ProfileWarehouseLogic $logic){
return $logic->execute($id);
}
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: mhmj
* Date: 23/05/2019
* Time: 9:56 AM
*/
namespace App\Http\Controllers\Warehouses;
use App\Classes\Modules\ControllersLogic\Warehouses\UpdateWarehouseLogic;
use Illuminate\Http\Request;
class UpdateWarehouseController
{
public function update(string $id, Request $request, UpdateWarehouseLogic $logic){
return $logic->execute($id,$request);
}
}
@@ -1,57 +0,0 @@
<?php
namespace App\Http\Controllers\Warehouses;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\Warehouse as WarehouseResource;
use App\Classes\ControllersLogic\Warehouses\ListWarehouses;
use App\Classes\ControllersLogic\Warehouses\UpdateWarehouse;
use App\Classes\ControllersLogic\Warehouses\WarehouseProfile;
use App\Classes\ControllersLogic\Warehouses\DeleteWarehouse;
class WarehouseController extends Controller
{
/**
* Display a listing of the resource.
*
* @param null|string $all
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function index(?string $all = null) {
return (new ListWarehouses())->execute($all === null ? false : true);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
*
* @return WarehouseResource
*/
public function store(Request $request): WarehouseResource {
return (new UpdateWarehouse())->execute($request);
}
/**
* Display the specified resource.
*
* @param int $id
*
* @return WarehouseResource
*/
public function show($id): WarehouseResource {
return (new WarehouseProfile())->execute($id);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
*
* @return WarehouseResource
*/
public function destroy($id): WarehouseResource {
return (new DeleteWarehouse())->execute($id);
}
}
+5 -5
View File
@@ -95,19 +95,19 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
Route::group(['prefix' => 'warehouse', 'as' => 'warehouse.', 'namespace' => 'Warehouses'], function () {
// List warehouses
Route::get('/list/{all?}', 'WarehouseController@index')->name('list');
Route::get('/list/', 'ListWarehouseController@list')->name('list');
// List single warehouses
Route::get('{id}/profile', 'WarehouseController@show')->name('profile');
Route::get('{id}/profile','ProfileWarehouseController@show')->name('profile');
// Create new warehouses
Route::post('/', 'WarehouseController@store')->name('create');
Route::post('/','CreateWarehouseController@create')->name('create');
// Update warehouses
Route::put('{id}', 'WarehouseController@store')->name('update');
Route::put('{id}', 'UpdateWarehouseController@update')->name('update');
// Delete warehouse
Route::get('{id}', 'WarehouseController@destroy')->name('delete');
Route::delete('{id}', 'DeleteWarehouseController@destroy')->name('delete');
Route::get('{id}/order/{category}/list', 'WarehouseOrderController@list')
->where('category', 'receiving|shipping|complete')->name('order.list');