File: /mnt/data/ghayatcom/ghayatcom-api/app/Http/Controllers/Api/BlogController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests\BlogCreateRequest;
use App\Http\Requests\BlogUpdateRequest;
use App\Http\Requests\BlogDeleteRequest;
use App\Http\Requests\CategoryCreateRequest;
use App\Http\Requests\CategoryUpdateRequest;
use App\Http\Requests\CategoryDeleteRequest;
use App\Http\Requests\SubCategoryCreateRequest;
use App\Http\Requests\SubCategoryUpdateRequest;
use App\Http\Requests\SubCategoryDeleteRequest;
use App\Http\Requests\BlogIdRequest;
use Illuminate\Database\QueryException;
use App\Library\VariableLibrary;
use App\{Category,SubCategory,Blog};
use Validator;
use Exception;
use Throwable;
use DB;
use Auth;
use Storage;
use App\Library\S3Library;
use App\Http\Resources\BlogCollection;
class BlogController extends Controller
{
public function index(Request $request)
{
try {
$paginate = $request->count_per_page ? $request->count_per_page : 10;
$pageNumber = $request->page ? $request->page : 1;
$search_key = $request->search ? $request->search : '';
/**
* @var int|null $paginate
* @var int|null $pageNumber
* @var string|null $search_key
*/
$sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
$data_order_by = $request->order_by;
/** @var string $data_order_by */
$orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');
$list = Blog::with(['categoryDetails','subCategoryDetails']);
if(!empty($search_key)) {
$list = $list->where(function($q) use($search_key){
$q->where('title', 'LIKE', "%{$search_key}%")->orWhere('description', 'LIKE', "%{$search_key}%");
});
}
if($sort_by_col) {
/**
* @var string $sort_by_col
* @var string $orderBy
*/
$list = $list->orderBy($sort_by_col, $orderBy);
}
$paginateData = $list->paginate($paginate, ['*'], 'page', $pageNumber);
return new BlogCollection($paginateData, 200);
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function categoryList(Request $request)
{
try {
$paginate = $request->count_per_page ? $request->count_per_page : 10;
$pageNumber = $request->page ? $request->page : 1;
$search_key = $request->search ? $request->search : '';
$list_type = $request->list_type ? $request->list_type : 'list'; //paginate
/**
* @var int|null $paginate
* @var int|null $pageNumber
* @var string|null $search_key
* @var string|null $list_type
*/
$sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
$data_order_by = $request->order_by;
/** @var string $data_order_by */
$orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');
$list = Category::whereNotNull('id');
if(!empty($search_key)) {
$list = $list->where(function($q) use($search_key){
$q->where('name', 'LIKE', "%{$search_key}%");
});
}
if($sort_by_col) {
/**
* @var string $sort_by_col
* @var string $orderBy
*/
$list = $list->orderBy($sort_by_col, $orderBy);
}
if($list_type == 'paginate')
return self::sentResponse(200, $list->paginate($paginate), __('digimed_validation.success_response.data_fetch_success'));
else
return self::sentResponse(200, $list->get(), __('digimed_validation.success_response.data_fetch_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function categoryCreate(CategoryCreateRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$category = Category::firstOrNew(['name' => $request->name]);
$category->created_by = $auth_id;
$category->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function categoryUpdate(CategoryUpdateRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$category = Category::find($request->id);
$category->name = $request->name;
$category->updated_by = $auth_id;
$category->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function categoryDelete(CategoryDeleteRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$category = Category::find($request->id);
$category->deleted_by = $auth_id;
$category->save();
$category->delete();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function subCategoryList(Request $request)
{
try {
$paginate = $request->count_per_page ? $request->count_per_page : 10;
$pageNumber = $request->page ? $request->page : 1;
$search_key = $request->search ? $request->search : '';
$category_id = $request->category_id ? $request->category_id : '';
$list_type = $request->list_type ? $request->list_type : 'list'; //paginate
/**
* @var int|null $paginate
* @var int|null $pageNumber
* @var string|null $search_key
* @var string|null $category_id
* @var string|null $list_type
*/
$sort_by_col = (isset($request->sort_by)) ? $request->sort_by : 'id';
$data_order_by = $request->order_by;
/** @var string $data_order_by */
$orderBy = $data_order_by ? strtoupper($data_order_by) : strtoupper('asc');
$list = SubCategory::with('category');
if(!empty($search_key)) {
$list = $list->where(function($q) use($search_key) {
$q->where('name', 'LIKE', "%{$search_key}%");
$q->orWhereHas('category', function($r) use($search_key) {
$r->where('name', 'LIKE', "%{$search_key}%");
});
});
}
if(!empty($category_id)) {
$list = $list->where(function($q) use($category_id) {
$category_id = explode(',',$category_id);
$q->whereIn('category_id', $category_id);
});
}
if($sort_by_col) {
/**
* @var string $sort_by_col
* @var string $orderBy
*/
$list = $list->orderBy($sort_by_col, $orderBy);
}
if($list_type == 'paginate')
return self::sentResponse(200, $list->paginate($paginate), __('digimed_validation.success_response.data_fetch_success'));
else
return self::sentResponse(200, $list->get(), __('digimed_validation.success_response.data_fetch_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function subCategoryCreate(SubCategoryCreateRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$subCategory = SubCategory::firstOrNew(['name' => $request->name, 'category_id' => $request->category_id]);
$subCategory->created_by = $auth_id;
$subCategory->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function subCategoryUpdate(SubCategoryUpdateRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$subCategory = SubCategory::find($request->id);
$subCategory->category_id = $request->category_id;
$subCategory->name = $request->name;
$subCategory->updated_by = $auth_id;
$subCategory->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function subCategoryDelete(SubCategoryDeleteRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$subCategory = SubCategory::find($request->id);
$subCategory->deleted_by = $auth_id;
$subCategory->save();
$subCategory->delete();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function blogCreate(BlogCreateRequest $request,VariableLibrary $variableLibrary, S3Library $S3Library)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$blog_image = '';
if($request->hasFile('blog_image')) {
$file = $request->file('blog_image');
$digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif', true, $file, 'digimed/images/blog/');
if($digimedFile['code'] == 500) {
DB::rollback();
return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
}
if($digimedFile['code'] == 200) {
$blog_image = $digimedFile['data'];
}
}
$blog = Blog::firstOrNew(['title' => $request->title, 'category_id' => $request->category_id, 'sub_category_id' => $request->sub_category_id]);
$blog->user_id = $auth_id;
$blog->description = $variableLibrary->string($request->description);
$blog->blog_image = $blog_image;
$blog->content = $variableLibrary->string($request->content);
$blog->created_by = $auth_id;
$blog->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_store_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function blogUpdate(BlogUpdateRequest $request,VariableLibrary $variableLibrary, S3Library $S3Library)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$blog_image = '';
if($request->hasFile('blog_image')) {
$file = $request->file('blog_image');
$digimedFile = $S3Library->fileUpload(true, 'jpeg|JPEG|jpg|JPG|png|PNG|gif', true, $file, 'digimed/images/blog/');
if($digimedFile['code'] == 500) {
DB::rollback();
return self::sentResponse(500, $digimedFile['data'], $digimedFile['msg']);
}
if($digimedFile['code'] == 200) {
$blog_image = $digimedFile['data'];
}
}
$blog = Blog::find($request->id);
$blog->user_id = $auth_id;
$blog->category_id = $request->category_id;
$blog->sub_category_id = $request->sub_category_id;
$blog->title = $request->title;
$blog->description = $variableLibrary->string($request->description);
if(!empty($blog_image))
$blog->blog_image = $blog_image;
$blog->content = $variableLibrary->string($request->content);
$blog->updated_by = $auth_id;
$blog->save();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_update_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function blogDelete(BlogDeleteRequest $request)
{
try {
$validated = $request->validated();
$authRole = Auth::user();
$auth_id = auth()->user()->id;
$subCategory = Blog::find($request->id);
$subCategory->deleted_by = $auth_id;
$subCategory->save();
$subCategory->delete();
return self::sentResponse(200, [], __('digimed_validation.success_response.data_delete_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
public function blogDetail(BlogIdRequest $request)
{
try {
$validated = $request->validated();
$result = Blog::with(['categoryDetails','subCategoryDetails','userDetails'])->find($request->blog_id);
return self::sentResponse(200, $result, __('digimed_validation.success_response.data_fetch_success'));
} catch(Exception | Throwable | QueryException $e) {
return self::sentResponse(500, [], $e->getMessage());
}
}
}