blog posts api
This commit is contained in:
parent
b9a5e81492
commit
131d417b05
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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}}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue