Como Criar Endpoints - ecosif-masterdata

Este guia explica como criar novos endpoints REST no ecosif-masterdata seguindo os padrões do projeto.

Estrutura Básica

1. Criar Controller

Crie uma nova classe Controller no pacote io.ecosif.masterdata.company.controller:

package io.ecosif.masterdata.company.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/exemplo")
@Tag(name = "Exemplo", description = "Endpoints de exemplo")
@SecurityRequirement(name = "bearer-jwt")
public class ExemploController {

    @GetMapping
    @Operation(summary = "Listar exemplos", description = "Retorna lista de exemplos")
    public ResponseEntity<?> listar() {
        log.info("Listando exemplos");
        // Implementação
        return ResponseEntity.ok().build();
    }
}

2. Criar DTO

Crie DTOs no pacote io.ecosif.masterdata.company.dto:

package io.ecosif.masterdata.company.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotBlank;

@Data
@Schema(description = "DTO de exemplo")
public class ExemploDTO {

    @NotBlank(message = "Nome é obrigatório")
    @Schema(description = "Nome do exemplo", example = "Exemplo 1", required = true)
    private String nome;
}

3. Criar Service

Crie Services no pacote io.ecosif.masterdata.company.service:

package io.ecosif.masterdata.company.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Service
@Transactional
public class ExemploService {

    public void processar(String nome) {
        log.info("Processando: {}", nome);
        // Lógica de negócio
    }
}

Padrões e Convenções

Validação

Valide DTOs usando Bean Validation:

@PostMapping
public ResponseEntity<?> criar(@Valid @RequestBody ExemploDTO dto) {
    // DTO já foi validado
}

Logging

Use @Slf4j para logging:

@Slf4j
@RestController
public class ExemploController {

    @PostMapping
    public ResponseEntity<?> criar(@Valid @RequestBody ExemploDTO dto) {
        log.info("Criando exemplo: {}", dto.getNome());
    }
}

Autenticação

Todos os endpoints são protegidos por padrão. O token JWT é validado automaticamente.

Para acessar o usuário autenticado:

@GetMapping
public ResponseEntity<?> listar(
    @AuthenticationPrincipal LocalUser localUser
) {
    // Usar informações do usuário
}

Exemplo Completo

Veja os controllers existentes como referência: - CompanyController - BranchController - ChartOfAccountsController

Recursos