Pfa Ecommerce Anas Hakim
Pfa Ecommerce Anas Hakim
À nos famille, pour son amour, son soutien inconditionnel et sa patience tout au long de mon
parcours.
À tous ceux qui me sont chers, et qui ont cru en moi, de près ou de loin.
Je tiens à exprimer mes sincères remerciements à toutes les personnes qui ont contribué, de près ou
de loin, à la réalisation de ce projet.
Je remercie tout particulièrement Madame Maiez, enseignant à la Faculté des Sciences de Mona-
stir, pour son accompagnement, ses conseils pertinents, sa disponibilité et sa bienveillance tout au
long de ce travail de Projet de Fin d’Année. Ses orientations précieuses ont largement contribué à la
concrétisation de ce projet.
Je remercie également l’ensemble du corps enseignant du département d’informatique pour les com-
pétences et connaissances qu’ils nous ont transmises durant ces deux années de formation en Licence
en Génie Logiciel et Systèmes d’Information (LGLSI).
Mes pensées reconnaissantes vont également à ma famille et à mes amis pour leur soutien moral et
leur encouragement permanent.
En premier lieu, je tiens à remercier mon encadrant universitaire, , pour la confiance qu’il m’a ac-
cordée en acceptant d’encadrer ce travail, pour ses multiples conseils et pour toutes les heures qu’il
a consacrées à diriger ce travail.
Ma reconnaissance va à ceux qui ont plus particulièrement assuré le soutien affectif de ce travail :
ma famille ainsi que mes amis. Mes parents...
Abstract
The present work is part of a graduation project carried out within the company Entreprise d’accueil
in order to obtain the national diploma of engineer at the
FSM faculté de science de Monastir . This project’s objective is to design and implement a ...
Keywords—
Résumé
Ce travail s’inscrit dans le cadre du projet de fin d’études réalisé au sein de Entreprise d’accueil en
vue de l’obtention du diplôme national d’ingénieur à l’
FSM faculté de science de Monastir . L’objectif de ce projet consiste à ...
Mots clés—
Contents
Introduction 1
2 Méthodologie et Développement 7
2.1 Méthodologie de Travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Organisation en Sprints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Sprint 1 : Initialisation du Projet . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 Sprint 2 : Gestion des Produits . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.3 Sprint 3 : Gestion des Commandes . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.4 Sprint 4 : Authentification et Sécurité . . . . . . . . . . . . . . . . . . . . . . 10
2.2.5 Sprint 5 : Optimisation et Tests . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Choix Technologiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.2 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.3 Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
i
Conclusion 15
.1 Librairies utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Bibliography 17
ii
Introduction
Aujourd’hui, nos modes de vie évoluent rapidement, et avec eux, notre manière de consommer. Faire
ses courses, acheter des vêtements, commander un repas ou même trouver un cadeau ne nécessitent
plus de se déplacer : tout peut se faire à distance, en quelques clics, grâce à l’essor du commerce
en ligne. Ce nouveau modèle d’achat, basé sur la facilité, la rapidité et le confort, a profondément
changé les habitudes des consommateurs.
Le commerce électronique ne se limite plus à une tendance, il est devenu une nécessité dans un
monde où le temps est précieux et les attentes sont élevées. Les utilisateurs recherchent des services
accessibles, disponibles 24h/24, et capables de répondre à leurs besoins de manière simple et efficace.
De leur côté, les vendeurs trouvent dans le e-commerce une opportunité de toucher un public plus
large, sans les limites d’un espace physique.
C’est dans cette dynamique que s’inscrit le projet Souq : une réponse à ce besoin croissant de
proximité entre les commerçants et les clients, dans un environnement moderne, organisé et pensé
pour l’utilisateur.
1
Chapter 1
2
interface utilisateur conviviale permettant une navigation fluide et un accès rapide aux produits ;
(2) implémenter des fonctionnalités avancées telles que la gestion des paniers, le suivi des comman-
des et l’intégration de systèmes de paiement sécurisés ; (3) garantir une architecture modulaire et
extensible pour faciliter l’évolution future de la plateforme ; et (4) assurer une expérience utilisateur
optimale grâce à des mécanismes de recherche, de filtrage et de recommandation personnalisée. En
résumé, "Souq" ambitionne de fournir une solution technologique robuste et adaptable qui s’aligne
sur les tendances modernes du commerce électronique tout en restant accessible et sécurisée pour ses
utilisateurs.
• Implémenter un backend sécurisé avec [Link] et [Link]: Le backend constitue le cœur fonc-
tionnel de la plateforme "Souq". Nous avons choisi [Link] comme environnement d’exécution
côté serveur en raison de sa légèreté, de sa performance élevée et de sa capacité à gérer un
grand nombre de requêtes simultanées.
Pour structurer le backend, nous avons utilisé [Link] , un framework minimaliste mais
puissant qui simplifie la gestion des routes, des middlewares et des interactions avec la base de
données. Une attention particulière a été portée à la sécurité en intégrant des mécanismes de
validation des données, des protections contre les attaques courantes (comme les injections SQL
ou les CSRF), et en implémentant des protocoles HTTPS pour sécuriser les communications
entre le client et le serveur.*
• La gestion des données est un pilier essentiel de toute application e-commerce. Pour répondre
aux besoins de flexibilité et de scalabilité, nous avons choisi MongoDB , une base de données
NoSQL orientée documents. MongoDB permet de stocker les données sous forme de documents
JSON, ce qui facilite leur manipulation et leur mise à jour.
Les principales collections gérées par MongoDB incluent :
Produits : Contient les informations relatives aux articles disponibles sur la plateforme (nom,
description, prix, images, etc.). Utilisateurs : Stocke les données des clients (nom, email, mot
de passe hashé, adresse, etc.) ainsi que leurs rôles (administrateur ou utilisateur standard).
Commandes : Enregistre les détails des transactions effectuées (liste des produits, statut de
la commande, date, etc.). Cette architecture permet une gestion efficace des données tout en
offrant une évolutivité adaptée à une croissance future de la plateforme.
3
• La sécurité des utilisateurs est une priorité absolue dans toute application web. Pour garantir
une authentification robuste, nous avons implémenté deux technologies complémentaires :
Bcrypt : Utilisé pour hasher les mots de passe avant leur stockage dans la base de données.
Cette approche rend impossible la récupération des mots de passe en clair, même en cas de
compromission de la base de données. JWT (JSON Web Tokens) : Permet de gérer les sessions
utilisateur de manière sécurisée. Lorsqu’un utilisateur se connecte, un token unique est généré
et renvoyé au client. Ce token est ensuite utilisé pour authentifier les requêtes ultérieures sans
avoir besoin de stocker les informations de session sur le serveur. Ces mécanismes assurent une
protection maximale des données sensibles tout en offrant une expérience utilisateur fluide.
• Pour offrir une expérience complète aux utilisateurs, plusieurs fonctionnalités clés ont été im-
plémentées :
Gestion du panier : Un système de panier dynamique permet aux utilisateurs d’ajouter, sup-
primer ou modifier les produits qu’ils souhaitent acheter. Les données du panier sont tem-
porairement stockées côté client (via des cookies ou le localStorage) ou synchronisées avec la
base de données pour les utilisateurs authentifiés. Gestion des commandes : Une fois qu’un
utilisateur passe une commande, les détails sont enregistrés dans la base de données, y compris
la liste des produits, le montant total et l’adresse de livraison. Les utilisateurs peuvent égale-
ment consulter l’historique de leurs commandes et leur statut (en cours, livré, etc.). Gestion du
profil utilisateur : Les utilisateurs peuvent mettre à jour leurs informations personnelles (nom,
adresse, etc.) et consulter leurs données depuis leur espace personnel. Cette fonctionnalité
repose sur une interface sécurisée accessible uniquement après authentification.
• Ajout des produits au panier : Le panier est une fonctionnalité centrale de toute application
e-commerce, car elle permet aux utilisateurs de sélectionner et d’organiser leurs achats avant
de passer à la caisse.
Gestion côté client : Le panier est initialement géré côté client via des cookies ou le localStorage
, ce qui permet aux utilisateurs non authentifiés d’ajouter des produits sans avoir besoin de
4
créer un compte. Les données du panier incluent des informations telles que le nom du produit,
sa quantité, son prix unitaire, et une référence unique. Synchronisation avec le backend : Pour
les utilisateurs authentifiés, le panier est synchronisé avec la base de données MongoDB afin
de garantir que les données persistent même après la fermeture du navigateur. Cela permet
également de récupérer le panier lors d’une connexion ultérieure. Fonctionnalités avancées : Les
utilisateurs peuvent modifier la quantité de chaque produit, supprimer des articles du panier,
ou vider complètement le panier. Ces actions sont gérées via des requêtes API sécurisées entre
le frontend et le backend.
• Passation de commandes et gestion de leur statut : La passation de commandes est une étape
cruciale pour transformer un utilisateur en client. Cette fonctionnalité inclut plusieurs étapes
techniques et logistiques.
Processus de commande : Lorsqu’un utilisateur passe une commande, les données du panier
sont validées côté serveur ([Link]/[Link]) pour s’assurer que les produits sont toujours
disponibles et que les informations fournies (adresse, méthode de paiement) sont correctes.
Stockage des commandes : Une fois validée, la commande est enregistrée dans la collection
"Commandes" de MongoDB. Chaque commande contient des détails tels que la liste des pro-
duits, le montant total, l’adresse de livraison, et le statut initial ("en attente"). Suivi du statut
: Les utilisateurs peuvent consulter l’historique de leurs commandes et leur statut actuel (par
exemple : "en préparation", "expédié", "livré"). Ce suivi est rendu possible grâce à une inter-
face dédiée dans le profil utilisateur, alimentée par des requêtes API qui interrogent la base de
données.
• Tableau de bord pour la gestion des produits et des commandes : Gestion des produits : Ajout
de nouveaux produits avec des champs obligatoires (nom, description, prix, images, catégorie).
Modification ou suppression des produits existants via des formulaires dynamiques. Visuali-
sation des stocks et des performances des produits (nombre de ventes, popularité). Gestion
des commandes : Affichage d’une liste complète des commandes avec des filtres (par date, par
statut, par utilisateur). Possibilité de mettre à jour le statut d’une commande (par exem-
ple : marquer comme "expédié"). Génération de rapports statistiques simples (ventes totales,
revenus mensuels, etc.). Interface intuitive : Le tableau de bord utilise des composants [Link]
et des bibliothèques comme [Link] ou React Table pour afficher les données sous forme de
graphiques et de tableaux interactifs.
1.4.2 Exclus
• Intégration d’un système de paiement réel (ex: PayPal, Stripe): L’intégration d’un système de
paiement réel a été exclue en raison de la complexité technique et des exigences de conformité
5
légale (comme la norme PCI DSS). À la place, un système de simulation de paiement a été mis
en place pour tester le processus de commande.
• Notifications en temps réel : Les notifications en temps réel, telles que les alertes sur l’état
des commandes ou les promotions, ont été exclues car elles nécessitent l’implémentation de
technologies avancées comme WebSockets ou des services tiers (par exemple Firebase). Cela
aurait ajouté une couche de complexité au projet, dépassant son cadre initial.
6
Chapter 2
Méthodologie et Développement
• Une fois l’environnement de développement configuré, nous avons procédé à l’initialisation des
deux principales parties du projet : le backend et le frontend.
Backend ([Link]) : Un projet [Link] a été créé avec un fichier [Link] pour gérer les
dépendances. Le framework [Link] a été installé via npm (npm install express) et configuré
7
2.2.2 Sprint 2 : Gestion des Produits
• La création d’un modèle de données robuste est une étape cruciale dans le développement
d’une application e-commerce. Le modèle de données définit la structure et les relations entre
les entités principales, garantissant ainsi une organisation claire et cohérente des informations.
Objectif : L’objectif était de concevoir un modèle de données qui représente les produits de
manière complète et flexible. Chaque produit doit inclure des attributs tels que : ID du produit
: Identifiant unique pour chaque produit. Nom : Le nom du produit. Description : Une brève
description du produit. Prix : Le prix unitaire du produit. Catégorie : La catégorie à laquelle
appartient le produit (ex. : électronique, vêtements, etc.). Stock : La quantité disponible
en stock. Images : Les images associées au produit pour une meilleure présentation. Tech-
nologies utilisées : Pour ce sprint, j’ai utilisé une base de données relationnelle (par exemple,
MySQL ou PostgreSQL) pour stocker les données des produits. Le modèle a été implémenté
en utilisant un ORM (Object-Relational Mapping) comme Sequelize (pour [Link]) ou Entity
Framework (pour .NET), ce qui permet de manipuler les données de manière orientée objet.
Résultat : Le modèle de données finalisé est maintenant prêt à être utilisé par d’autres mod-
ules de l’application, tels que l’affichage des produits et la gestion du panier. Cette étape a
également permis de garantir la scalabilité future de la plateforme, en prévoyant des champs
supplémentaires si nécessaire.
• Une fois le modèle de données en place, l’étape suivante consistait à développer l’interface
utilisateur (UI) pour afficher les produits de manière attrayante et intuitive.
Objectif : L’objectif était de créer une interface utilisateur qui permette aux utilisateurs de
parcourir facilement les produits, de filtrer par catégorie et de consulter les détails d’un produit
spécifique. Fonctionnalités développées : Affichage en grille ou liste : Les produits sont affichés
sous forme de grille ou de liste, selon la préférence de l’utilisateur. Pagination : Pour éviter
de surcharger la page avec trop de données, une pagination a été mise en place. Filtrage et
tri : Les utilisateurs peuvent filtrer les produits par catégorie, prix ou popularité, et trier les
résultats par ordre croissant ou décroissant. Détails du produit : En cliquant sur un produit,
l’utilisateur accède à une page détaillée contenant une description complète, des images supplé-
mentaires et des options d’achat. Technologies utilisées : J’ai utilisé des frameworks frontaux
comme [Link] ou [Link] pour développer l’interface utilisateur. Ces frameworks permettent
de créer des interfaces dynamiques et réactives. De plus, des bibliothèques CSS comme Boot-
strap ou TailwindCSS ont été utilisées pour assurer un design moderne et responsive. Résultat
: L’interface d’affichage des produits est désormais opérationnelle et offre une expérience util-
isateur fluide. Les utilisateurs peuvent naviguer facilement entre les différentes catégories et
consulter les détails des produits sans rencontrer de problèmes de performance.
• profile Qwen2.5-Max 12:18 pm Sprint 2 : Gestion des Produits Le deuxième sprint du projet
"Souq" a été consacré à la gestion des produits, une fonctionnalité centrale de toute plateforme
e-commerce. Ce sprint visait à structurer et mettre en œuvre les composants essentiels liés aux
produits, depuis leur modélisation jusqu’à leur affichage et interaction avec l’utilisateur. Voici
une analyse détaillée de chaque item :
1. Création du modèle de données pour les produits La création d’un modèle de données
robuste est une étape cruciale dans le développement d’une application e-commerce. Le modèle
de données définit la structure et les relations entre les entités principales, garantissant ainsi
une organisation claire et cohérente des informations.
8
Objectif : L’objectif était de concevoir un modèle de données qui représente les produits de
manière complète et flexible. Chaque produit doit inclure des attributs tels que : ID du produit
: Identifiant unique pour chaque produit. Nom : Le nom du produit. Description : Une brève
description du produit. Prix : Le prix unitaire du produit. Catégorie : La catégorie à laquelle
appartient le produit (ex. : électronique, vêtements, etc.). Stock : La quantité disponible en
stock. Images : Les images associées au produit pour une meilleure présentation. Technologies
utilisées : Pour ce sprint, j’ai utilisé une base de données relationnelle (par exemple, MySQL ou
PostgreSQL) pour stocker les données des produits. Le modèle a été implémenté en utilisant
un ORM (Object-Relational Mapping) comme Sequelize (pour [Link]) ou Entity Framework
(pour .NET), ce qui permet de manipuler les données de manière orientée objet. Résultat
: Le modèle de données finalisé est maintenant prêt à être utilisé par d’autres modules de
l’application, tels que l’affichage des produits et la gestion du panier. Cette étape a également
permis de garantir la scalabilité future de la plateforme, en prévoyant des champs supplémen-
taires si nécessaire. 2. Développement de l’interface d’affichage des produits Une fois le modèle
de données en place, l’étape suivante consistait à développer l’interface utilisateur (UI) pour
afficher les produits de manière attrayante et intuitive.
Objectif : L’objectif était de créer une interface utilisateur qui permette aux utilisateurs de
parcourir facilement les produits, de filtrer par catégorie et de consulter les détails d’un produit
spécifique. Fonctionnalités développées : Affichage en grille ou liste : Les produits sont affichés
sous forme de grille ou de liste, selon la préférence de l’utilisateur. Pagination : Pour éviter
de surcharger la page avec trop de données, une pagination a été mise en place. Filtrage et
tri : Les utilisateurs peuvent filtrer les produits par catégorie, prix ou popularité, et trier les
résultats par ordre croissant ou décroissant. Détails du produit : En cliquant sur un produit,
l’utilisateur accède à une page détaillée contenant une description complète, des images supplé-
mentaires et des options d’achat. Technologies utilisées : J’ai utilisé des frameworks frontaux
comme [Link] ou [Link] pour développer l’interface utilisateur. Ces frameworks permettent
de créer des interfaces dynamiques et réactives. De plus, des bibliothèques CSS comme Boot-
strap ou TailwindCSS ont été utilisées pour assurer un design moderne et responsive. Résultat
: L’interface d’affichage des produits est désormais opérationnelle et offre une expérience util-
isateur fluide. Les utilisateurs peuvent naviguer facilement entre les différentes catégories et
consulter les détails des produits sans rencontrer de problèmes de performance. 3. Intégration
de la fonctionnalité d’ajout au panier L’ajout au panier est une fonctionnalité clé de toute
plateforme e-commerce, car elle permet aux utilisateurs de sélectionner des produits avant de
passer à la caisse.
Objectif : L’objectif était d’intégrer une fonctionnalité d’ajout au panier qui soit simple, rapide
et fiable. Les utilisateurs doivent pouvoir ajouter des produits à leur panier en un clic et
visualiser les articles ajoutés. Fonctionnalités développées : Bouton "Ajouter au panier" : Un
bouton visible sur chaque produit permet d’ajouter celui-ci au panier. Mise à jour en temps
réel : Le panier est mis à jour en temps réel, sans nécessiter de rechargement de la page.
Gestion des quantités : Les utilisateurs peuvent ajuster la quantité d’un produit dans le panier
ou le supprimer complètement. Résumé du panier : Un récapitulatif du panier est affiché en
permanence, indiquant le nombre total d’articles et le montant total. Technologies utilisées
: Frontend : J’ai utilisé des bibliothèques JavaScript comme Redux ou Context API pour
gérer l’état global du panier. Cela permet de partager les données du panier entre différentes
parties de l’application. Backend : Une API RESTful a été développée pour gérer les requêtes
liées au panier, telles que l’ajout, la modification ou la suppression de produits. Base de
9
données : Les données du panier sont temporairement stockées côté client (dans le localStorage
ou une session) pour les utilisateurs non connectés, et synchronisées avec la base de données
lorsque l’utilisateur se connecte. Résultat : La fonctionnalité d’ajout au panier est maintenant
pleinement fonctionnelle et offre une expérience utilisateur optimale. Les utilisateurs peuvent
ajouter des produits, ajuster les quantités et consulter un récapitulatif de leur commande avant
de procéder au paiement.
• Mise en place du tableau de bord administrateur pour la gestion des commandes: Objectif :
Offrir aux administrateurs une interface centralisée pour gérer toutes les commandes reçues sur
la plateforme. Fonctionnalités développées : Vue globale des commandes : Liste des commandes
avec filtres par statut, date ou utilisateur. Détails des commandes : Accès aux informations
complètes d’une commande (produits, client, statut). Actions administratives : Possibilité de
modifier le statut d’une commande (ex. : marquer comme expédiée). Technologies utilisées
: Backend : Intégration d’une API sécurisée pour récupérer et mettre à jour les données
des commandes. Frontend : Utilisation de tableaux dynamiques (ex. DataTables) pour une
gestion efficace des données. Résultat : Le tableau de bord administrateur simplifie la gestion
des commandes et permet un suivi précis des transactions.
10
sions utilisateur. Fonctionnement : Lors de la connexion, l’utilisateur fournit ses identifiants
(email/mot de passe). Le backend vérifie ces informations et génère un token JWT contenant
les données utilisateur encodées. Ce token est renvoyé au client et stocké localement (ex. local-
Storage ou cookies). Pour chaque requête ultérieure, le token est envoyé dans l’en-tête HTTP
pour authentifier l’utilisateur. Technologies utilisées : Backend : Bibliothèques comme json-
webtoken (pour [Link]) pour générer et valider les tokens. Frontend : Stockage sécurisé du
token et ajout automatique dans les requêtes via des intercepteurs (ex. Axios). Résultat :
L’authentification par JWT permet une gestion sécurisée et sans état des sessions utilisateur,
tout en garantissant une expérience fluide.
• Sécurisation des routes backend pour utilisateurs et administrateurs : Objectif : L’objectif était
de protéger les routes backend en fonction des rôles (utilisateur ou administrateur), assurant
que seuls les utilisateurs autorisés puissent accéder à certaines ressources. Méthodologie :
Middleware d’authentification : Un middleware vérifie la validité du token JWT pour chaque
requête. Contrôle des rôles : Une logique supplémentaire vérifie le rôle de l’utilisateur (ex.
"user" ou "admin") avant d’autoriser l’accès à une route spécifique. Exemples : Les routes
utilisateur permettent uniquement la gestion du profil et des commandes personnelles. Les
routes administrateur donnent accès au tableau de bord et aux actions de gestion (validation des
commandes, gestion des produits). Technologies utilisées : Backend : Middleware personnalisé
pour la validation des tokens et des rôles. Base de données : Ajout d’un champ "role" dans
le modèle utilisateur pour distinguer les rôles. Résultat : Les routes backend sont désormais
sécurisées, empêchant tout accès non autorisé et renforçant la protection des données sensibles.
• Objectif : L’objectif était de tester les principales fonctionnalités de l’application pour détecter
et corriger les éventuels bugs ou anomalies. Tests réalisés : Tests manuels : Simulation des
scénarios d’utilisation courants (ex. navigation, ajout au panier, passage de commande, au-
thentification). Tests automatisés : Utilisation de frameworks comme Jest (pour le backend)
et Cypress ou Selenium (pour le frontend) pour automatiser les tests des fonctionnalités cri-
tiques. Scénarios testés : Connexion et inscription d’un utilisateur. Recherche et affichage des
produits. Ajout/suppression de produits dans le panier. Passage d’une commande et mise à
jour du statut. Validation des commandes par l’administrateur. Tests de performance : Simu-
lation de montée en charge pour évaluer la capacité de l’application à gérer un grand nombre
d’utilisateurs simultanément. Résultat : Les tests ont permis d’identifier et de corriger plusieurs
anomalies mineures, garantissant ainsi une meilleure stabilité et fiabilité de l’application. Les
11
tests automatisés ont également été intégrés dans le pipeline CI/CD pour détecter rapidement
les régressions futures.
• Tailwind CSS : Choisi pour accélérer la conception d’interfaces responsive sans avoir à écrire
beaucoup de CSS personnalisé. Tailwind propose des classes utilitaires prêtes à l’emploi qui
permettent de respecter facilement les bonnes pratiques de design moderne.
• Axios : Utilisé pour gérer les appels HTTP entre le frontend et le backend. Axios simplifie
l’envoi des requêtes asynchrones et offre une meilleure gestion des réponses et des erreurs que
l’API Fetch native.
2.3.2 Backend
• [Link] : Framework léger choisi pour créer des APIs RESTful de manière rapide et struc-
turée. Express facilite la gestion des routes, des middlewares et des requêtes HTTP côté
serveur.
• [Link] : Utilisé comme environnement d’exécution pour JavaScript côté serveur. [Link] est
non bloquant (asynchrone), ce qui permet de traiter un grand nombre de requêtes simultané-
ment, idéal pour les applications web modernes.
• MongoDB : Base de données NoSQL choisie pour sa flexibilité dans la gestion de données non
structurées. MongoDB permet de stocker les informations sous forme de documents JSON, ce
qui est très adapté à une application e-commerce évolutive.
2.3.3 Sécurité
• Bcrypt : Utilisé pour sécuriser les mots de passe en les hachant avant de les stocker en base
de données. Cela protège les utilisateurs en cas de fuite de données, car les mots de passe réels
ne sont jamais sauvegardés.
• JWT (JSON Web Token) : Employé pour l’authentification sécurisée des utilisateurs. JWT
permet de transmettre des informations d’identité de manière sécurisée entre le frontend et le
backend, tout en évitant d’avoir à stocker l’état de session sur le serveur.
12
Chapter 3
13
• Mise à jour automatique de la quantité et du total : Le panier se met à jour en temps
réel lorsque l’utilisateur modifie la quantité d’un produit. Le prix total du panier est recalculé
instantanément sans rechargement de la page, ce qui rend l’expérience plus fluide et agréable
pour l’utilisateur.
• Suivi de l’état des commandes (en attente, validée, livrée) : Chaque commande est
associée à un statut. Cela permet à l’utilisateur de suivre l’évolution de sa commande (par
exemple : en attente de validation, commande validée, commande expédiée ou livrée). Cette
gestion des statuts est essentielle pour renforcer la transparence et la confiance des clients.
• Accès restreint aux fonctionnalités liées aux commandes pour les utilisateurs con-
nectés : Seuls les utilisateurs authentifiés ont accès aux fonctionnalités sensibles comme la
validation du panier, le suivi des commandes, et la gestion de leur compte. Cela garantit la
confidentialité des informations personnelles et empêche tout accès non autorisé.
14
Conclusion et Perspectives
Le développement du Souq nous a permis de mettre en œuvre une architecture full-stack moderne et
de comprendre les défis liés à la création d’une plateforme e-commerce. L’application est fonctionnelle
et propose une navigation fluide, une interface utilisateur intuitive, ainsi qu’un backend performant.
Pour aller plus loin, plusieurs perspectives peuvent être envisagées : l’intégration d’un système de
paiement sécurisé, l’ajout d’un système de recommandation, ou encore le déploiement sur le cloud.
15
.1 Librairies utilisées
• Frontend : React, Axios, Tailwind CSS
16
Bibliography
[Christianto et al., 2024] Christianto, K., Chakir, A., Andry, J. F., Adikara, F., Liliana, L., and
Felicia, J. (2024). Modeling user experience in delivery applications using the design thinking
method and system usability scale. Journal of Computer Science, 20(7):722–729.
[Goffic, 2024] Goffic, M. L. (2024). Sécurité des applications web: stratégies offensives et défensives.
Éditions ENI.
[Krug, 2014] Krug, S. (2014). Don’t Make Me Think: A Common Sense Approach to Web Usability.
New Riders (Pearson), 3 edition.
[Laudon and Traver, 2021] Laudon, K. C. and Traver, C. G. (2021). E-commerce 2021: Business,
Technology and Society. Pearson, 16 edition.
[Macé, 2021] Macé, N. (2021). Développement et architecture des applications web modernes: retrou-
ver les fondamentaux. Eyrolles (Collection DataPro).
[Schorung, 2024] Schorung, M. (2024). Quick commerce and the evolving business models of the
food retail industry – investigating the quick commerce supply chain and the urban impacts of
dark stores. Transportation Research Procedia, 79:305–312.
17
18
Abstract
The present work is part of a graduation project carried out within the company Entreprise d’accueil
in order to obtain the national diploma of engineer at the
FSM faculté de science de Monastir . This project’s objective is to design and implement a ...
Keywords—
Résumé
Ce travail s’inscrit dans le cadre du projet de fin d’études réalisé au sein de Entreprise d’accueil en
vue de l’obtention du diplôme national d’ingénieur à l’
FSM faculté de science de Monastir . L’objectif de ce projet consiste à ...
Mots clés—