🔌 Como Criar Novos Endpoints - ecosif-moviments

📋 Visão Geral

Este guia explica como criar novos endpoints REST no serviço ecosif-moviments.


📝 Passo a Passo

1. Criar DTO (se necessário)

// src/main/java/io/ecosif/moviments/company/dto/NewEntityDTO.java
package io.ecosif.moviments.company.dto;

import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;

@Getter
@Setter
public class NewEntityDTO {

    @NotNull
    private Long id;

    private String name;

    // Getters e setters (Lombok gera automaticamente)
}

2. Criar Service (se necessário)

// src/main/java/io/ecosif/moviments/company/service/NewEntityService.java
package io.ecosif.moviments.company.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import io.ecosif.moviments.company.dto.NewEntityDTO;
import io.ecosif.moviments.company.repository.NewEntityRepository;

@Service
@Transactional
public class NewEntityService {

    @Autowired
    private NewEntityRepository repository;

    @Autowired
    private ModelMapper modelMapper;

    public NewEntityDTO create(NewEntityDTO dto) {
        // Lógica de negócio
        NewEntity entity = modelMapper.map(dto, NewEntity.class);
        NewEntity saved = repository.save(entity);
        return modelMapper.map(saved, NewEntityDTO.class);
    }
}

3. Criar Controller

// src/main/java/io/ecosif/moviments/company/controller/NewEntityController.java
package io.ecosif.moviments.company.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import io.ecosif.moviments.company.dto.NewEntityDTO;
import io.ecosif.moviments.company.service.NewEntityService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

@RestController
public class NewEntityController {

    @Autowired
    private NewEntityService service;

    @ApiOperation(value = "Criar nova entidade")
    @ApiResponses(value = {
        @ApiResponse(code = 201, message = "Criado com sucesso", response = NewEntityDTO.class),
        @ApiResponse(code = 400, message = "Dados inválidos")
    })
    @PostMapping("/newentity")
    public ResponseEntity<NewEntityDTO> create(@Valid @RequestBody NewEntityDTO dto) {
        NewEntityDTO created = service.create(dto);
        return ResponseEntity.status(HttpStatus.CREATED).body(created);
    }

    @GetMapping("/newentity/{id}")
    public ResponseEntity<NewEntityDTO> findById(@PathVariable Long id) {
        NewEntityDTO dto = service.findById(id);
        return ResponseEntity.ok(dto);
    }
}

✅ Boas Práticas

  1. ✅ Use @Valid para validação de entrada
  2. ✅ Documente com @ApiOperation e @ApiResponses
  3. ✅ Retorne status HTTP apropriados
  4. ✅ Use DTOs, nunca expor Entities diretamente
  5. ✅ Trate exceções (via @ExceptionHandler global)

Última Atualização: 2025-11-27