Marketplace en ligne spécialisée dans la vente de tapis artisanaux et modernes.
TapisMarket est un projet académique réalisé dans le cadre de la SAE du Semestre 3 du BUT Informatique.
| Formation | BUT Informatique |
| Équipe | 5 étudiants |
| Année | 2025-2026 |
- AIGNELOT Youenn
- BERNARD Adam
- FILMONT Félix
- LACHAISE Mattys
- PLU Niels
TapisMarket est une marketplace permettant la mise en relation entre vendeurs professionnels et clients particuliers autour de produits de type tapis (artisanaux, modernes, d'intérieur, d'extérieur...).
- Création de compte et authentification
- Navigation et recherche dans le catalogue par catégorie
- Consultation des fiches produits détaillées
- Gestion du panier d'achat
- Processus de commande (checkout) avec choix du mode de livraison
- Suivi des commandes (PAID → PREPARING → SHIPPED → DELIVERED)
- Gestion des adresses de livraison
- Système d'avis et de notation
- Tableau de bord avec statistiques
- Gestion des produits (CRUD)
- Upload et gestion des photos produits
- Gestion des commandes reçues
- Personnalisation de la boutique (nom, description)
- Consultation des avis clients
- Dashboard de supervision global
- Gestion et validation des comptes vendeurs
- Modération des produits (APPROVED / PENDING_VALIDATION)
- Gestion des catégories
- Suivi de toutes les commandes
- Modération des avis (PUBLISHED / REFUSED)
| Composant | Technologie |
|---|---|
| Backend | PHP 8.4 |
| Framework | CodeIgniter 4 |
| Base de données | MySQL 8.0 |
| Serveur web | Apache |
| Conteneurisation | Podman / Docker |
| Tests | PHPUnit 10 |
| Documentation | Sphinx |
TapisMarket/
├── conteneur/ # Configuration Docker/Podman
│ ├── compose.dev.yml # Orchestration développement (app + MySQL + PHPMyAdmin)
│ ├── compose.prod.yml # Orchestration production
│ ├── dev.env # Variables d'environnement développement
│ ├── prod.env # Variables d'environnement production
│ └── app_php/ # Image PHP/Apache
│
├── src/ # Code source de l'application
│ ├── app/
│ │ ├── Config/ # Configuration CodeIgniter
│ │ ├── Controllers/ # Contrôleurs (Admin, Client, Seller + partagés)
│ │ ├── Entities/ # Entités métier (User, Product, Order…)
│ │ ├── Models/ # Modèles de données (14 modèles)
│ │ ├── Views/ # Vues organisées par rôle
│ │ ├── Filters/ # Middlewares (auth, validation vendeur)
│ │ ├── Helpers/ # Fonctions utilitaires (auth, cart, alert, icon)
│ │ ├── Enums/ # Enums PHP (UserRole, ShippingType)
│ │ ├── Libraries/ # Librairies (patron Template Method – livraison)
│ │ └── Database/ # Migrations & Seeds
│ │
│ ├── public/ # Point d'entrée web (index.php)
│ ├── tests/ # Tests PHPUnit
│ └── writable/ # Fichiers générés (logs, cache, uploads)
│ └── seed_images/ # Images sources pour le seeding (à créer)
│
├── rapport/ # Documentation projet
│ ├── analyse/ # Diagrammes UML (Visual Paradigm)
│ └── design-patern/ # Documentation architecture
│
├── Dockerfile # Image de production (Railway)
└── dev.sh # Script de démarrage rapide en développement
- Podman et podman-compose (ou Docker / docker-compose)
Le script dev.sh automatise le démarrage complet :
# 1. Cloner le projet
git clone <url-du-repo>
cd TapisMarket
# 2. Lancer l'environnement de développement
bash dev.shCe script :
- Démarre les conteneurs (application + MySQL + PHPMyAdmin)
- Installe les dépendances Composer si absent
- Applique les migrations
- Alimente la base avec le DataSeeder
| Service | URL |
|---|---|
| Application | http://localhost:8080 |
| PHPMyAdmin | http://localhost:8082 |
# 1. Cloner le projet
git clone <url-du-repo>
cd TapisMarket
# 2. Copier les sources dans le conteneur
cp -R src conteneur/app_php/src
# 3. Lancer les conteneurs de production
podman-compose -f conteneur/compose.prod.yml --env-file conteneur/prod.env up -d
# 4. Initialiser la base de données
podman-compose -f conteneur/compose.prod.yml exec web-prod php spark migrate
podman-compose -f conteneur/compose.prod.yml exec web-prod php spark db:seed DataSeederOuvrir http://localhost:8080
Les fichiers conteneur/dev.env et conteneur/prod.env définissent les variables de configuration :
| Variable | Description |
|---|---|
ENVIRONMENT |
Environnement CI4 (development / production) |
DB_ROOT_PASSWORD |
Mot de passe root MySQL |
DB_USER |
Utilisateur MySQL |
DB_PASSWORD |
Mot de passe MySQL |
DB_DATABASE |
Nom de la base de données |
Le mot de passe est 123456 pour tous les comptes générés par le seeder.
| Rôle | Mot de passe | |
|---|---|---|
| Administrateur | admin@tapis.com |
123456 |
| Vendeur (validé) | seller0@mail.com |
123456 |
| Vendeurs (autres) | seller1@mail.com … seller9@mail.com |
123456 |
| Clients | client0@mail.com … client29@mail.com |
123456 |
Images produits : Pour que les produits aient des images lors du seeding, créer le dossier
src/writable/seed_images/et y déposer des fichiers.jpg,.jpeg,.pngou.webpavant de lancerdb:seed DataSeeder.
# Migrations
php spark migrate
# Jeu de données standard (~10 vendeurs, 30 clients, ~80 produits)
php spark db:seed DataSeeder
# Jeu de données volumeux (pour tests de performance)
php spark db:seed BigDataSeeder
# Réinitialiser la base
php spark migrate:refresh --seed DataSeederLe calcul des frais de livraison est implémenté via le patron Template Method dans src/app/Libraries/TemplateMethod/Shipping/.
| Type | Classe |
|---|---|
| Standard | StandardShipping |
| Express | ExpressShipping |
| Gratuite | FreeShipping |
| Internationale | InternationalShipping |
Toutes les variantes héritent de ShippingTemplateMethod qui définit l'algorithme commun de calcul.
La base de données est initialisée par une unique migration (InitialiseMarketplace) créant 13 tables :
users · customers · sellers · administrators · addresses · categories · products · product_photos · carts · cart_items · orders · order_items · reviews
Les entités clés utilisent des champs enum pour le suivi d'état :
| Entité | États |
|---|---|
| Produits | PENDING_VALIDATION → APPROVED / REFUSED |
| Vendeurs | PENDING_VALIDATION → VALIDATED / REFUSED |
| Commandes | PAID → PREPARING → SHIPPED → DELIVERED (ou CANCELLED) |
| Avis | PENDING → PUBLISHED / REFUSED |
Projet réalisé avec ❤️ dans le cadre du BUT Informatique