API RESTful alimentant l'application Glouton pour réduire le gaspillage alimentaire en aidant les utilisateurs à mieux gérer leurs aliments du quotidien.
Permet d'enregistrer les produits scannés, créer des recettes personnalisées, générer des listes de courses intelligentes et suivre les dates d'expiration pour éviter le gaspillage.
Catégorie | Technologies |
---|---|
Core Framework | PHP 8.2+ (types stricts + attributs) Symfony 7.1.* (framework bundle + components) Doctrine ORM 3.2 (entités + migrations + discriminator) |
Persistance & BDD | MySQL 8.0.33 Doctrine Migrations Bundle 3.3 (schéma versioning) Doctrine Fixtures + Faker (jeux données) |
Sécurité & Auth | Symfony Security Bundle 7.1 (JWT + Voters) AccessTokenHandler custom (auth stateless) |
Testing & Qualité | PHPUnit 9.5 (tests unitaires + fonctionnels) PHPStan 1.12 niveau max (analyse statique) PHP CS Fixer 3.66 (PSR-12 + standards) |
DevOps & Déploiement | GitHub Actions (CI/CD pipeline) Heroku (déploiement continu) Symfony Runtime (optimisation prod) |
API & Serialization | Symfony Serializer 7.1 (groupes contextuels + normalizer custom) Validator Component 7.1 (validation métier) |
-
GitHub CI/CD Mise en place d'une intégration et d'un déploiement continu via les actions GitHub.
-
Authentification via Token Intégration d'un système d'authentification via le AccessTokenHandler de Symfony et une gestion des Tokens.
-
Doctrine Discriminator Implémentation d'un héritage entre l'entité mère Product et les entités filles ScannedProduct et CustomProduct.
-
Tests automatisés et DataFixtures Conception de tests unitaires et fonctionnels avec PHPUnit. Création de fixtures ordonnées et liées via références pour les tests et utilisation du package Faker.
-
Permissions utilisateurs Attribution de rôles aux utilisateurs et vérification des droits via des Voters.
-
Groupes de serialisation et validation Utilisation des groupes de serialisation et validation sur les propriétés des modèles.
-
Normalizers custom Développement de normalizers spécialisés pour la dénormalisation des entités Category et des collections de Product.
-
Relations Liaisons des entités via les types OneToOne, ManyToOne et ManyToMany avec la persistence de données configurée et la suppression d'éléments orphelins.
-
Listeners Mise en place de Listeners Doctrine sur la création d'objets.
-
DTOs et MapRequestPayload Utilisation de DTOs et de l'attribut MapRequestPayload avec contextes de sérialisation pour une validation structurée des données entrantes.
-
Enum et MapQueryParameter Implémentation d'enums typés et utilisation de MapQueryParameter pour les paramètres de requête avec validation automatique.
-
Repository custom Développement de repositories spécialisés avec méthodes de recherche avancées incluant recherche, tri et pagination.
-
Traits réutilisables Création de traits pour mutualiser la logique de validation et autres fonctionnalités communes entre contrôleurs.
-
Attributs PHP 8.2+ Usage systématique des attributs modernes pour une configuration déclarative des routes, sécurité et mapping de données.
-
Prochainement
Implémentation du cache Redis
Utilisation de Messenger pour l'envoi d'emails asynchrones et la gestion des tâches en arrière-plan
Endpoint | Méthode | Description |
---|---|---|
POST /login |
Authentification | Génération token JWT |
POST /scanned-products |
Création produit | Discriminator + validation contexte |
GET /products |
Liste avec filtres | Repository custom + enums + pagination |
PATCH /products/{id} |
Modification produit | Sérialisation groupes + validation + voters |
GET /products/shopping-list |
Liste de courses | Logique métier + filtres |
DELETE /products/{id} |
Suppression | Voters + cascade relations |
POST /recipes |
Création recette | MapRequestPayload + validation + relations |
Exemples d'appels
POST /login
{
"email": "user@example.com",
"password": "password123"
}
POST /scanned-products
{
"name": "Coca Cola Original",
"barcode": "54491472",
"nutriscore": "e",
"novagroup": 4,
"ecoscore": "d",
"description": "Boisson gazeuse sucrée au cola",
"image": "https://static.openfoodfacts.org/images/products/544/914/72/front_fr.jpg",
"finishedAt": "2024-12-10T14:30:00Z",
"addedToListAt": "2024-12-01T08:00:00Z",
"category": "01234567-89ab-cdef-0123-456789abcdef",
"expirationDates": [
{"date": "2024-12-15T10:30:00Z"},
{"date": "2024-12-20T10:30:00Z"}
]
}
POST /recipes
{
"name": "Salade César",
"description": "Salade fraîche avec croûtons",
"duration": "00:15:00",
"products": ["01234567-89ab-cdef-0123-456789abcdef", "fedcba98-7654-3210-fedc-ba9876543210"]
}
Exemples de réponses
Login successful
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}
Produit créé
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Coca Cola",
"scanned": true,
"nutriscore": "e",
"closestExpirationDate": "2024-12-15",
"category": {"id": "uuid", "name": "Boissons"}
}
Liste produits
[
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Coca Cola",
"closestExpirationDate": "2024-12-15",
"scanned": true
}
]
Thomas Berranger - Linkedin - tberranger@hotmail.fr