ajoute l'API publique /api/v1 (bloc B, premier chantier)
Catalogue en lecture seule (labs, banque de quiz officielle, cours) - choix d'Adam pour la première version, zéro donnée d'élève. Laravel Sanctum, un jeton Bearer par développeur créé depuis /jetons-api (un prof), portée catalogue:lire seulement. Quota par jeton (pas par compte ni par IP) dans Redis via un limiteur nommé, 60 requêtes/minute. Documentation : spécification OpenAPI 3.0 et page publique /api/docs. Désactive /sanctum/csrf-cookie (config/sanctum.php) : l'API est en jeton Bearer seulement, jamais en cookie de SPA. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
3b961209f5
commit
ecf3dfb21d
22 changed files with 874 additions and 2 deletions
23
portail/app/Http/Resources/Api/V1/CoursResource.php
Normal file
23
portail/app/Http/Resources/Api/V1/CoursResource.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources\Api\V1;
|
||||
|
||||
use App\Models\Cours;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
/** @mixin Cours */
|
||||
class CoursResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'identifiant' => $this->identifiant,
|
||||
'titre' => $this->titre,
|
||||
'contenu_markdown' => $this->when($request->routeIs('api.v1.cours.show'), $this->contenu_markdown),
|
||||
];
|
||||
}
|
||||
}
|
||||
25
portail/app/Http/Resources/Api/V1/LabResource.php
Normal file
25
portail/app/Http/Resources/Api/V1/LabResource.php
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources\Api\V1;
|
||||
|
||||
use App\Models\Lab;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
/** @mixin Lab */
|
||||
class LabResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'identifiant' => $this->identifiant,
|
||||
'titre' => $this->titre,
|
||||
'niveau' => $this->niveau,
|
||||
'duree_min' => $this->duree_min,
|
||||
'competences' => $this->competences,
|
||||
];
|
||||
}
|
||||
}
|
||||
29
portail/app/Http/Resources/Api/V1/QuizResource.php
Normal file
29
portail/app/Http/Resources/Api/V1/QuizResource.php
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Resources\Api\V1;
|
||||
|
||||
use App\Models\Quiz;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
/**
|
||||
* Catalogue seulement : titre, thème, nombre de questions — jamais les
|
||||
* questions ni les réponses (banque officielle, lecture publique).
|
||||
*
|
||||
* @mixin Quiz
|
||||
*/
|
||||
class QuizResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'titre' => $this->titre,
|
||||
'theme' => $this->theme,
|
||||
'questions_count' => $this->whenCounted('questions'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue