HomeAboutProjectsCVContact
Back to Projects

Directory + HAPI trail

October 2024 - December 2024

Design of a directory to view events you participate in, automatically linked to the events site via its API

Contributors:

Clément Garro, Daniil Hirchyts, Marius Brouty

Symfony
Twig
API Platform
JWT
REST
Vue.js
docker
git
css
php
react
vite
ts
js

Project Overview

Directory is a web application designed to allow users to view events they participate in. The application is automatically linked to the events site via its API, which allows users to consult event details, dates and locations, as well as information about participants. The application is designed to be scalable and maintainable thanks to its API, facilitating its integration into the existing infrastructure of the events site. Each user can create a profile, manage their information, and customize their profile visibility (visible or hidden).

Key Features

  • User registration and authentication with profile management
  • Event management via a REST API developed in Symfony
  • Display of event details: name, dates, locations, number of participants, etc.
  • Ability for organizers to create, modify and delete events
  • Profile visibility management (visible/hidden) and public participant lists
  • Event registration and unregistration system with schedule conflict verification
  • Secure authentication via JWT
  • Modern and responsive user interface
  • Real-time data validation (unique codes, availabilities, etc.)
  • API connection with automatic generation of validation groups and serialization

Context

University project completed as a trio to develop an online directory application coupled with an event management API. This project relies on the use of the Gesdinet JWT Refresh Token Bundle for efficient and secure token management, based on a PostgreSQL database.

Mission

  • Design an online directory web application with Symfony and Twig
  • Create a REST API to manage events and users with Symfony and API Platform
  • Ensure communication between the website and the API for smooth data synchronization

Main Features

  • User profile creation with visibility management
  • Display of profiles listed on the main page
  • Consultation of events and registrations for each user
  • Unregistration possibility and available places management
  • Role system (users, organizers, administrators) to control available actions

Lessons Learned from this Experience

  • I deepened my mastery of Symfony, a PHP framework renowned for its flexibility and integrated tools, by combining it with API Platform. API Platform, thanks to its advanced features (such as automatic documentation via Swagger or GraphQL integration), allowed structuring a robust REST API respecting modern standards. This process also involved in-depth reflections on REST concepts, such as endpoint structuring, use of appropriate HTTP methods (GET, POST, PUT, DELETE), and HTTP response code management for better communication between client and server.
  • Securing authentication was a major focus of the project. By implementing JSON Web Tokens (JWT), the team ensured secure and scalable user session management. This choice avoided vulnerabilities related to traditional approaches based on cookies or server sessions. Additionally, JWT offers significant advantages, including the ability to store encoded information directly in the token (claims), which optimizes access rights verification. The team also worked on integrating refresh tokens to provide a smooth user experience while maintaining a high level of security.
  • One of the major challenges was modeling and managing complex relationships between project entities, such as relationships between users, comments, and other associated data. The team used Doctrine annotations to establish these relationships (OneToMany, ManyToOne, ManyToMany, etc.), while respecting REST principles. For example, using identifiers in relationships and serialization minimized response size and improved API readability.
  • I learned to leverage serialization groups offered by Symfony to meet specific client needs. This approach allowed customizing data returned by the API based on contexts (example: an authenticated user sees more details than an unauthenticated user). Additionally, denormalization was used to optimize performance when retrieving complex data, particularly in scenarios where nested queries were necessary. These techniques not only improved performance but also made the API more adaptable to front-end consumer needs.

Relations between personal achievements and the program of BUT Computer Science

AC 31.01 : Choisir et implémenter les architectures adaptées

Level: Compris

Link with the project

Ce projet nécessite le choix d’une architecture adaptée pour gérer à la fois le front-end et le back-end de l'application avec Symfony, en choisissant les ressources techniques appropriées aux besoins du projet.

CE 1.04 : Choisir les ressources techniques appropriées

Utilisation de Symfony et Twig pour le développement du site, en choisissant les ressources techniques adaptées aux besoins du projet.

AC 31.02 : Faire évoluer une application existante

Level: Acquis

Link with the project

Ce projet implique de créer une application web et de la faire évoluer en ajoutant de nouvelles fonctionnalités, en modélisant les profils utilisateurs et les situations complexes.

CE 2.01 : Formaliser et modéliser des situations complexes

Modélisation des profils utilisateurs et des fonctionnalités associées pour faire évoluer l'application.

AC 32.02 : Profiler, analyser et justifier le comportement d'un code existant

Level: Compris

Link with the project

Il est nécessaire d'analyser les performances du code et de justifier les choix techniques pour optimiser le projet, en validant les résultats.

