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.

91 lines (81 loc) 2.44 kB
export const getServicesTemplate = (domainName: string): string => { const capitalizedName = domainName.charAt(0).toUpperCase() + domainName.slice(1); return `/** * Services and business logic for the ${capitalizedName} domain. * @packageDocumentation */ import type { ${capitalizedName}Entity, ${capitalizedName}CreationData, ${capitalizedName}UpdateData } from '../entities/${capitalizedName}'; import type { ${capitalizedName}Port } from '../ports/${capitalizedName}Port'; export class ${capitalizedName}Error extends Error { constructor( public code: string, message: string, ) { super(message); this.name = '${capitalizedName}Error'; } } /** * Service implementation for ${capitalizedName} domain */ export class ${capitalizedName}Service { constructor(private readonly port: ${capitalizedName}Port) {} /** * Get all ${domainName} entities */ async getAll(): Promise<${capitalizedName}Entity[]> { try { return await this.port.getAll(); } catch (error) { throw new ${capitalizedName}Error('GET_ALL_ERROR', 'Failed to get all ${domainName} entities'); } } /** * Get a ${domainName} entity by ID */ async getById(id: string): Promise<${capitalizedName}Entity> { try { return await this.port.getById(id); } catch (error) { throw new ${capitalizedName}Error('GET_BY_ID_ERROR', \`Failed to get ${domainName} entity with id \${id}\`); } } /** * Create a new ${domainName} entity */ async create(data: ${capitalizedName}CreationData): Promise<${capitalizedName}Entity> { try { return await this.port.create(data); } catch (error) { throw new ${capitalizedName}Error('CREATE_ERROR', 'Failed to create ${domainName} entity'); } } /** * Update an existing ${domainName} entity */ async update(id: string, data: ${capitalizedName}UpdateData): Promise<${capitalizedName}Entity> { try { return await this.port.update(id, data); } catch (error) { throw new ${capitalizedName}Error('UPDATE_ERROR', \`Failed to update ${domainName} entity with id \${id}\`); } } /** * Delete a ${domainName} entity */ async delete(id: string): Promise<void> { try { await this.port.delete(id); } catch (error) { throw new ${capitalizedName}Error('DELETE_ERROR', \`Failed to delete ${domainName} entity with id \${id}\`); } } } `; };