<?php
namespace App\Http\Controllers;
use App\Models\Blog;
use App\Models\TempImage;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Validator;
class BlogController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$blogs = Blog::orderBy('created_at', 'DESC');
if(!empty($request->keyword)){
$blogs = $blogs->where('title', 'LIKE', '%'.$request->keyword.'%');
}
$blogs = $blogs->get();
return response()->json([
'status' => true,
'data' => $blogs
]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//validation
$validator = Validator::make($request->all(), [
'title' => 'required|string|min:10|max:255',
'shortDesc' => 'nullable|string|max:500',
'image' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'description' => 'nullable|string',
'author' => 'required|string|min:3|max:255',
]);
if($validator->fails()){
return response()->json([
'status' => false,
'errors' => $validator->errors(),
'message' => 'Validation error'
]);
}
//insert blog in database
$blog = new Blog();
$blog->title = $request->title;
$blog->shortDesc = $request->shortDesc;
$blog->description = $request->description;
$blog->author = $request->author;
$blog->save();
//save image
$tempImage = TempImage::find($request->image_id);
if($tempImage != null ){
$imageExtArray = explode('.', $tempImage->name);
$ext = last($imageExtArray); // we are getting the extension of the image
$imageName = time(). '-' . $blog->id .'.'. $ext; // we are renaming the image with blog id
$blog->image = $imageName;
$blog->save();
//move image from temp folder to blogs folder
$sourcePath = public_path('uploads/temp/'.$tempImage->name);
$destinationPath = public_path('uploads/blogs/'.$imageName);
File::copy($sourcePath, $destinationPath); //copy image from temp to blogs folder
File::delete($sourcePath); // delete image from temp folder
}
return response()->json([
'status' => true,
'message' => 'Blog Added Successfully',
'data' => $blog
]);
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$blog = Blog::find($id);
if($blog == null){
return response()->json([
'status' => false,
'message' => 'Blog not found'
]);
}
$blog['date'] = Carbon::parse($blog->created_at)->format('d M, Y');
return response()->json([
'status' => true,
'data' => $blog
]);
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$blog = Blog::find($id);
if($blog == null){
return response()->json([
'status' => false,
'message' => 'Blog not found'
]);
}
//validation
$validator = Validator::make($request->all(), [
'title' => 'required|string|min:10|max:255',
'shortDesc' => 'nullable|string|max:500',
'description' => 'nullable|string',
'author' => 'required|string|min:3|max:255',
]);
if($validator->fails()){
return response()->json([
'status' => false,
'errors' => $validator->errors(),
'message' => 'Validation error'
]);
}
//update blog in database
$blog->title = $request->title;
$blog->shortDesc = $request->shortDesc;
$blog->description = $request->description;
$blog->author = $request->author;
$blog->save();
//save image
$tempImage = TempImage::find($request->image_id);
if($tempImage != null ){
File::delete(public_path('uploads/blogs/'.$blog->image)); // delete old image from blogs folder if exists
$imageExtArray = explode('.', $tempImage->name);
$ext = last($imageExtArray); // we are getting the extension of the image
$imageName = time(). '-' . $blog->id .'.'. $ext; // we are renaming the image with blog id
$blog->image = $imageName;
$blog->save();
//move image from temp folder to blogs folder
$sourcePath = public_path('uploads/temp/'.$tempImage->name);
$destinationPath = public_path('uploads/blogs/'.$imageName);
File::copy($sourcePath, $destinationPath); //copy image from temp to blogs folder
File::delete($sourcePath); // delete image from temp folder
}
return response()->json([
'status' => true,
'message' => 'Blog Updated Successfully',
'data' => $blog
]);
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$blog = Blog::find($id);
if($blog == null){
return response()->json([
'status' => false,
'message' => 'Blog not found'
]);
}
//delete blog image first if exists
File::delete(public_path('uploads/blogs/'.$blog->image));
//delete blog from db
$blog->delete();
return response()->json([
'status' => true,
'message' => 'Blog Deleted Successfully'
]);
}
}
Comments
Post a Comment