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();
}
}
# 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
*/
📥 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.
{
"descricao": "Pagamento de Serviço",
"valor": 250.00,
"metodoPagamento": "Cartão",
"status": "PENDENTE"
}