Skip to content
Snippets Groups Projects
Commit ea667aa1 authored by Pierre Fleutot's avatar Pierre Fleutot
Browse files

API : User: get niveau langue. Lexique : extraction de n graphies

parent 4996a7d7
No related branches found
No related tags found
No related merge requests found
...@@ -128,4 +128,43 @@ class ApiLexiconController extends ApiBaseController ...@@ -128,4 +128,43 @@ class ApiLexiconController extends ApiBaseController
return $this->createJsonResponse(200, ['message' => sprintf("La liste %s a été importée dans le lexique %s en mode %s", $graphyList, $lexicon, $importMode)]); return $this->createJsonResponse(200, ['message' => sprintf("La liste %s a été importée dans le lexique %s en mode %s", $graphyList, $lexicon, $importMode)]);
} }
/**
* Récupère un nombre n de graphies d’un lexique
*
* @Route("/extract/{nb}", name="api_lexicon_extract_graphies", methods={"GET"})
* @OA\Parameter(name="nb", in="path", description="nb de graphies retournées", @OA\Schema(type="integer"))
* @OA\Parameter(name="lexiconId", in="query", required=true, description="id du lexique dans lequel chercher", @OA\Schema(type="string"))
*
* @OA\Response(response=200, description="success", @OA\JsonContent(type="string"))
* @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
*
* @OA\Tag(name="Lexicons")
* @Security(name="OAuth2")
*/
public function extractGraphies(Request $request, WiktionaryManager$wiktionaryManager, $nb): Response
{
$lexiconId = $request->get('lexiconId');
if (!$lexiconId) {
return $this->createJsonResponse(401, ['error' => sprintf("Le paramètre lexiconId ets obligatoire")]);
}
$lexicon = $this->doctrine->getRepository(Lexicon::class)->find($lexiconId);
if (!$lexicon) {
return $this->createJsonResponse(401, ['error' => sprintf("Pas de lexique trouvé pour cette Id")]);
}
$entries = $lexicon->getEntries()->toArray();
$graphies = [];
foreach ($entries as $entry) {
foreach ($entry->getHeadword()->getGraphies() as $graphy) {
$graphies[] = $graphy->getValue();
}
}
shuffle($graphies);
$selectedGraphies = array_slice($graphies, 0, $nb);
return $this->createJsonResponse(200, $selectedGraphies);
}
} }
<?php
namespace App\Controller;
use App\Entity\StudiedLanguage;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Security;
use OpenApi\Annotations as OA;
use Symfony\Component\Serializer\SerializerInterface;
/**
* @Route("/api/user")
*/
class ApiUserController extends ApiBaseController
{
/**
* Utilisée par une appli cliente pour lier un compte user au compte user balex correspondant grâce à l'IUID
*
* @Route("/details", name="api_user_details", methods={"GET"})
*
* @OA\Response(
* response=200,
* description="Success"
* )
* @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
* @OA\Tag(name="User")
* @Security(name="OAuth2")
*/
public function userDetails(): Response
{
/** @var User $user */
$user = $this->getUser();
return $this->json([
'message' => 'You successfully authenticated!',
'email' => $user->getEmail(),
'uuid' => $user->getUuid(),
'pseudo' => $user->getPseudo(),
]);
}
/**
* Si on précise la langue, retourne le niveau pour cette langue, sinon retourne tous les couples langue/niveau de l'utilisateur
*
* @Route("/level/{id}", name="api_user_level", methods={"GET"})
*
* @OA\Parameter(name="id", in="path", description="user id", @OA\Schema(type="string"))
* @OA\Parameter(name="language", in="query", description="langue pour laquelle on veut connaître le niveau", @OA\Schema(type="string"))
*
* @OA\Response(
* response=200,
* description="Success"
* )
* @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
* @OA\Tag(name="User")
* @Security(name="OAuth2")
*/
public function getStudiedLanguages(SerializerInterface $serializer, Request $request, User $user): Response
{
if ($user === null) {
return $this->createJsonResponse(401, ['error' => sprintf("Pas d'utilisateur trouvé pour cette Id")]);
}
$language = $request->get('language');
if ($language && !in_array($language, $this->getLanguages())) {
return $this->createJsonResponse(401, ['error' => sprintf("Pas de langue trouvée pour: %s", $language)]);
}
if ($language) {
$studiedLanguage = $this->doctrine->getRepository(StudiedLanguage::class)->findOneBy([
'user' => $user,
'language' => $language,
]);
return $this->createJsonResponse(200, [$studiedLanguage->getLevel()]);
} else {
$content = $serializer->serialize($user->getStudiedLanguages(), 'json', ['groups' => ["studiedLanguage:read"]]);
return new JsonResponse($content, 200, [], true);
}
}
}
\ No newline at end of file
...@@ -11,33 +11,6 @@ use OpenApi\Annotations as OA; ...@@ -11,33 +11,6 @@ use OpenApi\Annotations as OA;
class SecurityController extends AbstractController class SecurityController extends AbstractController
{ {
/**
* Utilisée par une appli cliente pour lier un compte user au compte user balex correspondant grâce à l'IUID
*
* @Route("/api/user-details", name="app_user_details", methods={"GET"})
*
* @OA\Response(
* response=200,
* description="Success"
* )
* @OA\Response(response=401, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=403, description="error", @OA\JsonContent(type="string"))
* @OA\Response(response=500, description="error", @OA\JsonContent(type="string"))
* @OA\Tag(name="User")
* @Security(name="OAuth2")
*/
public function userDetails(): Response
{
/** @var User $user */
$user = $this->getUser();
return $this->json([
'message' => 'You successfully authenticated!',
'email' => $user->getEmail(),
'uuid' => $user->getUuid(),
'pseudo' => $user->getPseudo(),
]);
}
/** /**
* @Route("/logout", name="app_logout", methods={"GET"}) * @Route("/logout", name="app_logout", methods={"GET"})
*/ */
......
...@@ -158,9 +158,9 @@ class Lexicon ...@@ -158,9 +158,9 @@ class Lexicon
} }
/** /**
* @return Collection<int, Entry> * @return Collection|Entry[]
*/ */
public function getEntries(): Collection public function getEntries()
{ {
return $this->entries; return $this->entries;
} }
......
...@@ -4,6 +4,7 @@ namespace App\Entity; ...@@ -4,6 +4,7 @@ namespace App\Entity;
use App\Repository\LabelRepository; use App\Repository\LabelRepository;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
/** /**
* @ORM\Entity() * @ORM\Entity()
...@@ -19,11 +20,13 @@ class StudiedLanguage ...@@ -19,11 +20,13 @@ class StudiedLanguage
private $id; private $id;
/** /**
* @Groups({"studiedLanguage:read"})
* @ORM\Column(type="string", length=100) * @ORM\Column(type="string", length=100)
*/ */
private $language; private $language;
/** /**
* @Groups({"studiedLanguage:read"})
* @ORM\Column(type="string", length=20) * @ORM\Column(type="string", length=20)
*/ */
private $level; private $level;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment