testes/.agent/scripts/create-service.js

132 lines
3.2 KiB
JavaScript

#!/usr/bin/env node
/**
* Script: Criar novo service para feature
* Uso: node create-service.js NomeService [feature]
* Exemplo: node create-service.js userService rh
*/
const fs = require('fs');
const path = require('path');
const [, , serviceName, feature] = process.argv;
if (!serviceName) {
console.error('❌ Nome do service é obrigatório!');
console.log('Uso: node create-service.js NomeService [feature]');
process.exit(1);
}
// Normalizar nome (adicionar Service se não tiver)
const normalizedName = serviceName.endsWith('Service')
? serviceName
: `${serviceName}Service`;
// Definir caminho
const basePath = feature
? path.join(__dirname, '../../src/features', feature)
: path.join(__dirname, '../../src/services');
const fileName = `${normalizedName}.js`;
const filePath = path.join(basePath, fileName);
// Criar pasta se não existir
if (!fs.existsSync(basePath)) {
fs.mkdirSync(basePath, { recursive: true });
}
// Template do service
const serviceTemplate = `import api from '@/services/api';
/**
* ${normalizedName} - Service para gerenciar dados
*/
const ${normalizedName} = {
/**
* Buscar lista
* @param {Object} filters - Filtros opcionais
* @returns {Promise<Array>}
*/
async getList(filters = {}) {
try {
const response = await api.get('/endpoint', { params: filters });
return response.data;
} catch (error) {
console.error('Erro ao buscar lista:', error);
throw error;
}
},
/**
* Buscar por ID
* @param {string|number} id - ID do registro
* @returns {Promise<Object>}
*/
async getById(id) {
try {
const response = await api.get(\`/endpoint/\${id}\`);
return response.data;
} catch (error) {
console.error('Erro ao buscar item:', error);
throw error;
}
},
/**
* Criar novo
* @param {Object} data - Dados para criar
* @returns {Promise<Object>}
*/
async create(data) {
try {
const response = await api.post('/endpoint', data);
return response.data;
} catch (error) {
console.error('Erro ao criar:', error);
throw error;
}
},
/**
* Atualizar
* @param {string|number} id - ID do registro
* @param {Object} data - Dados para atualizar
* @returns {Promise<Object>}
*/
async update(id, data) {
try {
const response = await api.put(\`/endpoint/\${id}\`, data);
return response.data;
} catch (error) {
console.error('Erro ao atualizar:', error);
throw error;
}
},
/**
* Deletar
* @param {string|number} id - ID do registro
* @returns {Promise<void>}
*/
async delete(id) {
try {
await api.delete(\`/endpoint/\${id}\`);
} catch (error) {
console.error('Erro ao deletar:', error);
throw error;
}
},
};
export default ${normalizedName};
`;
// Escrever arquivo
fs.writeFileSync(filePath, serviceTemplate);
console.log(`✅ Service ${normalizedName} criado com sucesso!`);
console.log(`📁 Caminho: ${filePath}`);
console.log(`\n📝 Próximos passos:`);
console.log(`1. Ajustar endpoints da API`);
console.log(`2. Adicionar métodos específicos se necessário`);
console.log(`3. Importar em hooks ou views`);