add_use_case
Generates a complete hexagonal use-case slice in a NestJS domain, including ports, services, adapters, controller, DTOs, entities, errors, and modules; merges extra cases into existing modules.
Instructions
Genera un caso de uso completo (vertical slice hexagonal) en un dominio: puerto inbound/outbound, domain service, application service + interface + spec, adapter (TypeORM por defecto; SP opt-in con nombreSp), controller JSON:API + DTOs, entidad de dominio y TypeORM, catálogos de error, y los módulos del dominio. Escribe en src// (carpeta siempre lowercase; las clases salen en PascalCase sin importar el case de "dominio"). MULTI-CASO: al añadir el 2º/3er caso al MISMO dominio, el MCP MERGEA ese caso en los módulos del dominio ya generados (controller, adapter, providers, tokens, forFeature) — tanto en greenfield como en refactor. En refactor NUNCA toca app.module (eso lo cablea el agente). API EXTERNA: con adapterType="http" (apiExterna, rutaApi, metodoHttp) el caso consume una API con el fetch nativo y NO necesita base de datos, conexion ni motor; declara _BASE_URL en config, Joi y .env.example. SP: con adapterType="sp" el wiring es quirúrgico — apunta el módulo al .sp.adapter y quita del forFeature SOLO la entidad de ese caso, preservando las de los casos TypeORM. INFRA (refactor): usa infraStyle="project" + infraRoot (p.ej. "common") para que los imports de infra apunten a la carpeta del proyecto; aun así, concilia a mano los NOMBRES de clase (ResponseJsonApiBase/GenericException de los templates vs los del proyecto).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| caso | Yes | Nombre del caso de uso en INGLES y PascalCase, p.ej. "RetrieveProduct" (los archivos resultan kebab-case: retrieve-product.*). | |
| mode | No | Modo de generación. "greenfield" (default): servicio nuevo, cablea app.module y mergea módulos del dataset. "refactor": proyecto existente — NO toca app.module ni módulos ajenos; genera el slice hexagonal para que el agente lo adapte a la infra del proyecto. | greenfield |
| motor | No | Motor de la conexión. Greenfield: obligatorio si la conexión es nueva (el MCP la crea completa); "none" = sin base de datos (rechaza adapters TypeORM/SP). Refactor: solo se pasa, junto con "conexion", cuando el usuario pidió EXPRESAMENTE crear una conexión que el proyecto no tiene; si no, se reutiliza la del proyecto y el motor se ignora. Valores: mssql | postgres | mysql | none. | |
| param | Yes | Parámetro principal del método en camelCase, p.ej. "sku". (Legado: usado solo para el fixture del test generado.) | |
| accion | Yes | Ruta del endpoint POST (camel o kebab), p.ej. "retrieveProduct". | |
| metodo | Yes | Método del puerto en camelCase, p.ej. "retrieveBySku". | |
| dominio | Yes | Nombre del bounded context en INGLES y PascalCase, p.ej. "Catalog" o "StoreConfiguration" (varias palabras = PascalCase; la carpeta resulta kebab-case: store-configuration). Si el usuario lo dio en espanol, traducelo y confirmalo en el plan. | |
| entidad | Yes | Nombre de la entidad de dominio en INGLES y PascalCase, p.ej. "Product". | |
| request | No | Entidad de dominio request del método principal en PascalCase, p.ej. "RetrieveProductRequest". Canon: los métodos del puerto reciben una entidad tipada, no un string. Por defecto <Caso>Request. | |
| rutaApi | No | Solo adapterType="http": ruta del endpoint de la API externa que llama el metodo, empieza con "/", sin query string, p.ej. "/rates". | |
| conexion | No | OPCIONAL: no se le pregunta al usuario. Sin valor, la conexión se llama como su motor (Mssql, Postgres, Mysql): se reutiliza la única conexión de ese motor o se crea una nueva. Pásalo solo para una conexión ADICIONAL de un motor que ya tiene una (Mssql2, Mssql3; inspect_project dice cuál toca) y solo si el usuario la pide. En refactor NO lo pases: la conexión del proyecto se detecta y se reutiliza (solo si el proyecto tiene varias, indica cuál). PascalCase, sin el sufijo Connection. | |
| envVarSp | No | Nombre de la variable de entorno que porta el SP (MAYÚSCULAS, solo si adapterType="sp"). Por defecto se deriva de nombreSp como <NOMBRE_SP>_SP. | |
| nombreSp | No | Nombre del stored procedure (solo si adapterType="sp"). El MCP lo registra en ConfigurationVariables.storedProcedures + joiSchema + .env.example. | |
| infraRoot | No | Solo con infraStyle="project": carpeta (relativa a src/) de la infra transversal propia del proyecto que reemplaza a "shared" en los imports generados, p.ej. "common". Por defecto "common". | |
| overwrite | No | Si true, sobrescribe archivos existentes. Por defecto false (no pisa). | |
| apiExterna | No | Solo adapterType="http": nombre PascalCase de la API externa, p.ej. "ExchangeRates". Su URL base vive en la variable de entorno <NOMBRE>_BASE_URL (EXCHANGE_RATES_BASE_URL), validada con Joi al arrancar. | |
| infraStyle | No | Capa de infraestructura transversal (logger, excepciones, respuesta JSON:API base, config) que importan los archivos generados. "dataset" (default, greenfield): usa la capa shared del dataset (src/shared/*). "project" (refactor): los imports apuntan a la carpeta de infra propia del proyecto (ver infraRoot); el agente aún debe conciliar los NOMBRES de sÃmbolo (p.ej. ResponseJsonApiBase vs ResponseJsonApi del proyecto). | dataset |
| metodoHttp | No | Solo adapterType="http": verbo de la llamada. GET (default) envia la request como query string; POST y PUT la envian como cuerpo JSON. | |
| adapterType | No | Tipo de acceso a datos. "typeorm" por defecto. "sp" (stored procedure) es OPT-IN: requiere nombreSp. "http" consume una API externa con fetch nativo y NO usa base de datos: requiere apiExterna y rutaApi (y no necesita conexion ni motor). | typeorm |
| projectRoot | Yes | Ruta absoluta de la raÃz del servicio NestJS destino donde se escriben los archivos. | |
| tipoRecurso | No | Type JSON:API del recurso en kebab-case, en ingles (p.ej. "exchange-rate"). Si se omite: la entidad en kebab-case. Con generate_from_spec sale del resource_type del spec. | |
| prefijoError | Yes | Prefijo de errores de la API en mayúsculas. Por ejemplo, CATALOG. Los errores quedarán como CATALOG-PRODUCTNOTFOUND-001; el número va de 001 a 999 y lo asigna el MCP en secuencia por prefijo. | |
| crearConexion | No | SOLO refactor, y SOLO si el usuario pidio EXPRESAMENTE crear una conexion. Un refactor reutiliza la conexion que el proyecto ya tiene y, si no tiene ninguna, NO crea una por su cuenta. Con true el MCP crea la conexion completa, nombrada por el motor, asi que tambien hay que pasar el motor (se le pregunta al usuario si no lo dijo). | |
| connectionStyle | No | Forma de la conexión TypeORM del proyecto. "named" (default): conexión nombrada (<Conexion>Connection). "default": conexión por defecto de forRoot (los adapters no inyectan nombre de conexión). Úsalo según lo que reporte inspect_project. | named |