CE 2.04 : Justifier les choix et valider les résultats

Analyse des performances du code et justification des choix techniques pour optimiser le comportement des différentes fonctions.

AC 33.03 : Appliquer une politique de sécurité au niveau de l'infrastructure

Level: Maîtrisé

Link with the project

Étant donné que ce projet traite des données personnelles, il est essentiel de mettre en place des pratiques de sécurité robustes pour sécuriser le système d'information.

CE 3.01 : Sécuriser le système d'information

Mise en place de pratiques de sécurité robustes pour protéger les données personnelles des utilisateurs.

AC 34.02 : Préparer et extraire les données pour l'exploitation

Level: Acquis

Link with the project

Le projet nécessite l'extraction de données utilisateur, qui doivent être structurées et manipulées efficacement, en respectant les réglementations sur la vie privée.

CE 4.01 : Respecter les réglementations sur la vie privée et la protection des données personnelles

Extraction et manipulation des données utilisateur tout en respectant les réglementations sur la protection des données personnelles.

AC 36.01 : Organiser et partager une veille technologique et informationnelle

Level: Compris

Link with the project

Il est nécessaire d'organiser une veille technologique pour rester à jour avec les bonnes pratiques et intégrer des solutions innovantes, en communiquant efficacement avec les différents acteurs du projet.

CE 5.01 : Communiquer efficacement avec les différents acteurs d'un projet

Organisation d'une veille technologique pour rester à jour avec les bonnes pratiques et intégrer des solutions innovantes.

AC 31.01 : Choisir et implémenter les architectures adaptées

Level: Compris

Link with the project

Ce projet nécessite le choix d’une architecture adaptée pour gérer à la fois le front-end et le back-end de l'application avec Symfony, en choisissant les ressources techniques appropriées aux besoins du projet.

CE 1.04 : Choisir les ressources techniques appropriées

Utilisation de Symfony et API Platform pour le développement de l'API, en choisissant les ressources techniques adaptées aux besoins du projet.

AC 31.02 : Faire évoluer une application existante

Level: Acquis

Link with the project

Ce projet implique de créer une application web et de la faire évoluer en ajoutant de nouvelles fonctionnalités, en modélisant les événements et les interactions entre utilisateurs.

CE 2.01 : Formaliser et modéliser des situations complexes

Modélisation des événements et des interactions entre utilisateurs et événements pour faire évoluer l'application.

AC 32.02 : Profiler, analyser et justifier le comportement d'un code existant

Level: Compris

Link with the project

Il est nécessaire d'analyser les performances du code et de justifier les choix techniques pour optimiser le projet, en validant les résultats.

CE 2.04 : Justifier les choix et valider les résultats

Analyse des performances du code et justification des choix techniques pour optimiser le comportement des différentes fonctions.

AC 33.03 : Appliquer une politique de sécurité au niveau de l'infrastructure

Level: Maîtrisé

Link with the project

Étant donné que ce projet traite des données personnelles, il est essentiel de mettre en place des pratiques de sécurité robustes pour sécuriser le système d'information.

CE 3.01 : Sécuriser le système d'information

Mise en place de pratiques de sécurité robustes pour protéger les données personnelles des utilisateurs.

AC 34.02 : Préparer et extraire les données pour l'exploitation

Level: Acquis

Link with the project

Le projet nécessite l'extraction de données utilisateur, qui doivent être structurées et manipulées efficacement, en respectant les réglementations sur la vie privée.

CE 4.01 : Respecter les réglementations sur la vie privée et la protection des données personnelles

Extraction et manipulation des données utilisateur tout en respectant les réglementations sur la protection des données personnelles.

AC 35.02 : Savoir intégrer un projet informatique dans le système d'information d'une organisation

Level: Compris

Link with the project

L'intégration de l'API dans un système d'information global est essentielle pour réussir ce projet, en communiquant efficacement avec les différents acteurs.

CE 5.01 : Communiquer efficacement avec les différents acteurs d'un projet

Intégration de l'API dans un système d'information global, en communiquant efficacement avec les différents acteurs du projet.

AC 36.01 : Organiser et partager une veille technologique et informationnelle

Level: Compris

Link with the project

Il est nécessaire d'organiser une veille technologique pour rester à jour avec les bonnes pratiques et intégrer des solutions innovantes, en communiquant efficacement avec les différents acteurs du projet.

CE 5.01 : Communiquer efficacement avec les différents acteurs d'un projet

Organisation d'une veille technologique pour rester à jour avec les bonnes pratiques et intégrer des solutions innovantes.