HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
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());
        }
    }
}