generateFileName
Create standardized file names for microservices by combining components like microservice, layer, domain, and action according to AI naming conventions.
Instructions
Generates file names according to AI naming convention
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| microservice | Yes | Microservice name (auth, user, payment, etc.) | |
| sequence | No | Sequence (001-999, v1-v99, main/alt) or relationship (001-1, 001a, 001s1) | 001 |
| layer | Yes | Architecture layer | |
| domain | Yes | Domain-subdomain (user-login, payment-card, etc.) | |
| action | Yes | CRUD operation | |
| feature | No | Detailed feature | |
| env | No | Environment | |
| ext | Yes | File extension |
Implementation Reference
- src/tools/index.js:7-64 (handler)The core handler function that implements the generateFileName tool logic. It generates file names based on parameters like folder, index, layer, domain, feature, action, detail, env, and ext, handling special cases for static and test files.
export async function generateFileName({ folder = '03_ACTIVE', index = '001', layer = 'BE', domain, feature, action = 'R', detail = 'Service', env = 'DEV', ext = 'js', isTest = false, isStatic = false, staticType = null }) { const msg = getMessages(); // 02_STATIC 파일 처리 (ChatGPT Enhancement) if (folder === '02_STATIC' || isStatic) { const prefix = staticType === 'template' ? 'TEMPLATE_' : staticType === 'config' ? 'CONFIG_' : 'ASSET_'; const staticName = domain || 'file'; return { fileName: `${prefix}${staticName}.${ext}`, folder: '02_STATIC', fullPath: `02_STATIC/${prefix}${staticName}.${ext}`, description: `Static ${staticType || 'asset'} file`, requiresPrefix: true }; } // 04_TEST 파일 처리 (ChatGPT Enhancement) if (folder === '04_TEST' || isTest) { const testType = detail || 'Unit'; const testFileName = `${index}_TEST_${domain}-${feature}_${testType}_${env}.test.${ext}`; return { fileName: testFileName, folder: '04_TEST', fullPath: `04_TEST/${testFileName}`, description: `Test file for ${domain}-${feature} (${testType})`, indexedNaming: true }; } // 도메인과 기능 정규화 (03_ACTIVE 파일) const normalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1).toLowerCase(); const normalizedFeature = feature.charAt(0).toUpperCase() + feature.slice(1).toLowerCase(); // 표준 파일명 생성 (v5 패턴) const fileName = `${index}_${layer}_${normalizedDomain}-${normalizedFeature}_${action}_${detail}_${env}.${ext}`; return { fileName, folder, fullPath: `${folder}/${fileName}`, description: `${layer} ${normalizedDomain} ${normalizedFeature} ${detail} for ${env} environment`, hasDependency: index.includes('-') || index.includes('s') || /[a-z]$/.test(index) }; } - src/index.js:64-111 (registration)Registers the generateFileName tool in the MCP server, including name, description from messages, and detailed inputSchema defining parameters and enums.
name: 'generateFileName', description: msg.tools.generateFileName.description, inputSchema: { type: 'object', properties: { microservice: { type: 'string', description: msg.parameters.microservice, enum: ['auth', 'user', 'payment', 'order', 'product', 'notification', 'analytics', 'gateway', 'search', 'recommendation'] }, sequence: { type: 'string', description: msg.parameters.sequence, default: '001' }, layer: { type: 'string', description: msg.parameters.layer, enum: ['controller', 'service', 'repository', 'model', 'dto', 'middleware', 'util', 'config', 'validator', 'helper'] }, domain: { type: 'string', description: msg.parameters.domain }, action: { type: 'string', description: msg.parameters.action, enum: ['create', 'read', 'update', 'delete', 'validate', 'transform', 'calculate', 'send', 'fetch', 'process'] }, feature: { type: 'string', description: msg.parameters.feature, enum: ['validation', 'encryption', 'caching', 'logging', 'notification', 'export', 'import', 'batch', 'async', 'sync'] }, env: { type: 'string', description: msg.parameters.env, enum: ['dev', 'test', 'staging', 'prod', 'common'] }, ext: { type: 'string', description: msg.parameters.ext, enum: ['js', 'ts', 'py', 'java', 'go', 'yml', 'json', 'sql', 'md'] } }, required: ['microservice', 'layer', 'domain', 'action', 'ext'] } }, - src/index.js:598-600 (handler)The switch case in the MCP tool request handler that dispatches calls to the generateFileName function.
case 'generateFileName': result = await generateFileName(args); break; - src/index.js:66-110 (schema)Input schema validation for the generateFileName tool, defining types, enums, and required parameters.
inputSchema: { type: 'object', properties: { microservice: { type: 'string', description: msg.parameters.microservice, enum: ['auth', 'user', 'payment', 'order', 'product', 'notification', 'analytics', 'gateway', 'search', 'recommendation'] }, sequence: { type: 'string', description: msg.parameters.sequence, default: '001' }, layer: { type: 'string', description: msg.parameters.layer, enum: ['controller', 'service', 'repository', 'model', 'dto', 'middleware', 'util', 'config', 'validator', 'helper'] }, domain: { type: 'string', description: msg.parameters.domain }, action: { type: 'string', description: msg.parameters.action, enum: ['create', 'read', 'update', 'delete', 'validate', 'transform', 'calculate', 'send', 'fetch', 'process'] }, feature: { type: 'string', description: msg.parameters.feature, enum: ['validation', 'encryption', 'caching', 'logging', 'notification', 'export', 'import', 'batch', 'async', 'sync'] }, env: { type: 'string', description: msg.parameters.env, enum: ['dev', 'test', 'staging', 'prod', 'common'] }, ext: { type: 'string', description: msg.parameters.ext, enum: ['js', 'ts', 'py', 'java', 'go', 'yml', 'json', 'sql', 'md'] } }, required: ['microservice', 'layer', 'domain', 'action', 'ext'] } - src/tools/index.js:1-64 (helper)Imports for messages and naming rules used within the generateFileName handler.
import { getMessages, formatMessage } from '../messages/index.js'; import namingRules from '../rules/convention.js'; // ========== v4 기존 도구들 (하위 호환성) ========== // 파일명 생성 함수 (v5.0.1 ChatGPT Enhancement) export async function generateFileName({ folder = '03_ACTIVE', index = '001', layer = 'BE', domain, feature, action = 'R', detail = 'Service', env = 'DEV', ext = 'js', isTest = false, isStatic = false, staticType = null }) { const msg = getMessages(); // 02_STATIC 파일 처리 (ChatGPT Enhancement) if (folder === '02_STATIC' || isStatic) { const prefix = staticType === 'template' ? 'TEMPLATE_' : staticType === 'config' ? 'CONFIG_' : 'ASSET_'; const staticName = domain || 'file'; return { fileName: `${prefix}${staticName}.${ext}`, folder: '02_STATIC', fullPath: `02_STATIC/${prefix}${staticName}.${ext}`, description: `Static ${staticType || 'asset'} file`, requiresPrefix: true }; } // 04_TEST 파일 처리 (ChatGPT Enhancement) if (folder === '04_TEST' || isTest) { const testType = detail || 'Unit'; const testFileName = `${index}_TEST_${domain}-${feature}_${testType}_${env}.test.${ext}`; return { fileName: testFileName, folder: '04_TEST', fullPath: `04_TEST/${testFileName}`, description: `Test file for ${domain}-${feature} (${testType})`, indexedNaming: true }; } // 도메인과 기능 정규화 (03_ACTIVE 파일) const normalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1).toLowerCase(); const normalizedFeature = feature.charAt(0).toUpperCase() + feature.slice(1).toLowerCase(); // 표준 파일명 생성 (v5 패턴) const fileName = `${index}_${layer}_${normalizedDomain}-${normalizedFeature}_${action}_${detail}_${env}.${ext}`; return { fileName, folder, fullPath: `${folder}/${fileName}`, description: `${layer} ${normalizedDomain} ${normalizedFeature} ${detail} for ${env} environment`, hasDependency: index.includes('-') || index.includes('s') || /[a-z]$/.test(index) }; }