From 08c457946449173b6240119c997566094198bdeb Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 3 Apr 2019 12:17:21 +1100 Subject: [PATCH] Working on Products --- app/Http/Controllers/ClientController.php | 20 +--------- app/Http/Controllers/ProductController.php | 20 ++++++++-- .../Requests/Product/EditProductRequest.php | 30 ++++++++++++++ .../Requests/Product/ShowProductRequest.php | 31 +++++++++++++++ app/Policies/EntityPolicy.php | 6 ++- app/Policies/ProductPolicy.php | 33 ++++++++++++++++ app/Providers/AuthServiceProvider.php | 3 ++ app/Providers/RouteServiceProvider.php | 5 ++- app/Transformers/CompanyTransformer.php | 7 ++-- app/Transformers/ProductTransformer.php | 39 +++++++++++++++++++ app/Utils/Traits/MakesHash.php | 12 ++++-- 11 files changed, 174 insertions(+), 32 deletions(-) create mode 100644 app/Http/Requests/Product/EditProductRequest.php create mode 100644 app/Http/Requests/Product/ShowProductRequest.php create mode 100644 app/Policies/ProductPolicy.php diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 832fd3d325dd..2beb18faf349 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -73,17 +73,8 @@ class ClientController extends BaseController public function show(ShowClientRequest $request, Client $client) { - $data = [ - 'client' => $client, - 'hashed_id' => $this->encodePrimarykey($client->id), - 'company' => $client->company(), - 'sizes' => Size::all(), - ]; + return $this->itemResponse($client); - return response()->json($data); - - // return redirect()->route('api.clients.edit', ['id' => $this->encodePrimarykey($client->id)]); - } /** @@ -95,14 +86,7 @@ class ClientController extends BaseController public function edit(EditClientRequest $request, Client $client) { - $data = [ - 'client' => $client, - 'hashed_id' => $this->encodePrimarykey($client->id), - 'company' => $client->company(), - 'sizes' => Size::all(), - ]; - - return response()->json($data); + return $this->itemResponse($client); } diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 004968665d51..cd28f4daddff 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers; use App\Filters\ProductFilters; +use App\Http\Requests\Product\ShowProductRequest; +use App\Http\Requests\Product\EditProductRequest; use App\Models\Product; use App\Transformers\ProductTransformer; use App\Utils\Traits\MakesHash; @@ -17,6 +19,16 @@ class ProductController extends BaseController protected $entityTransformer = ProductTransformer::class; + /** + * ProductController constructor. + */ + public function __construct() + { + + parent::__construct(); + + } + /** */ public function index(ProductFilters $filters) @@ -56,9 +68,9 @@ class ProductController extends BaseController * @param int $id * @return \Illuminate\Http\Response */ - public function show($id) + public function show(ShowProductRequest $request, Product $product) { - // + return $this->itemResponse($product); } /** @@ -67,9 +79,9 @@ class ProductController extends BaseController * @param int $id * @return \Illuminate\Http\Response */ - public function edit($id) + public function edit(EditProductRequest $request, Product $product) { - // + return $this->itemResponse($product); } /** diff --git a/app/Http/Requests/Product/EditProductRequest.php b/app/Http/Requests/Product/EditProductRequest.php new file mode 100644 index 000000000000..3ab28b4526c8 --- /dev/null +++ b/app/Http/Requests/Product/EditProductRequest.php @@ -0,0 +1,30 @@ +user()->can('edit', $this->product); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/Product/ShowProductRequest.php b/app/Http/Requests/Product/ShowProductRequest.php new file mode 100644 index 000000000000..6a3e0245b279 --- /dev/null +++ b/app/Http/Requests/Product/ShowProductRequest.php @@ -0,0 +1,31 @@ +user()->can('view', $this->product); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Policies/EntityPolicy.php b/app/Policies/EntityPolicy.php index 48bb55744fe5..c50094465f27 100644 --- a/app/Policies/EntityPolicy.php +++ b/app/Policies/EntityPolicy.php @@ -3,6 +3,7 @@ namespace App\Policies; use App\Models\User; +use Illuminate\Support\Facades\Log; /** * Class EntityPolicy @@ -38,7 +39,8 @@ class EntityPolicy */ public function edit(User $user, $entity) : bool { - + Log::error('trying to edit'); + return ($user->isAdmin() && $entity->company_id == $user->companyId()) || ($user->hasPermission('edit_' . strtolower(class_basename($entity))) && $entity->company_id == $user->companyId()) || $user->owns($entity); @@ -56,7 +58,7 @@ class EntityPolicy */ public function view(User $user, $entity) : bool { - + Log::error('trying to view'); return ($user->isAdmin() && $entity->company_id == $user->companyId()) || ($user->hasPermission('view_' . strtolower(class_basename($entity))) && $entity->company_id == $user->companyId()) || $user->owns($entity); diff --git a/app/Policies/ProductPolicy.php b/app/Policies/ProductPolicy.php new file mode 100644 index 000000000000..8d3ff6ad1d90 --- /dev/null +++ b/app/Policies/ProductPolicy.php @@ -0,0 +1,33 @@ +isAdmin() || $user->hasPermission('create_product'); + } + +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index e1955fa406cd..c836e8e663f0 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -3,7 +3,9 @@ namespace App\Providers; use App\Models\Client; +use App\Models\Product; use App\Policies\ClientPolicy; +use App\Policies\ProductPolicy; use Auth; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; @@ -17,6 +19,7 @@ class AuthServiceProvider extends ServiceProvider */ protected $policies = [ Client::class => ClientPolicy::class, + Product::class => ProductPolicy::class, ]; /** diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 56dcfc39a64a..e5319b7457a1 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -2,12 +2,13 @@ namespace App\Providers; -use Illuminate\Support\Facades\Route; +use App\Utils\Traits\MakesHash; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; +use Illuminate\Support\Facades\Route; class RouteServiceProvider extends ServiceProvider { - use \App\Utils\Traits\MakesHash; + use MakesHash; /** * This namespace is applied to your controller routes. * diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index 4875bbcb4349..b744ac6f46f0 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -5,6 +5,7 @@ namespace App\Transformers; use App\Models\Account; use App\Models\Client; +use App\Models\Company; use App\Models\User; use App\Utils\Traits\MakesHash; @@ -13,7 +14,7 @@ use App\Utils\Traits\MakesHash; */ class CompanyTransformer extends EntityTransformer { - trait MakesHash; + use MakesHash; /** * @SWG\Property(property="account_key", type="string", example="123456") @@ -71,8 +72,8 @@ class CompanyTransformer extends EntityTransformer 'size_id' => (int) $company->size_id, 'industry_id' => (int) $company->industry_id, 'settings' => $company->settings, - 'updated_at' => $user->updated_at, - 'deleted_at' => $user->deleted_at, + 'updated_at' => $company->updated_at, + 'deleted_at' => $company->deleted_at, ]; } diff --git a/app/Transformers/ProductTransformer.php b/app/Transformers/ProductTransformer.php index 696a30eaae23..2142a8c2e20c 100644 --- a/app/Transformers/ProductTransformer.php +++ b/app/Transformers/ProductTransformer.php @@ -2,7 +2,9 @@ namespace App\Transformers; +use App\Models\Company; use App\Models\Product; +use App\Models\User; use App\Utils\Traits\MakesHash; /** @@ -11,6 +13,43 @@ use App\Utils\Traits\MakesHash; class ProductTransformer extends EntityTransformer { use MakesHash; + + protected $defaultIncludes = [ + ]; + + /** + * @var array + */ + protected $availableIncludes = [ + 'company', + 'user' + ]; + + + /** + * @param Product $product + * + * @return \League\Fractal\Resource\Collection + */ + public function includeUser(Product $product) + { + $transformer = new UserTransformer($this->serializer); + + return $this->includeItem($product->user, $transformer, User::class); + } + + /** + * @param Product $product + * + * @return \League\Fractal\Resource\Collection + */ + public function includeCompany(Product $product) + { + $transformer = new CompanyTransformer($this->serializer); + + return $this->includeItem($product->company, $transformer, Company::class); + } + /** * @SWG\Property(property="id", type="integer", example=1, readOnly=true) * @SWG\Property(property="product_key", type="string", example="Item") diff --git a/app/Utils/Traits/MakesHash.php b/app/Utils/Traits/MakesHash.php index a8684413159f..353b9cfd0bf8 100644 --- a/app/Utils/Traits/MakesHash.php +++ b/app/Utils/Traits/MakesHash.php @@ -50,10 +50,16 @@ trait MakesHash public function decodePrimaryKey($value) : string { - $hashids = new Hashids('', 10); + try{ + $hashids = new Hashids('', 10); - $decoded_array = $hashids->decode($value); + $decoded_array = $hashids->decode($value); - return $decoded_array[0]; + return $decoded_array[0]; + } + catch(\Exception $e) + { + return response()->json(['error'=>'Invalid primary key'],400); + } } } \ No newline at end of file