parsaaghayi-backend/app/Http/Controllers/Api/Website/AboutMeController.php
parsa aghaei a4025256d4
Some checks failed
Deploy Backend / deploy (push) Failing after 2m16s
3.1-3.6: install l5-swagger, add @OA annotations to all controllers
2026-06-23 18:34:20 +03:30

132 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Website;
use App\Http\Controllers\Controller;
use App\Http\Requests\Website\StoreAboutMeRequest;
use App\Http\Requests\Website\UpdateAboutMeRequest;
use App\Models\Website\AboutMe;
/**
* @OA\Tag(name="About Me", description="About Me section endpoints")
*/
class AboutMeController extends Controller
{
/**
* @OA\Get(
* path="/website/about-me",
* tags={"About Me"},
* summary="Get the first About Me entry with skills",
* @OA\Response(response=200, description="OK", @OA\JsonContent(ref="#/components/schemas/AboutMe"))
* )
*/
public function index()
{
$aboutMe = AboutMe::with('skills')->first();
return response()->json($aboutMe);
}
/**
* @OA\Get(
* path="/website/about-me/{id}",
* tags={"About Me"},
* summary="Get a specific About Me entry",
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
* @OA\Response(response=200, description="OK")
* )
*/
public function show($id)
{
$aboutMe = AboutMe::with('skills')->findOrFail($id);
return response()->json($aboutMe);
}
/**
* @OA\Post(
* path="/website/about-me",
* tags={"About Me"},
* summary="Create an About Me entry",
* @OA\RequestBody(@OA\MediaType(mediaType="application/json")),
* @OA\Response(response=201, description="Created")
* )
*/
public function store(StoreAboutMeRequest $request)
{
$aboutMe = AboutMe::create($request->validated());
return response()->json($aboutMe, 201);
}
/**
* @OA\Put(
* path="/website/about-me/{id}",
* tags={"About Me"},
* summary="Update an About Me entry",
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
* @OA\RequestBody(@OA\MediaType(mediaType="application/json")),
* @OA\Response(response=200, description="OK")
* )
*/
public function update(UpdateAboutMeRequest $request, $id)
{
$aboutMe = AboutMe::findOrFail($id);
$aboutMe->update($request->validated());
return response()->json($aboutMe);
}
/**
* @OA\Delete(
* path="/website/about-me/{id}",
* tags={"About Me"},
* summary="Delete an About Me entry",
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
* @OA\Response(response=204, description="No Content")
* )
*/
public function destroy($id)
{
AboutMe::destroy($id);
return response()->json(null, 204);
}
/**
* @OA\Get(
* path="/website/about-me/{id}/translation/{locale}",
* tags={"About Me"},
* summary="Get localized About Me with skills",
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
* @OA\Parameter(name="locale", in="path", required=true, @OA\Schema(type="string", enum={"fa","en"})),
* @OA\Response(response=200, description="OK", @OA\JsonContent(ref="#/components/schemas/AboutMe")),
* @OA\Response(response=404, description="Translation not found")
* )
*/
public function getTranslation($id, $locale)
{
$aboutMe = AboutMe::with('skills')->findOrFail($id);
if (!$aboutMe->hasTranslation('title', $locale)) {
return response()->json(['message' => 'Translation not found', 'locale' => $locale], 404);
}
$skills = $aboutMe->skills->map(function ($skill) use ($locale) {
return [
'id' => $skill->id,
'title' => $skill->getTranslation('title', $locale),
'description' => $skill->getTranslation('description', $locale),
'image' => $skill->image,
'link' => $skill->link,
'percentage' => $skill->percentage,
];
});
$data = [
'id' => $aboutMe->id,
'title' => $aboutMe->getTranslation('title', $locale),
'description' => $aboutMe->getTranslation('description', $locale),
'image' => $aboutMe->image,
'skills' => $skills,
];
return response()->json($data);
}
}