. */ declare(strict_types=1); namespace App\Controller; use App\Entity\Parts\Category; use App\Entity\Parts\Part; use App\Services\EDA\KiCadHelper; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; #[Route('/kicad-api/v1')] class KiCadApiController extends AbstractController { public function __construct( private readonly KiCadHelper $kiCADHelper, ) { } #[Route('/', name: 'kicad_api_root')] public function root(): Response { $this->denyAccessUnlessGranted('HAS_ACCESS_PERMISSIONS'); //The API documentation says this can be either blank or the URL to the endpoints return $this->json([ 'categories' => '', 'parts' => '', ]); } #[Route('/categories.json', name: 'kicad_api_categories')] public function categories(): Response { $this->denyAccessUnlessGranted('@categories.read'); return $this->json($this->kiCADHelper->getCategories()); } #[Route('/parts/category/{category}.json', name: 'kicad_api_category')] public function categoryParts(?Category $category): Response { if ($category) { $this->denyAccessUnlessGranted('read', $category); } else { $this->denyAccessUnlessGranted('@categories.read'); } $this->denyAccessUnlessGranted('@parts.read'); return $this->json($this->kiCADHelper->getCategoryParts($category)); } #[Route('/parts/{part}.json', name: 'kicad_api_part')] public function partDetails(Part $part): Response { $this->denyAccessUnlessGranted('read', $part); return $this->json($this->kiCADHelper->getKiCADPart($part)); } }