Skip to content

Latest commit

 

History

History
292 lines (239 loc) · 8.01 KB

File metadata and controls

292 lines (239 loc) · 8.01 KB

NestCraftX CLI - Démo du projet blog-demo (v0.2.5)

Objectif

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

1️⃣ Lancer la démo

Tu as deux façons de générer le projet de démo blog-demo :

Mode 1 : Interactif (Recommandé pour les premiers essais)

Le CLI te posera les questions pour chaque option manquante (ORM, Docker, etc.).

npx nestcraftx demo

Mode 2 : Silencieux (Configuration par flags)

Tu 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 npm

Dé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)

2️⃣ Structure du projet

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 )

3️⃣ Configuration de la base de données

PostgreSQL (Prisma ou TypeORM)

  1. Crée une base vide blog_demo :
createdb blog_demo
  1. 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
  1. 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

MongoDB (Mongoose)

  1. Vérifie que MongoDB est lancé (local ou Docker).
  2. Mets à jour .env si nécessaire :
MONGO_URI=mongodb://<user>:<password>@localhost:27017/blog_demo
  1. Lance le script seed (si présent) :
npm run seed

4️⃣ Lancer le projet

cd blog-demo
npm install
npm run start:dev

5️⃣ Endpoints principaux

  • Auth (si activé) :
    • POST /auth/register → Créer un compte
    • POST /auth/login → Se connecter
  • Users : /users
  • Posts : /posts
  • Comments : /comments

6️⃣ Astuces

  • Modifie le fichier .env pour 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