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