From f88ffc73f972bed5d903ac3e09606347e75d12c6 Mon Sep 17 00:00:00 2001 From: Shohrat Date: Wed, 1 Mar 2023 05:57:48 +0000 Subject: [PATCH] api settings from server --- .../controllers/api/PostsController.php | 241 ++++++++++-------- plugins/ahmadfatoni/apigenerator/routes.php | 24 +- plugins/rainlab/blog/models/Post.php | 9 +- 3 files changed, 159 insertions(+), 115 deletions(-) diff --git a/plugins/ahmadfatoni/apigenerator/controllers/api/PostsController.php b/plugins/ahmadfatoni/apigenerator/controllers/api/PostsController.php index 31d09b7..e8b754e 100644 --- a/plugins/ahmadfatoni/apigenerator/controllers/api/PostsController.php +++ b/plugins/ahmadfatoni/apigenerator/controllers/api/PostsController.php @@ -1,102 +1,139 @@ -Post = $Post; - $this->helpers = $helpers; - } - - public function index(Request $request){ - - $data = $request->all(); - - $validator = Validator::make($data, [ - 'locale' => 'required|in:ru,en,tm', - ]); - - if($validator->fails()) { - return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); - } - - $filter = [ - 'page' => input('page'), - 'sort' => input('sort')??'published_at desc', - 'perPage' => input('count'), - 'search' => trim(input('search')), - 'category' => input('category'), - 'date' => input('date'), - ]; - - if(request()->has('featured')){ - $filter['featured'] = true; - } - - $data = response()->json( - PostResource::collection($this->Post::with(['categories:id,name'])->listFrontEnd($filter))); - return $data; - } - - public function show($id, Request $request) - { - $data = $request->all(); - $validator = Validator::make($data, [ - 'locale' => 'required|in:ru,en,tm', - ]); - if($validator->fails()) { - return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); - } - - if(!$post = $this->Post::find($id)) { - return $this->helpers->apiArrayResponseBuilder(404, 'not found', ['error' => "Resource id = {$id} could not be found"]); - } else { - $obj = Db::table('vdomah_blogviews_views') - ->where('post_id', $post->getKey()); - - if ($obj->count() > 0) { - $row = $obj->first(); - - // $views = $row->views + rand(1,10);; - $views = $row->views + 1;; - - $obj->update(['views' => $views]); - $post['views'] = $row->views; - } - else { - - Db::table('vdomah_blogviews_views')->insert([ - 'post_id' => $post->getKey(), - 'views' => 1 - ]); - } - - return new PostResource($post); - } - } - - - public static function getAfterFilters() {return [];} - public static function getBeforeFilters() {return [];} - public static function getMiddleware() {return [];} - public function callAction($method, $parameters=false) { - return call_user_func_array(array($this, $method), $parameters); - } - -} +Post = $Post; + $this->helpers = $helpers; + } + + public function index(Request $request){ + + $data = $request->all(); + + $validator = Validator::make($data, [ + 'locale' => 'required|in:ru,en,tm', + ]); + + if($validator->fails()) { + return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); + } + + $filter = [ + 'page' => input('page'), + 'sort' => input('sort')??'published_at desc', + 'perPage' => input('count'), + 'search' => trim(input('search')), + 'category' => input('category'), + 'date' => input('date'), + 'type' => input('type'), + ]; + + if(request()->has('featured')){ + $filter['featured'] = true; + } + + $data = response()->json( + PostResource::collection($this->Post::with(['categories:id,name'])->listFrontEnd($filter))); + return $data; + } + + public function show($id, Request $request) + { + $data = $request->all(); + $validator = Validator::make($data, [ + 'locale' => 'required|in:ru,en,tm', + ]); + if($validator->fails()) { + return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); + } + + if(!$post = $this->Post::find($id)) { + return $this->helpers->apiArrayResponseBuilder(404, 'not found', ['error' => "Resource id = {$id} could not be found"]); + } else { + $obj = Db::table('vdomah_blogviews_views') + ->where('post_id', $post->getKey()); + + if ($obj->count() > 0) { + $row = $obj->first(); + + // $views = $row->views + rand(1,10);; + $views = $row->views + 1;; + + $obj->update(['views' => $views]); + $post['views'] = $row->views; + } + else { + + Db::table('vdomah_blogviews_views')->insert([ + 'post_id' => $post->getKey(), + 'views' => 1 + ]); + } + + return new PostResource($post); + } + } + + + public function popular(Request $request){ + $data = $request->all(); + + $validator = Validator::make($data, [ + 'locale' => 'required|in:ru,en,tm', + ]); + + if($validator->fails()) { + return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() ); + } + + $filter = [ + 'page' => input('page'), + 'perPage' => input('count'), + 'search' => trim(input('search')), + 'category' => input('category'), + 'date' => input('date'), + 'type' => input('type'), + ]; + + if(request()->has('featured')){ + $filter['featured'] = true; + } + + //$posts = response()->json( + // PostResource::collection($this->Post::isPublished()->select("id", "excerpt") + // ->leftJoin('vdomah_blogviews_views as pv', 'pv.post_id', '=', 'rainlab_blog_posts.id')->paginate(8))); + + $posts = response()->json( + Post::isPublished()->select("id", "title", "slug", "excerpt", "published_at", "type", "views", "video", "powerseo_title", "powerseo_description", "powerseo_keywords")->with("featured_images") + ->leftJoin('vdomah_blogviews_views as pv', 'pv.post_id', '=', 'rainlab_blog_posts.id')->listFrontEnd($filter)); + + return $posts; + } + + + public static function getAfterFilters() {return [];} + public static function getBeforeFilters() {return [];} + public static function getMiddleware() {return [];} + public function callAction($method, $parameters=false) { + return call_user_func_array(array($this, $method), $parameters); + } + +} diff --git a/plugins/ahmadfatoni/apigenerator/routes.php b/plugins/ahmadfatoni/apigenerator/routes.php index 6025299..f8f8c76 100644 --- a/plugins/ahmadfatoni/apigenerator/routes.php +++ b/plugins/ahmadfatoni/apigenerator/routes.php @@ -1,11 +1,13 @@ - 'fatoni.generate.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@generateApi')); -Route::post('fatoni/update/api/{id}', array('as' => 'fatoni.update.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@updateApi')); -Route::get('fatoni/delete/api/{id}', array('as' => 'fatoni.delete.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@deleteApi')); - -Route::resource('api/v1/categories', 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesController', ['except' => ['destroy', 'create', 'edit']]); -Route::get('api/v1/categories/{id}/delete', ['as' => 'api/v1/categories.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesController@destroy']); - -Route::resource('api/v1/posts', 'AhmadFatoni\ApiGenerator\Controllers\API\PostsController', ['except' => ['destroy', 'create', 'edit']]); -Route::get('api/v1/posts/{id}/delete', ['as' => 'api/v1/posts.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\PostsController@destroy']); + 'fatoni.generate.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@generateApi')); +Route::post('fatoni/update/api/{id}', array('as' => 'fatoni.update.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@updateApi')); +Route::get('fatoni/delete/api/{id}', array('as' => 'fatoni.delete.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@deleteApi')); + +Route::resource('api/v1/categories', 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesController', ['except' => ['destroy', 'create', 'edit']]); +Route::get('api/v1/categories/{id}/delete', ['as' => 'api/v1/categories.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesController@destroy']); + +Route::resource('api/v1/posts', 'AhmadFatoni\ApiGenerator\Controllers\API\PostsController', ['except' => ['destroy', 'create', 'edit']]); +Route::get('api/v1/posts/{id}/delete', ['as' => 'api/v1/posts.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\PostsController@destroy']); + +Route::get('api/v1/popular/posts', 'AhmadFatoni\ApiGenerator\Controllers\API\PostsController@popular'); diff --git a/plugins/rainlab/blog/models/Post.php b/plugins/rainlab/blog/models/Post.php index b5a5944..effd09a 100644 --- a/plugins/rainlab/blog/models/Post.php +++ b/plugins/rainlab/blog/models/Post.php @@ -275,7 +275,8 @@ class Post extends Model 'category' => null, 'search' => '', 'published' => true, - 'featured' => null, + 'featured' => false, + 'type' => 'photo', 'date' => '', 'exceptPost' => null ], $options)); @@ -287,7 +288,11 @@ class Post extends Model } - if (isset($featured)) { + if (isset($type)) { + $query->where('type', $type); + } + + if (isset($featured)) { $query->where('featured', $featured); }