micro-generate
v1.3.11
Published
Microservices project with Node.js, Express, Mongoose, Redis, and GraphQL
Maintainers
Readme
🚀 Microservice Generator (micro-generate)
micro-generate es un CLI potente y ligero para crear microservicios listos para producción con Node.js, TypeScript, GraphQL (Apollo Server), MongoDB, MySQL (Sequelize) y Redis.
Olvídate del boilerplate. Genera infraestructuras completas, features modulares, queries y mutaciones en segundos con una arquitectura escalable y las mejores prácticas integradas.
📦 Instalación y Uso
No necesitas instalarlo globalmente. Recomendamos usar npx para ejecutar siempre la última versión:
npx micro-generate <comando>🛠️ Comandos Disponibles
1. Inicializar un Nuevo Proyecto
Crea la estructura base del microservicio, configurando TypeScript, Docker, Variables de Entorno y el Servidor.
npx micro-generate init- Interactivo: Te preguntará el nombre del proyecto y qué tecnologias habilitar:
- MongoDB: Soporte nativo con Mongoose.
- Multi-DB: Posibilidad de añadir múltiples bases de datos MongoDB (ej:
users,logs). - MySQL: Soporte completo con Sequelize.
- Multi-DB MySQL: Posibilidad de añadir múltiples bases de datos MySQL.
- Redis: Cliente para caching y pub/sub.
- Resultado: Un proyecto completo con
src/core,src/config,src/dby todo listo para corrernpm run dev.
2. Crear una Nueva Feature
Genera un módulo de dominio completo (Vertical Slice Architecture).
npx micro-generate feature- Te pedirá: Nombre del feature (ej:
users,orders). - Tecnologías: Puedes seleccionar si la feature usa MongoDB, MySQL o Redis.
- Multi-DB: Si tienes múltiples bases de datos:
- MongoDB: Te preguntará a cuál colección conectar (ej:
users). - MySQL: Te preguntará por separado a cuál base de datos conectar (ej:
archive). - Redis: Te preguntará a qué número de base de datos conectar (defecto
0).
- MongoDB: Te preguntará a cuál colección conectar (ej:
- Genera: Carpeta en
src/features/<nombre>con:typeDefs.ts: Esquemas GraphQL.resolvers.ts: Controladores.service.ts: Lógica de negocio (con inyección del modelo correcto).model.ts: Modelo Mongoose o Sequelize (según selección).
- Automático: Registra la feature en el
index.tsprincipal.
3. Agregar una Query (Consulta)
Agrega una nueva consulta GraphQL a una feature existente sin tocar el código manualmente.
npx micro-generate query- Flujo: Seleccionas la feature de una lista -> Escribes el nombre -> Defines el tipo de retorno.
- Magia: Inyecta automáticamente la definición en
typeDefsy el esqueleto de la función enresolvers.
4. Agregar una Mutation (Mutación)
Agrega una nueva mutación para modificar datos.
npx micro-generate mutation- Similar a
query, ideal para operaciones de creación, actualización o eliminación (CRUD).
5. 🤖 Referencia de Flags (Modo Headless)
Todos los comandos pueden ejecutarse sin prompts interactivos usando los siguientes flags.
init (Inicializar Proyecto)
| Flag | Descripción | Ejemplo |
|------|-------------|---------|
| -n, --name <nombre> | Nombre del proyecto | -n my-api |
| --mongo / --no-mongo | Habilita/Deshabilita MongoDB | --no-mongo |
| --mysql / --no-mysql | Habilita/Deshabilita MySQL | --mysql |
| --redis / --no-redis | Habilita/Deshabilita Redis | --redis |
| --mongo-dbs <lista> | DBs adicionales Mongo (separadas por coma)| --mongo-dbs "logs,users" |
| --mysql-dbs <lista> | DBs adicionales MySQL (separadas por coma)| --mysql-dbs "archive,stats" |
feature (Crear Feature)
| Flag | Descripción | Ejemplo |
|------|-------------|---------|
| -n, --name <nombre> | Nombre de la feature | -n orders |
| --mongo / --no-mongo | Habilita/Deshabilita MongoDB | --mongo |
| --mysql / --no-mysql | Habilita/Deshabilita MySQL | --mysql |
| --redis / --no-redis | Habilita/Deshabilita Redis | --redis |
| --db-connection <nombre>| Nombre de la conexión Mongo (Multi-DB) | --db-connection logs |
| --mysql-connection <nombre>| Nombre de la conexión MySQL (Multi-DB) | --mysql-connection main |
| --redis-db <número> | Número de base de datos Redis (0-15) | --redis-db 1 |
query y mutation
| Flag | Descripción | Ejemplo |
|------|-------------|---------|
| -f, --feature <nombre> | Feature objetivo | -f users |
| -n, --name <nombre> | Nombre de la query/mutation | -n getUser |
| -r, --return-type <tipo> | Tipo de retorno GraphQL | -r UserResponse |
Ejemplos:
# Crear feature con MySQL y Redis conectada a DB 'logs'
npx micro-generate feature --name "notifications" --mysql --redis --mysql-connection "logs"
# Agregar Query a feature existente
npx micro-generate query --feature "users" --name "getUserByEmail" --return-type "User"🧠 IA & Agent Ready
Cada proyecto generado incluye automáticamente una Skill de Antigravity en .agent/skills/micro-generate.
Esto permite que agentes de IA (como Antigravity o Cline) puedan leer las instrucciones y manipular el proyecto por ti usando los comandos del CLI.
🔥 Características Principales
- ⚡ Stack Moderno: Node.js 20+, TypeScript 5, Apollo Server 4.
- 🧠 GraphQL Modular: Arquitectura basada en features autotencidos.
- 🛡️ Type-Safety: Validación de variables de entorno con
Zod. - 🗄️ Bases de Datos:
- MongoDB (Mongoose): Conexiones primarias y secundarias automáticas.
- MySQL (Sequelize): Integración completa ORM con soporte multi-schema/multi-db.
- Redis (ioredis): Patrón Repository incluido con soporte para múltiples bases de datos dinámicas.
- 📝 Logging: Implementación de alto rendimiento con Pino (JSON logs).
- 🛑 Graceful Shutdown: Manejo correcto de señales SIGINT/SIGTERM para evitar conexiones colgadas.
- 🎮 Playground Control: Habilita/deshabilita el Apollo Sandbox vía variables de entorno.
📂 Estructura Generada
my-service/
├── src/
│ ├── config/ # Configuración de entorno y DBs
│ ├── core/ # Servidor central (MicroserviceServer)
│ ├── db/ # Clientes de base de datos
│ │ ├── mongo/ # Cliente y modelos MongoDB
│ │ ├── mysql/ # Cliente y modelos Sequelize
│ │ └── redis/ # Cliente y repositorio Redis
│ ├── features/ # Tu lógica de negocio aquí
│ │ ├── users/ # Ejemplo de Feature
│ │ │ ├── typeDefs.ts
│ │ │ ├── resolvers.ts
│ │ │ └── service.ts
│ │ └── index.ts # Auto-registro
│ ├── utils/ # Loggers y helpers
│ └── index.ts # Punto de entrada
├── .env # Variables de entorno
├── package.json
└── tsconfig.json🤝 Contribuyendo
- Haz un Fork.
- Crea tu rama de feature (
git checkout -b feature/amazing-feature). - Commit a tus cambios (
git commit -m 'feat: Add amazing feature'). - Push a la rama (
git push origin feature/amazing-feature). - Abre un Pull Request.
Generado con ❤️ por Jesus Leiva.
