Skip to content

ThomasBerranger/Glouton-API

Repository files navigation


🍏 Glouton - API Symfony 7.1

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.

🛠 Stack Technique

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)

🚀 Implémentations Techniques

  • 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

📋 Documentation API - Endpoints Principaux

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
  }
]

📬 Contact

Thomas Berranger - Linkedin - tberranger@hotmail.fr

About

Symfony API designed for Glouton web app 🤖

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages