AI Skill Report Card
Creating TypeScript Controller Endpoints
Quick Start10 / 15
TypeScriptexport const createEntityController = async ( body: Namespace.Entity.CreateEntityParams, ): Promise<AxiosResponse<Namespace.Entity.Entity, any>> => { const url = '/api/entity/'; const instance = genRequestInstance(); try { const response = await instance.post(url, body); return response; } catch (error) { console.error('Erro na requisição:', error); return Promise.reject(error); } };
Recommendation▾
Add template or code generation framework showing how to systematically transform entity specs into controller functions
Workflow12 / 15
- Identify entity and parameters - Extract entity name and required URL parameters
- Generate function signature - Create properly typed async function
- Build URL pattern - Construct endpoint URL with parameters
- Add JSDoc documentation - Document parameters, returns, and throws
- Implement request logic - Use genRequestInstance and handle response
Progress:
- Define function name as
create{EntityName}Controller - Add proper TypeScript typing for parameters and return
- Generate JSDoc comments
- Build URL with parameters in path
- Implement POST request with error handling
Recommendation▾
Include edge cases like nested resources, authentication requirements, and validation patterns
Examples15 / 20
Example 1: With URL parameter Input: Entity "AdicionalNoturno" with versao parameter Output:
TypeScript/** * Creates a new AdicionalNoturno record * @param {Planejamento.Versao.Versao['id']} versao - The version ID * @param {Pessoal.Premissas.AdicionalNoturno.CreateAdicionalNoturnoParams} params - The creation parameters * @returns {Promise<AxiosResponse<Pessoal.Premissas.AdicionalNoturno.AdicionalNoturno, any>>} The created AdicionalNoturno * @throws {Error} When request fails or authentication is invalid */ export const createAdicionalNoturnoController = async ( versao: Planejamento.Versao.Versao['id'], params: Pessoal.Premissas.AdicionalNoturno.CreateAdicionalNoturnoParams, ): Promise<AxiosResponse<Pessoal.Premissas.AdicionalNoturno.AdicionalNoturno, any>> => { const url = `/api/pessoal/versao/${versao}/adicional-noturno/`; const instance = genRequestInstance(); try { const response = await instance.post(url, params); return response; } catch (error) { console.error('Erro na requisição:', error); return Promise.reject(error); } };
Example 2: Without URL parameters Input: Entity "Area" with no parameters Output:
TypeScript/** * Creates a new Area record * @param {Planejamento.Cadastro.Area.CreateAreaParams} body - The area data to create * @returns {Promise<AxiosResponse<Planejamento.Cadastro.Area.Area, any>>} The created Area * @throws {Error} When request fails or authentication is invalid */ export const createAreaController = async ( body: Planejamento.Cadastro.Area.CreateAreaParams, ): Promise<AxiosResponse<Planejamento.Cadastro.Area.Area, any>> => { const url = '/api/planejamento/area/'; const instance = genRequestInstance(); try { const response = await instance.post(url, body); return response; } catch (error) { console.error('Erro na requisição:', error); return Promise.reject(error); } };
Recommendation▾
Provide defaults for common patterns like error response types and standard JSDoc templates rather than explaining what JSDoc is
Best Practices
- Function naming: Use
create{EntityName}Controllerpattern - Parameter order: URL parameters first, then body/payload last
- URL construction: Parameters go in path (
/api/entity/${param}/), body goes in POST request - Type imports: Use namespace.entity pattern for typing
- Error handling: Let genRequestInstance handle auth errors, only log and reject locally
- JSDoc: Always include @param, @returns, and @throws annotations
Common Pitfalls
- Don't add manual error handling beyond logging - genRequestInstance handles auth/network errors
- Don't put body parameters in URL query strings
- Don't forget trailing slash in API URLs
- Don't mix parameter types in function signature
- Don't skip JSDoc documentation
- Don't hardcode API base URL (handled by genRequestInstance)