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
text/typescript
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}\`);
}
}
}`;
};