rater/src/Controller/Api/RatingController.php

63 lines
1.8 KiB
PHP
Raw Normal View History

2026-06-05 00:00:51 +02:00
<?php
namespace App\Controller\Api;
use App\Entity\Rating;
use App\Entity\Restaurant;
use App\Repository\RatingRepository;
use App\Repository\SubjectRepository;
use App\Services\OutputService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;
class RatingController extends AbstractController
{
#[Route('/api/ratings', methods: ['GET'])]
public function index(
RatingRepository $repo,
OutputService $output,
): JsonResponse {
return $this->json($output->success([
'ratings' => array_map(
fn(Rating $rating) => [
'id' => $rating->getId(),
'score' => $rating->getScore(),
'subject' => [
'id' => $rating->getSubject()->getId(),
'name' => $rating->getSubject()->getName(),
],
],
$repo->findAll()
),
]));
}
#[Route('/api/ratings', methods: ['POST'])]
public function create(
Request $request,
EntityManagerInterface $em,
OutputService $output,
SubjectRepository $subjectRepository,
): JsonResponse {
$subject = $subjectRepository->findById($request->getPayload()->get('subject_id'));
if ($subject === null) {
return $this->json(
$output->error(["UNKNOWN_SUBJECT"])
);
}
$rating = new Rating();
$rating->setSubject($subject);
$rating->setScore($request->getPayload()->get('score'));
$em->persist($rating);
$em->flush();
return $this->json(null, 201);
}
}