Projet full-stack (Next.js + Express + MongoDB) autour d'un univers MMORPG fictif.
- Site vitrine (accueil, actus, pages legales)
- Authentification (signup/login) avec JWT
- Boutique (liste d'items, achat, solde)
- Inventaire utilisateur
- Classes jouables (liste + details)
- Ladders (general, succes, soccherium)
- Administration (creation d'items et de classes)
- Front: Next.js (App Router), React, TypeScript, Redux Toolkit, SCSS
- Back: Express, MongoDB (Mongoose), JWT, bcrypt
- Node.js 18+
- MongoDB Atlas (ou MongoDB local)
A la racine du projet:
npm installcd Client
npm install
npm run devcd Server
npm install
npm run devCote serveur, creer un fichier Server/.env :
MONGO_URI=mongodb+srv://<user>:<pass>@<cluster>/<db>
JWT_SECRET=change-me
CLIENT_URL=http://localhost:3000
PORT=5000
Cote client, creer un fichier Client/.env.local :
NEXT_PUBLIC_API_URL=http://localhost:5000
- Lancer le back en dev:
npm run dev(dansServer/) - Lancer le front en dev:
npm run dev(dansClient/)
- Le JWT contient
userId,identifier,role. - Roles possibles:
user,admin. - Les routes d'ecriture pour items/classes sont protegees par role admin.
- Visite du site vitrine (accueil, actus, pages legales).
- Inscription puis connexion (creation de compte et recuperation du JWT).
- Consultation des classes et des ladders.
- Acces a la boutique, achat d'items (mise a jour du solde).
- Consultation de l'inventaire.
- (Admin) Acces a
/adminpour creer des items/classes.
POST /auth/signupPOST /auth/login
GET /shop/items(public)POST /shop/items(admin)POST /shop/buy/:itemId(auth)
GET /account/inventory(auth)
GET /api/classes(public)GET /api/classes/carousel(public)GET /api/classes/:slug(public)POST /api/classes(admin)PATCH /api/classes/:id(admin)DELETE /api/classes/:id(admin)
GET /api/ladders/general(public)GET /api/ladders/success(public)GET /api/ladders/soccherium(public)
POST /api/stats/user/initPATCH /api/stats/user/match-playedPATCH /api/stats/user/levelPATCH /api/stats/user/successPOST /api/stats/team/initPATCH /api/stats/team/soccherium
- Page admin:
/admin(accessible uniquement sirole === 'admin'). - Creer des items et des classes depuis l'interface.
Dans Server/scripts/ :
backfillUserRole.js: ajoute le roleuseraux comptes existants.promoteAdmin.js <identifier>: passe un compte en admin.backfillUserStats.js: cree les stats pour les users existants.backfillAvatar.js: ajouteavatarURLmanquant.seedSoccherium.js: seed equipes Soccherium.
- Le projet est a vocation pedagogique (pas d'achats reels).
- Pour l'admin, il faut se reconnecter apres promotion afin d'obtenir un token avec le role.