blog posts api

This commit is contained in:
saparatayev 2022-05-03 16:35:42 +05:00
parent b9a5e81492
commit 131d417b05
4 changed files with 106 additions and 3 deletions

View File

@ -0,0 +1,63 @@
<?php
namespace AhmadFatoni\ApiGenerator\Controllers\API;
use Cms\Classes\Controller;
use DB;
use Config;
use AhmadFatoni\ApiGenerator\Helpers\Helpers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use RainLab\Blog\Models\Post;
use TPS\Birzha\Classes\BlogPostResource;
class BlogPostsApiController extends Controller
{
protected $Post;
protected $helpers;
public function __construct(Post $Post, Helpers $helpers)
{
parent::__construct();
$this->Post = $Post;
$this->helpers = $helpers;
}
//posts list
public function index(Request $request)
{
$data = $request->all();
$validator = Validator::make($data, [
'locale' => 'required|in:ru,en,tm',
'per_page' => 'numeric',
'sort_order' => 'in:asc,desc'
]);
if($validator->fails()) {
return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validator->errors() );
}
return response()->json(
BlogPostResource::collection($this->Post::with(['featured_images', 'translations:locale,model_id,attribute_data',])
->orderBy('published_at', $data['sort_order'] ?? 'desc')
->paginate($data['per_page'] ?? 7))->response()->getData(), 200);
}
//posts item
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 {
return new BlogPostResource($post);
}
}
}

View File

@ -24,6 +24,9 @@ Route::group(['prefix' =>'api/v1','namespace' =>'AhmadFatoni\ApiGenerator\Contro
Route::post('send-contact-form', 'ContactFormApiController@sendContactForm');
Route::get('news', 'BlogPostsApiController@index');
Route::get('news/{id}', 'BlogPostsApiController@show')->where(['id' => '[0-9]+']);
Route::middleware(['\Tymon\JWTAuth\Middleware\GetUserFromToken'])->group(function () {
Route::post('products', 'ProductsApiController@store');

View File

@ -5,23 +5,30 @@ Route::post('fatoni/update/api/{id}', array('as' => 'fatoni.update.api', 'uses'
Route::get('fatoni/delete/api/{id}', array('as' => 'fatoni.delete.api', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\ApiGeneratorController@deleteApi'));
Route::group(['prefix' =>'api/v1','namespace' =>'AhmadFatoni\ApiGenerator\Controllers\API'],function ($route){
Route::resource('categories', 'CategoriesAPIController', ['except' => ['destroy', 'create', 'edit']]);
// Route::get('categories/{id}/delete', ['as' => 'categories.delete', 'uses' => 'CategoriesAPIController@destroy']);
Route::get('products', ['as' => 'products.index', 'uses' => 'ProductsApiController@index']);
Route::get('products/{id}', ['as' => 'products.show', 'uses' => 'ProductsApiController@show']);
Route::get('test',['as' => 'test', 'uses' => 'SmsController@index']);
// Route::get('products/{id}/delete', ['as' => 'products.delete', 'uses' => 'ProductsApiController@destroy']);
Route::resource('countries', 'CountriesapiController', ['except' => ['destroy', 'create', 'edit']]);
Route::resource('currencies', 'CurrenciesapiController', ['except' => ['destroy', 'create', 'edit']]);
Route::resource('measures', 'MeasuresapiController', ['except' => ['destroy', 'create', 'edit']]);
// Route::get('measures/{id}/delete', ['as' => 'measures.delete', 'uses' => 'MeasuresapiController@destroy']);
Route::resource('terms', 'TermsapiController', ['except' => ['destroy', 'create', 'edit']]);
// Route::get('terms/{id}/delete', ['as' => 'terms.delete', 'uses' => 'TermsapiController@destroy']);
Route::post('send-contact-form', 'ContactFormApiController@sendContactForm');
Route::get('news', 'BlogPostsApiController@index');
Route::get('news/{id}', 'BlogPostsApiController@show')->where(['id' => '[0-9]+']);
Route::middleware(['\Tymon\JWTAuth\Middleware\GetUserFromToken'])->group(function () {
Route::post('products', 'ProductsApiController@store');
Route::post('products/{id}', 'ProductsApiController@update')
@ -46,6 +53,7 @@ Route::group(['prefix' =>'api/v1','namespace' =>'AhmadFatoni\ApiGenerator\Contro
//Balance
Route::post('balance_update','TransactionsApiController@updateBalance');
// Route::post('balance_bank_transfer','BalanceController@createBankTransfer');
Route::get('notifications', 'NotificationsApiController@index');
Route::post('notifications/{id}/read', 'NotificationsApiController@markAsRead')
@ -63,4 +71,6 @@ Route::group(['prefix' =>'api/v1','namespace' =>'AhmadFatoni\ApiGenerator\Contro
});
});
{{route}}

View File

@ -0,0 +1,27 @@
<?php
namespace TPS\Birzha\Classes;
use Illuminate\Http\Resources\Json\JsonResource;
class BlogPostResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$locale = $request->get('locale');
return [
'id' => $this->id,
'title' => $this->getAttributeTranslated('title', $locale),
'published_at' => $this->published_at->format('d.m.Y'),
'featured_images' => ImageResource::collection($this->featured_images),
'content_html' => $this->getAttributeTranslated('content_html', $locale)
];
}
}