From 2c0f0f20a0ef4040a8f38b1b04fb80893402d226 Mon Sep 17 00:00:00 2001 From: Yasser Elgammal Date: Sun, 22 Jan 2023 01:18:07 +0200 Subject: [PATCH] Queries enhancement for better performance --- .../Controllers/Admin/AdminController.php | 1 - .../Controllers/Admin/CategoryController.php | 2 +- app/Http/Controllers/Admin/PageController.php | 2 +- app/Http/Controllers/Admin/PostController.php | 2 +- app/Http/Controllers/Admin/TagController.php | 2 +- app/Http/Controllers/Admin/UserController.php | 2 +- app/Http/Controllers/HomeController.php | 2 +- app/Http/Controllers/PostController.php | 2 +- app/Http/Controllers/TagController.php | 4 - app/Models/Category.php | 2 +- app/Models/Tag.php | 4 +- app/Policies/PostPolicy.php | 8 +- app/Providers/AuthServiceProvider.php | 15 +- composer.json | 1 + composer.lock | 152 +++++++++++++++++- storage/debugbar/.gitignore | 2 + 16 files changed, 181 insertions(+), 22 deletions(-) create mode 100644 storage/debugbar/.gitignore diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php index 2266c77..7f488ef 100644 --- a/app/Http/Controllers/Admin/AdminController.php +++ b/app/Http/Controllers/Admin/AdminController.php @@ -7,7 +7,6 @@ use App\Models\Post; use App\Models\Tag; use App\Models\User; -use Illuminate\Support\Facades\Auth; class AdminController extends Controller { diff --git a/app/Http/Controllers/Admin/CategoryController.php b/app/Http/Controllers/Admin/CategoryController.php index faa64de..3cd7614 100644 --- a/app/Http/Controllers/Admin/CategoryController.php +++ b/app/Http/Controllers/Admin/CategoryController.php @@ -19,7 +19,7 @@ class CategoryController extends Controller */ public function index() { - $categories = Category::all(); + $categories = Category::with('user')->get(); return view('admin.category.index', compact('categories')); } diff --git a/app/Http/Controllers/Admin/PageController.php b/app/Http/Controllers/Admin/PageController.php index 2fb65f2..21d1467 100644 --- a/app/Http/Controllers/Admin/PageController.php +++ b/app/Http/Controllers/Admin/PageController.php @@ -12,7 +12,7 @@ class PageController extends Controller { public function index(){ - $pages = Page::orderBy('id', 'desc')->paginate(15); + $pages = Page::with('user')->orderBy('id', 'desc')->paginate(15); return view('admin.page.index', compact('pages')); } diff --git a/app/Http/Controllers/Admin/PostController.php b/app/Http/Controllers/Admin/PostController.php index c43863f..e6e8cf6 100644 --- a/app/Http/Controllers/Admin/PostController.php +++ b/app/Http/Controllers/Admin/PostController.php @@ -26,7 +26,7 @@ public function __construct() */ public function index() { - $posts = Post::orderBy('id', 'desc')->paginate(15); + $posts = Post::with(['category', 'user', 'tags'])->orderByDesc('id')->paginate(15); return view('admin.post.index', compact('posts')); } diff --git a/app/Http/Controllers/Admin/TagController.php b/app/Http/Controllers/Admin/TagController.php index 91e368b..6c33960 100644 --- a/app/Http/Controllers/Admin/TagController.php +++ b/app/Http/Controllers/Admin/TagController.php @@ -17,7 +17,7 @@ class TagController extends Controller */ public function index() { - $tags = Tag::all(); + $tags = Tag::with('posts')->get(); return view('admin.tag.index', compact('tags')); } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index cd89ea0..92d6aa4 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -18,7 +18,7 @@ class UserController extends Controller */ public function index() { - $users = User::orderBy('id', 'desc')->paginate(15); + $users = User::with('role')->orderBy('id', 'desc')->paginate(15); return view('admin.user.index', compact('users')); } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index dfc8f30..8ae5435 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -4,6 +4,7 @@ use App\Models\Category; use App\Models\Post; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cookie; @@ -14,7 +15,6 @@ public function index() { // Get the active posts with (Category and User) details $posts = Post::whereStatus(true)->with(['category', 'user'])->orderBy('id','desc')->paginate(10); - return view('index', compact('posts')); } diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php index 9a93c00..186aa88 100644 --- a/app/Http/Controllers/PostController.php +++ b/app/Http/Controllers/PostController.php @@ -11,7 +11,7 @@ class PostController extends Controller public function getPostBySlug($slug) { // I've Pass Slug to Get the Category per it's Slug - $post = Post::with('category')->whereStatus(true)->whereSlug($slug)->firstOrFail(); + $post = Post::with(['category', 'user'])->whereStatus(true)->whereSlug($slug)->firstOrFail(); return view('post', compact('post')); } diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 6f6d44e..6d6edd7 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -10,11 +10,7 @@ class TagController extends Controller { public function getPostsPerTags($tag) { - // $posts = $tag->posts(); $tags = Tag::whereName($tag)->firstOrFail()->publishedPosts(); - // $tag = Tag::whereName($tag)->firstOrFail(); - - // dd($tags); return view('tag', compact('tags')); } diff --git a/app/Models/Category.php b/app/Models/Category.php index 0b605be..0fd8352 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -25,6 +25,6 @@ public function user() // I use this function to get Active Posts in the current category public function publishedPosts() { - return SELF::posts()->whereStatus(true)->orderBy('id','desc')->paginate(10); + return SELF::posts()->with('user')->whereStatus(true)->orderBy('id','desc')->paginate(10); } } diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 8bcf3a4..675006e 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -18,11 +18,11 @@ public function posts() // I use this function to get Active Posts in the current Tag public function publishedPosts() { - return SELF::posts()->whereStatus(true)->orderBy('id', 'desc')->paginate(10); + return SELF::posts()->with(['user', 'category'])->whereStatus(true)->orderBy('id','desc')->paginate(10); } public function countTagsForPublishedPosts() { - return SELF::publishedPosts()->count(); + return SELF::posts()->whereStatus(true)->count(); } } diff --git a/app/Policies/PostPolicy.php b/app/Policies/PostPolicy.php index a11cba0..ab5dbf2 100644 --- a/app/Policies/PostPolicy.php +++ b/app/Policies/PostPolicy.php @@ -12,7 +12,7 @@ class PostPolicy public function viewAny(User $user) { - return ($user->getRole('Writer') || $user->getRole('Admin')); + return $user->getRole('Writer'); } /** * Determine whether the user can create models. @@ -22,7 +22,7 @@ public function viewAny(User $user) */ public function create(User $user) { - return ($user->getRole('Writer') || $user->getRole('Admin')); + return $user->getRole('Writer'); } /** @@ -34,7 +34,7 @@ public function create(User $user) */ public function update(User $user, Post $post) { - return (($user->id == $post->user->id) || $user->getRole('Admin')); + return $user->id == $post->user->id; } /** @@ -46,6 +46,6 @@ public function update(User $user, Post $post) */ public function delete(User $user, Post $post) { - return (($user->id == $post->user->id) || $user->getRole('Admin')); + return $user->id == $post->user->id; } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 784feb7..e7de49a 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -28,11 +28,22 @@ public function boot() { $this->registerPolicies(); + Gate::before(function ($user) { + if ($user->role->name == 'Admin') { + return true; + } + }); + Gate::define('admin-login', function (User $user) { - return $user->getRole('Admin') || $user->getRole('Writer'); + if ($user->role->name == 'Writer') { + return true; + } }); + Gate::define('admin-only', function (User $user) { - return $user->getRole('Admin'); + if ($user->role->name == 'Admin') { + return true; + } }); } } diff --git a/composer.json b/composer.json index 3c774f1..2a80802 100644 --- a/composer.json +++ b/composer.json @@ -12,6 +12,7 @@ "laravel/tinker": "^2.7" }, "require-dev": { + "barryvdh/laravel-debugbar": "^3.7", "fakerphp/faker": "^1.9.1", "laravel/breeze": "^1.16", "laravel/pint": "^1.0", diff --git a/composer.lock b/composer.lock index e7fbf7b..52d0304 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a7700948b70eeba2be3c22a6cdec329a", + "content-hash": "9bad69c1f9851d5ca85bbb75b9d0c192", "packages": [ { "name": "brick/math", @@ -5379,6 +5379,90 @@ } ], "packages-dev": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-debugbar.git", + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/3372ed65e6d2039d663ed19aa699956f9d346271", + "reference": "3372ed65e6d2039d663ed19aa699956f9d346271", + "shasum": "" + }, + "require": { + "illuminate/routing": "^7|^8|^9", + "illuminate/session": "^7|^8|^9", + "illuminate/support": "^7|^8|^9", + "maximebf/debugbar": "^1.17.2", + "php": ">=7.2.5", + "symfony/finder": "^5|^6" + }, + "require-dev": { + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^5|^6|^7", + "phpunit/phpunit": "^8.5|^9.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\Debugbar\\ServiceProvider" + ], + "aliases": { + "Debugbar": "Barryvdh\\Debugbar\\Facades\\Debugbar" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Barryvdh\\Debugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "debug", + "debugbar", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-07-11T09:26:42+00:00" + }, { "name": "doctrine/instantiator", "version": "1.4.1", @@ -5826,6 +5910,72 @@ }, "time": "2022-12-19T15:41:32+00:00" }, + { + "name": "maximebf/debugbar", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/maximebf/php-debugbar.git", + "reference": "ba0af68dd4316834701ecb30a00ce9604ced3ee9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/ba0af68dd4316834701ecb30a00ce9604ced3ee9", + "reference": "ba0af68dd4316834701ecb30a00ce9604ced3ee9", + "shasum": "" + }, + "require": { + "php": "^7.1|^8", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^2.6|^3|^4|^5|^6" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.20 || ^9.4.2", + "twig/twig": "^1.38|^2.7|^3.0" + }, + "suggest": { + "kriswallsmith/assetic": "The best way to manage assets", + "monolog/monolog": "Log using Monolog", + "predis/predis": "Redis storage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/DebugBar/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/maximebf/php-debugbar", + "keywords": [ + "debug", + "debugbar" + ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.18.1" + }, + "time": "2022-03-31T14:55:54+00:00" + }, { "name": "mockery/mockery", "version": "1.5.1", diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore