parsaaghayi-backend/app/Http/Controllers/Website/ProjectController.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

121 lines
4.4 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\website;
use App\Http\Controllers\Controller;
use App\Http\Requests\Website\StoreProjectRequest;
use App\Http\Requests\Website\UpdateProjectRequest;
use App\Models\Website\Project;
use App\Models\Website\ProjectCategory;
class ProjectController extends Controller
{
public function index($locale): \Illuminate\Http\JsonResponse
{
// Read per_page from query string or set a default value
$perPage = request()->query('per_page', 10); // مقدار پیش‌فرض ۱۰ در نظر گرفته می‌شود
// Retrieve projects with translations and categories
$projects = Project::with('translations', 'category.translations')->paginate($perPage);
$formattedProjects = $projects->items();
$formattedProjects = array_map(function ($project) use ($locale) {
$translation = $project->translations->firstWhere('locale', $locale);
$categoryTranslation = $project->category->translations->firstWhere('locale', $locale);
return [
'id' => $project->id,
'title' => $translation ? $translation->title : null,
'category' => $categoryTranslation ? $categoryTranslation->title : null,
'images' => [
['src' => $project->image1, 'position' => '1', 'zIndex' => 1],
['src' => $project->image2, 'position' => '2', 'zIndex' => 2],
],
'created_at' => $project->created_at,
'updated_at' => $project->updated_at,
];
}, $formattedProjects);
return response()->json([
'projects' => [
'current_page' => $projects->currentPage(),
'data' => $formattedProjects,
'total' => $projects->total(),
'last_page' => $projects->lastPage(),
],
'categories' => ProjectCategory::all()->map(function ($category) use ($locale) {
return [
'id' => $category->id,
'title' => $category->translations->firstWhere('locale', $locale)->title ?? null,
'image' => $category->image,
];
}),
]);
}
public function store(StoreProjectRequest $request)
{
$project = Project::create($request->only(['category_id', 'image1', 'image2']));
// ایجاد ترجمه‌ها
foreach (['fa', 'en'] as $locale) {
$project->translations()->create([
'locale' => $locale,
'title' => $request->input("title_$locale"),
'description' => $request->input("description_$locale"),
]);
}
return response()->json($project->load('translations'), 201);
}
public function show($id)
{
$project = Project::with('translations', 'category.translations')->findOrFail($id);
$translation = $project->translations->firstWhere('locale', 'fa');
$categoryTranslation = $project->category->translations->firstWhere('locale', 'fa');
$formattedProject = [
'id' => $project->id,
'title' => $translation ? $translation->title : null,
'category' => $categoryTranslation ? $categoryTranslation->title : null,
'images' => [
['src' => $project->image1, 'position' => '1', 'zIndex' => 1],
['src' => $project->image2, 'position' => '2', 'zIndex' => 2],
],
'created_at' => $project->created_at,
'updated_at' => $project->updated_at,
];
return response()->json(['project' => $formattedProject]);
}
public function update(UpdateProjectRequest $request, $id)
{
$project = Project::findOrFail($id);
$project->update($request->only(['category_id', 'image1', 'image2']));
// به‌روزرسانی ترجمه‌ها
foreach (['fa', 'en'] as $locale) {
$project->translations()->updateOrCreate(
['locale' => $locale],
[
'title' => $request->input("title_$locale"),
'description' => $request->input("description_$locale"),
]
);
}
return response()->json($project->load('translations'));
}
public function destroy($id)
{
Project::destroy($id);
return response()->json(null, 204);
}
}