Cette démo montre comment générer un projet NestJS complet avec Clean Architecture, prêt à exécuter, incluant :
- Auth JWT
- Swagger UI
- Docker (optionnel)
- ORM (Prisma, TypeORM ou Mongoose)
- Seeds pour remplir la base de données avec des données d'exemple
Tu as deux façons de générer le projet de démo blog-demo :
Le CLI te posera les questions pour chaque option manquante (ORM, Docker, etc.).
npx nestcraftx demoTu peux tout définir en ligne de commande. Le CLI ne posera aucune question. (Exemple complet)
npx nestcraftx demo --light --auth --swagger --docker --orm prisma --packageManager npmDétail des Options :
-
--light → Mode MVP simplifié (--full par défaut si omis).
-
--auth → Auth JWT intégrée (true par défaut si omis).
-
--swagger → Swagger UI activé (true par défaut si omis).
-
--docker → Génère les fichiers Docker (true par défaut si omis).
-
--orm → Choisir l'ORM et la base de données (
prisma)
Après génération, ton projet aura :
src
├── auth
│ ├── application
│ │ ├── dtos
│ │ │ ├── create-session.dto.ts
│ │ │ ├── forgotPassword.dto.ts
│ │ │ ├── loginCredential.dto.ts
│ │ │ ├── refreshToken.dto.ts
│ │ │ ├── resetPassword.dto.ts
│ │ │ ├── sendOtp.dto.ts
│ │ │ └── verifyOtp.dto.ts
│ │ └── services
│ │ ├── auth.service.ts
│ │ └── session.service.ts
│ ├── domain
│ │ ├── entities
│ │ │ └── session.entity.ts
│ │ └── interfaces
│ │ └── session.repository.interface.ts
│ ├── infrastructure
│ │ ├── guards
│ │ │ ├── jwt-auth.guard.ts
│ │ │ └── role.guard.ts
│ │ ├── mappers
│ │ │ └── session.mapper.ts
│ │ ├── persistence
│ │ │ └── session.repository.ts
│ │ └── strategies
│ │ └── jwt.strategy.ts
│ ├── presentation
│ │ └── controllers
│ │ └── auth.controller.ts
│ └── auth.module.ts
│
├── comment
│ ├── application
│ │ ├── dtos
│ │ │ └── comment.dto.ts
│ │ ├── services
│ │ │ └── comment.service.ts
│ │ └── use-cases
│ │ ├── create-comment.use-case.ts
│ │ ├── delete-comment.use-case.ts
│ │ ├── getAll-comment.use-case.ts
│ │ ├── getById-comment.use-case.ts
│ │ └── update-comment.use-case.ts
│ ├── domain
│ │ ├── entities
│ │ │ └── comment.entity.ts
│ │ ├── enums
│ │ └── interfaces
│ │ └── comment.repository.interface.ts
│ ├── infrastructure
│ │ ├── adapters
│ │ │ └── comment.adapter.ts
│ │ ├── mappers
│ │ │ └── comment.mapper.ts
│ │ └── repositories
│ │ └── comment.repository.ts
│ ├── presentation
│ │ └── controllers
│ │ └── comment.controller.ts
│ └── comment.module.ts
│
├── common
│ ├── decorators
│ │ ├── current-user.decorator.ts
│ │ ├── public.decorator.ts
│ │ └── role.decorator.ts
│ ├── filters
│ │ └── all-exceptions.filter.ts
│ ├── interceptors
│ │ └── response.interceptor.ts
│ └── middlewares
│ └── logger.middleware.ts
│
├── post
│ ├── application
│ │ ├── dtos
│ │ │ └── post.dto.ts
│ │ ├── services
│ │ │ └── post.service.ts
│ │ └── use-cases
│ │ ├── create-post.use-case.ts
│ │ ├── delete-post.use-case.ts
│ │ ├── getAll-post.use-case.ts
│ │ ├── getById-post.use-case.ts
│ │ └── update-post.use-case.ts
│ ├── domain
│ │ ├── entities
│ │ │ └── post.entity.ts
│ │ ├── enums
│ │ └── interfaces
│ │ └── post.repository.interface.ts
│ ├── infrastructure
│ │ ├── adapters
│ │ │ └── post.adapter.ts
│ │ ├── mappers
│ │ │ └── post.mapper.ts
│ │ └── repositories
│ │ └── post.repository.ts
│ ├── presentation
│ │ └── controllers
│ │ └── post.controller.ts
│ └── post.module.ts
│
├── user
│ ├── application
│ │ ├── dtos
│ │ │ └── user.dto.ts
│ │ ├── services
│ │ │ └── user.service.ts
│ │ └── use-cases
│ │ ├── create-user.use-case.ts
│ │ ├── delete-user.use-case.ts
│ │ ├── getAll-user.use-case.ts
│ │ ├── getById-user.use-case.ts
│ │ └── update-user.use-case.ts
│ ├── domain
│ │ ├── entities
│ │ │ └── user.entity.ts
│ │ ├── enums
│ │ │ └── role.enum.ts
│ │ └── interfaces
│ │ └── user.repository.interface.ts
│ ├── infrastructure
│ │ ├── adapters
│ │ │ └── user.adapter.ts
│ │ ├── mappers
│ │ │ └── user.mapper.ts
│ │ └── repositories
│ │ └── user.repository.ts
│ ├── presentation
│ │ └── controllers
│ │ └── user.controller.ts
│ └── user.module.ts
│
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts
- Trois entités principales :
User,Post,Comment - Relations :
- User → Post (1:N )
- Post → Comment (1:N )
- User → Comment (1:N )
- Crée une base vide
blog_demo:
createdb blog_demo- Mets à jour le fichier
.env:
POSTGRES_USER=<votre_user>
POSTGRES_PASSWORD=<votre_mot_de_passe>
POSTGRES_DB=blog_demo
POSTGRES_HOST=localhost
POSTGRES_PORT=5432- Exécute les migrations et seeds :
- Prisma :
npx prisma migrate reset
npx prisma migrate dev --name init
npx prisma db seed | npm run seed- TypeORM :
npm run typeorm:migration:run
npm run typeorm:seed | npm run seed- Vérifie que MongoDB est lancé (local ou Docker).
- Mets à jour
.envsi nécessaire :
MONGO_URI=mongodb://<user>:<password>@localhost:27017/blog_demo- Lance le script seed (si présent) :
npm run seedcd blog-demo
npm install
npm run start:dev- Swagger UI disponible (si activé) : http://localhost:3000/api/docs
- Auth (si activé) :
- POST
/auth/register→ Créer un compte - POST
/auth/login→ Se connecter
- POST
- Users :
/users - Posts :
/posts - Comments :
/comments
- Modifie le fichier
.envpour connecter ta propre base. - Exécute le seed pour remplir la base avec des données d’exemple.
- Le projet est prêt à être lancé immédiatement après configuration.
NestCraftX v0.2.5 – Clean Architecture Generator for NestJS Documentation complète