parsaaghayi-backend/app/Http/Controllers/Blog/PostController.php
parsa aghaei a5f76a3657
Some checks failed
Deploy Backend / deploy (push) Has been cancelled
0.1: replace Request with FormRequest in all controllers
2026-06-23 18:04:57 +03:30

90 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Blog;
use App\Http\Controllers\Controller;
use App\Http\Requests\Blog\StorePostRequest;
use App\Http\Requests\Blog\UpdatePostRequest;
use App\Http\Resources\PostResource;
use App\Models\Blog\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
// نمایش لیست پست‌ها با فیلتر و صفحه‌بندی
public function index(Request $request)
{
// دریافت پارامترهای فیلتر از درخواست
$filters = $request->only(['category', 'tag', 'search', 'author', 'published']);
// دریافت پارامترهای مرتب‌سازی از درخواست
$sortField = $request->get('sort_field', 'published_at'); // فیلد پیش‌فرض: published_at
$sortDirection = $request->get('sort_direction', 'desc'); // جهت پیش‌فرض: نزولی
// دریافت پارامترهای صفحه‌بندی از درخواست
$perPage = $request->get('per_page', 10); // تعداد آیتم‌ها در هر صفحه (پیش‌فرض: ۱۰)
// ساخت Query با اعمال فیلترها و مرتب‌سازی
$query = Post::with(['category', 'tags', 'author'])
->filter($filters)
->sort($sortField, $sortDirection);
// اعمال صفحه‌بندی
$posts = $query->paginate($perPage);
// بازگشت نتایج به صورت JSON با استفاده از Resource
return PostResource::collection($posts);
}
// نمایش یک پست خاص
public function show($slug)
{
// یافتن پست بر اساس slug و بارگذاری روابط مرتبط
$post = Post::with(['category', 'tags', 'author', 'relatedPosts.category', 'relatedPosts.tags', 'relatedPosts.author'])
->where('slug', $slug)
->firstOrFail(); // در صورت عدم وجود پست، خطای 404 برمی‌گرداند
// بازگشت پست و پست‌های مرتبط به صورت JSON با استفاده از منابع
return response()->json([
'post' => new PostResource($post),
'related_posts' => PostResource::collection($post->relatedPosts->sortByDesc('published_at')->take(5)), // بازگشت ۵ پست مرتبط جدیدترین
], 200);
}
// ذخیره یک پست جدید
public function store(StorePostRequest $request)
{
$post = Post::create($request->validated());
if ($request->has('tags')) {
$post->tags()->attach($request->tags);
}
return new PostResource($post->load(['category', 'tags', 'author']));
}
// به‌روزرسانی یک پست خاص
public function update(UpdatePostRequest $request, $id)
{
$post = Post::findOrFail($id);
$post->update($request->validated());
if ($request->has('tags')) {
$post->tags()->sync($request->tags);
}
return new PostResource($post->load(['category', 'tags', 'author']));
}
// حذف یک پست خاص
public function destroy($id)
{
$post = Post::findOrFail($id);
$post->tags()->detach();
$post->relatedPosts()->detach();
$post->delete();
return response()->json(['message' => 'Post deleted successfully'], 200);
}
}