← Voltar na listagem

🍃 Construindo uma API para Pagamentos com Spring Boot

Código completo e configuração para uma API funcional que gerencia pagamentos.


Código Completo da API e Configuração

package com.example.pagamentos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import jakarta.persistence.*;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

// Classe principal para inicializar o Spring Boot
@SpringBootApplication
public class PagamentosApplication {
    public static void main(String[] args) {
        SpringApplication.run(PagamentosApplication.class, args);
    }
}

// Modelo de Pagamento
@Entity
@Table(name = "pagamentos")
class Pagamento {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String descricao;

    @Column(nullable = false)
    private Double valor;

    @Column(nullable = false)
    private String metodoPagamento; // Exemplo: Cartão, PIX, Boleto

    @Column(nullable = false)
    private String status; // Exemplo: PENDENTE, CONCLUIDO, CANCELADO

    // Getters e Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public String getMetodoPagamento() {
        return metodoPagamento;
    }

    public void setMetodoPagamento(String metodoPagamento) {
        this.metodoPagamento = metodoPagamento;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

// Repositório para persistência
@Repository
interface PagamentoRepository extends JpaRepository<Pagamento, Long> {
}

// Serviço com lógica de negócio
@Service
class PagamentoService {
    @Autowired
    private PagamentoRepository pagamentoRepository;

    public List<Pagamento> listarTodos() {
        return pagamentoRepository.findAll();
    }

    public Pagamento buscarPorId(Long id) {
        return pagamentoRepository.findById(id).orElseThrow(() -> new RuntimeException("Pagamento não encontrado!"));
    }

    public Pagamento salvar(Pagamento pagamento) {
        return pagamentoRepository.save(pagamento);
    }

    public Pagamento atualizar(Long id, Pagamento pagamentoAtualizado) {
        Pagamento pagamentoExistente = buscarPorId(id);
        pagamentoExistente.setDescricao(pagamentoAtualizado.getDescricao());
        pagamentoExistente.setValor(pagamentoAtualizado.getValor());
        pagamentoExistente.setMetodoPagamento(pagamentoAtualizado.getMetodoPagamento());
        pagamentoExistente.setStatus(pagamentoAtualizado.getStatus());
        return pagamentoRepository.save(pagamentoExistente);
    }

    public void deletar(Long id) {
        pagamentoRepository.deleteById(id);
    }
}

// Controlador REST para os endpoints
@RestController
@RequestMapping("/api/pagamentos")
class PagamentoController {
    @Autowired
    private PagamentoService pagamentoService;

    @GetMapping
    public ResponseEntity<List<Pagamento>> listarTodos() {
        return ResponseEntity.ok(pagamentoService.listarTodos());
    }

    @GetMapping("/{id}")
    public ResponseEntity<Pagamento> buscarPorId(@PathVariable Long id) {
        return ResponseEntity.ok(pagamentoService.buscarPorId(id));
    }

    @PostMapping
    public ResponseEntity<Pagamento> criar(@RequestBody Pagamento pagamento) {
        return ResponseEntity.ok(pagamentoService.salvar(pagamento));
    }

    @PutMapping("/{id}")
    public ResponseEntity<Pagamento> atualizar(@PathVariable Long id, @RequestBody Pagamento pagamento) {
        return ResponseEntity.ok(pagamentoService.atualizar(id, pagamento));
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deletar(@PathVariable Long id) {
        pagamentoService.deletar(id);
        return ResponseEntity.noContent().build();
    }
}

🛠️ Configurações do Banco de Dados


# application.properties

/*
spring.datasource.url=jdbc:h2:mem:pagamentosdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

# Console do H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
*/

🌐 Endpoints Disponíveis

  • 📥 GET /api/pagamentos
    Lista todos os pagamentos.

  • 📥 GET /api/pagamentos/{id}
    Retorna um pagamento específico pelo ID.

  • 📤 POST /api/pagamentos
    Cria um novo pagamento.

  • ♻️ PUT /api/pagamentos/{id}
    Atualiza um pagamento existente.

  • DELETE /api/pagamentos/{id}
    Deleta um pagamento específico.


📝 Exemplo de Payload para Criar ou Atualizar um Pagamento

{
    "descricao": "Pagamento de Serviço",
    "valor": 250.00,
    "metodoPagamento": "Cartão",
    "status": "PENDENTE"
}