UNPKG

ruch

Version:

Revolutionary React TypeScript CLI with hexagonal architecture & AI-powered development assistance. Create maintainable, scalable applications with domain-driven design and integrated AI tooling.

59 lines (52 loc) 2.37 kB
export const getAdapterTemplate = (domainName: string): string => { const capitalizedName = domainName.charAt(0).toUpperCase() + domainName.slice(1); return `import type { ${capitalizedName}Entity, ${capitalizedName}CreationData, ${capitalizedName}UpdateData } from '../entities/${capitalizedName}'; import type { ${capitalizedName}Port } from '../ports/${capitalizedName}Port'; import { ${capitalizedName}Error } from '../services/${capitalizedName}Service'; import { httpClient } from '../../lib/http-client'; /** * HTTP Adapter implementation for ${capitalizedName} domain */ export class ${capitalizedName}Adapter implements ${capitalizedName}Port { private readonly endpoint = '/${domainName}'; async getAll(): Promise<${capitalizedName}Entity[]> { try { const response = await httpClient.get<${capitalizedName}Entity[]>(this.endpoint); return response.data; } catch (error) { throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to fetch ${domainName} list\`); } } async getById(id: string): Promise<${capitalizedName}Entity> { try { const response = await httpClient.get<${capitalizedName}Entity>(\`\${this.endpoint}/\${id}\`); return response.data; } catch (error) { throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to fetch ${domainName} with id \${id}\`); } } async create(data: ${capitalizedName}CreationData): Promise<${capitalizedName}Entity> { try { const response = await httpClient.post<${capitalizedName}Entity>(this.endpoint, data); return response.data; } catch (error) { throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to create ${domainName}\`); } } async update(id: string, data: ${capitalizedName}UpdateData): Promise<${capitalizedName}Entity> { try { const response = await httpClient.put<${capitalizedName}Entity>(\`\${this.endpoint}/\${id}\`, data); return response.data; } catch (error) { throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to update ${domainName} with id \${id}\`); } } async delete(id: string): Promise<void> { try { await httpClient.delete(\`\${this.endpoint}/\${id}\`); } catch (error) { throw new ${capitalizedName}Error('REQUEST_ERROR', \`Failed to delete ${domainName} with id \${id}\`); } } }`; };