AI Skill Report Card

Generating TypeScript POST Controllers

B+78·May 6, 2026·Source: Web
15 / 15
TypeScript
export const createUserController = async ( body: User.CreateUserParams, ): Promise<AxiosResponse<User.User, any>> => { const url = '/api/users/'; 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 a template section with clear placeholders for quick copy-paste generation
12 / 15

Case 1: No URL parameters

  1. Function takes only body parameter
  2. URL is static string
  3. Apply standard error handling pattern

Case 2: With URL parameters

  1. URL parameters come first as separate arguments
  2. Body parameter comes last
  3. Build URL with template literals using parameters
  4. Apply standard error handling pattern

Progress:

  • Determine if URL has parameters
  • Define function signature with proper parameter order
  • Add JSDoc documentation
  • Implement try-catch with console.error and Promise.reject
  • Generate basic unit tests
Recommendation
Include parameter extraction rules (how to derive function names and types from API specs)
20 / 20

Example 1: No URL parameters Input: Function name createArea, namespace Planejamento.Cadastro.Area Output:

TypeScript
/** * Creates a new area * @param body - Area creation parameters * @returns Promise with area data * @throws Error when request fails */ 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); } };

Example 2: With URL parameters Input: Function name createColaboradorVaga, parameter versao, namespace Pessoal.Colaborador.Vaga Output:

TypeScript
/** * Creates a new colaborador vaga for a specific version * @param versao - Version ID * @param body - Colaborador vaga creation parameters * @returns Promise with colaborador vaga data * @throws Error when request fails */ export const createColaboradorVagaController = async ( versao: Planejamento.Versao.Versao['id'], body: Pessoal.Colaborador.Vaga.CreateColaboradorVagaParams, ): Promise<AxiosResponse<any, any>> => { const url = `/api/pessoal/versao/${versao}/colaborador-vaga/`; 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 error handling variations (different error types, status code handling) rather than just generic catch-all
  • Always use genRequestInstance() for consistent request configuration
  • URL should end with / for POST endpoints
  • Use template literals for URLs with parameters
  • Return type should be AxiosResponse<ResponseType, any>
  • Body parameter type should follow pattern Namespace.CreateEntityParams
  • Function names should end with Controller
  • Use Portuguese error messages: "Erro na requisição:"
  • Don't use async/await without try-catch
  • Don't return raw error objects - always use Promise.reject(error)
  • Don't forget trailing slash in URLs
  • Don't mix parameter order - URL params always come before body
  • Don't skip JSDoc documentation
  • Don't use generic types for body parameters
TypeScript
describe('createEntityController', () => { it('should create entity successfully', async () => { const mockBody = { name: 'Test' }; const mockResponse = { data: { id: 1, name: 'Test' } }; jest.spyOn(axios, 'post').mockResolvedValue(mockResponse); const result = await createEntityController(mockBody); expect(result).toEqual(mockResponse); expect(axios.post).toHaveBeenCalledWith('/api/entity/', mockBody); }); it('should handle errors properly', async () => { const mockError = new Error('Network error'); jest.spyOn(axios, 'post').mockRejectedValue(mockError); await expect(createEntityController({})).rejects.toThrow('Network error'); }); });
0
Grade B+AI Skill Framework
Scorecard
Criteria Breakdown
Quick Start
15/15
Workflow
12/15
Examples
20/20
Completeness
4/20
Format
15/15
Conciseness
12/15