Api de cadastro de produto.
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
package br.com.stackpanel.duck_api;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class DuckApiApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(DuckApiApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package br.com.stackpanel.duck_api.controller;
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.dto.ProductDTO;
|
||||
import br.com.stackpanel.duck_api.service.ProductService;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/produto")
|
||||
public class ProductController {
|
||||
|
||||
private final ProductService productService;
|
||||
|
||||
public ProductController(ProductService productService) {
|
||||
this.productService = productService;
|
||||
}
|
||||
|
||||
@GetMapping("/buscarTodos")
|
||||
public ResponseEntity<List<ProductDTO>> buscarTodosProdutos() {
|
||||
return ResponseEntity.ok(productService.buscarTodosProdutos());
|
||||
}
|
||||
|
||||
@PostMapping("/salvar")
|
||||
private ResponseEntity<ProductDTO> salvarProduto(@RequestBody @Valid ProductDTO dto) {
|
||||
return ResponseEntity.ok(productService.salvarProduto(dto));
|
||||
}
|
||||
|
||||
}
|
||||
127
src/main/java/br/com/stackpanel/duck_api/entity/Product.java
Normal file
127
src/main/java/br/com/stackpanel/duck_api/entity/Product.java
Normal file
@@ -0,0 +1,127 @@
|
||||
package br.com.stackpanel.duck_api.entity;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Entity
|
||||
@Table(name = "tproduct", schema = "prdadm")
|
||||
public class Product {
|
||||
|
||||
@Id
|
||||
@Column(name = "prdcod")
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long codigoProduto;
|
||||
|
||||
@Column(name = "nomprd")
|
||||
private String nomeProduto;
|
||||
|
||||
@Column(name = "dscprd")
|
||||
private String descricaoProdutos;
|
||||
|
||||
@Column(name = "prcprdatu")
|
||||
private BigDecimal precoProdutoAtualizado;
|
||||
|
||||
@Column(name = "prcprdprv")
|
||||
private BigDecimal precoProdutoPrecoAnterior;
|
||||
|
||||
@Column(name = "datcnsprd")
|
||||
private LocalDateTime ultimaDataConsultaProduto;
|
||||
|
||||
@Column(name = "datenvprd")
|
||||
private LocalDateTime dataEnvioProduto;
|
||||
|
||||
@Column(name = "nomplt")
|
||||
private String nomePlataforma;
|
||||
|
||||
public Product() {
|
||||
}
|
||||
|
||||
public Product(Long codigoProduto, String nomeProduto, String descricaoProdutos, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
this.nomeProduto = nomeProduto;
|
||||
this.descricaoProdutos = descricaoProdutos;
|
||||
this.precoProdutoAtualizado = precoProdutoAtualizado;
|
||||
this.precoProdutoPrecoAnterior = precoProdutoPrecoAnterior;
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
}
|
||||
|
||||
public String getDescricaoProdutos() {
|
||||
return descricaoProdutos;
|
||||
}
|
||||
|
||||
public void setDescricaoProdutos(String descricaoProdutos) {
|
||||
this.descricaoProdutos = descricaoProdutos;
|
||||
}
|
||||
|
||||
public String getNomePlataforma() {
|
||||
return nomePlataforma;
|
||||
}
|
||||
|
||||
public void setNomePlataforma(String nomePlataforma) {
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
}
|
||||
|
||||
public Long getCodigoProduto() {
|
||||
return codigoProduto;
|
||||
}
|
||||
|
||||
public void setCodigoProduto(Long codigoProduto) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
}
|
||||
|
||||
public String getNomeProduto() {
|
||||
return nomeProduto;
|
||||
}
|
||||
|
||||
public void setNomeProduto(String nomeProduto) {
|
||||
this.nomeProduto = nomeProduto;
|
||||
}
|
||||
|
||||
public BigDecimal getPrecoProdutoAtualizado() {
|
||||
return precoProdutoAtualizado;
|
||||
}
|
||||
|
||||
public void setPrecoProdutoAtualizado(BigDecimal precoProdutoAtualizado) {
|
||||
this.precoProdutoAtualizado = precoProdutoAtualizado;
|
||||
}
|
||||
|
||||
public BigDecimal getPrecoProdutoPrecoAnterior() {
|
||||
return precoProdutoPrecoAnterior;
|
||||
}
|
||||
|
||||
public void setPrecoProdutoPrecoAnterior(BigDecimal precoProdutoPrecoAnterior) {
|
||||
this.precoProdutoPrecoAnterior = precoProdutoPrecoAnterior;
|
||||
}
|
||||
|
||||
public LocalDateTime getUltimaDataConsultaProduto() {
|
||||
return ultimaDataConsultaProduto;
|
||||
}
|
||||
|
||||
public void setUltimaDataConsultaProduto(LocalDateTime ultimaDataConsultaProduto) {
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
}
|
||||
|
||||
public LocalDateTime getDataEnvioProduto() {
|
||||
return dataEnvioProduto;
|
||||
}
|
||||
|
||||
public void setDataEnvioProduto(LocalDateTime dataEnvioProduto) {
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Product{" +
|
||||
"codigoProduto=" + codigoProduto +
|
||||
", nomeProduto='" + nomeProduto + '\'' +
|
||||
", precoProdutoAtualizado=" + precoProdutoAtualizado +
|
||||
", precoProdutoPrecoAnterior=" + precoProdutoPrecoAnterior +
|
||||
", ultimaDataConsultaProduto=" + ultimaDataConsultaProduto +
|
||||
", dataEnvioProduto=" + dataEnvioProduto +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package br.com.stackpanel.duck_api.entity.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class ProductDTO {
|
||||
|
||||
private Long codigoProduto;
|
||||
|
||||
@NotNull
|
||||
private String nomeProduto;
|
||||
|
||||
@NotNull
|
||||
private String descricaoProduto;
|
||||
|
||||
private BigDecimal precoProdutoAtualizado;
|
||||
|
||||
private BigDecimal precoProdutoPrecoAnterior;
|
||||
|
||||
private LocalDateTime ultimaDataConsultaProduto;
|
||||
|
||||
private LocalDateTime dataEnvioProduto;
|
||||
|
||||
@NotNull
|
||||
private String nomePlataforma;
|
||||
|
||||
public ProductDTO() {
|
||||
}
|
||||
|
||||
public ProductDTO(Long codigoProduto, String nomeProduto, String descricaoProduto, BigDecimal precoProdutoAtualizado, BigDecimal precoProdutoPrecoAnterior, LocalDateTime ultimaDataConsultaProduto, LocalDateTime dataEnvioProduto, String nomePlataforma) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
this.nomeProduto = nomeProduto;
|
||||
this.descricaoProduto = descricaoProduto;
|
||||
this.precoProdutoAtualizado = precoProdutoAtualizado;
|
||||
this.precoProdutoPrecoAnterior = precoProdutoPrecoAnterior;
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
}
|
||||
|
||||
public String getDescricaoProduto() {
|
||||
return descricaoProduto;
|
||||
}
|
||||
|
||||
public void setDescricaoProduto(String descricaoProduto) {
|
||||
this.descricaoProduto = descricaoProduto;
|
||||
}
|
||||
|
||||
public String getNomePlataforma() {
|
||||
return nomePlataforma;
|
||||
}
|
||||
|
||||
public void setNomePlataforma(String nomePlataforma) {
|
||||
this.nomePlataforma = nomePlataforma;
|
||||
}
|
||||
|
||||
public Long getCodigoProduto() {
|
||||
return codigoProduto;
|
||||
}
|
||||
|
||||
public void setCodigoProduto(Long codigoProduto) {
|
||||
this.codigoProduto = codigoProduto;
|
||||
}
|
||||
|
||||
public String getNomeProduto() {
|
||||
return nomeProduto;
|
||||
}
|
||||
|
||||
public void setNomeProduto(String nomeProduto) {
|
||||
this.nomeProduto = nomeProduto;
|
||||
}
|
||||
|
||||
public BigDecimal getPrecoProdutoAtualizado() {
|
||||
return precoProdutoAtualizado;
|
||||
}
|
||||
|
||||
public void setPrecoProdutoAtualizado(BigDecimal precoProdutoAtualizado) {
|
||||
this.precoProdutoAtualizado = precoProdutoAtualizado;
|
||||
}
|
||||
|
||||
public BigDecimal getPrecoProdutoPrecoAnterior() {
|
||||
return precoProdutoPrecoAnterior;
|
||||
}
|
||||
|
||||
public void setPrecoProdutoPrecoAnterior(BigDecimal precoProdutoPrecoAnterior) {
|
||||
this.precoProdutoPrecoAnterior = precoProdutoPrecoAnterior;
|
||||
}
|
||||
|
||||
public LocalDateTime getUltimaDataConsultaProduto() {
|
||||
return ultimaDataConsultaProduto;
|
||||
}
|
||||
|
||||
public void setUltimaDataConsultaProduto(LocalDateTime ultimaDataConsultaProduto) {
|
||||
this.ultimaDataConsultaProduto = ultimaDataConsultaProduto;
|
||||
}
|
||||
|
||||
public LocalDateTime getDataEnvioProduto() {
|
||||
return dataEnvioProduto;
|
||||
}
|
||||
|
||||
public void setDataEnvioProduto(LocalDateTime dataEnvioProduto) {
|
||||
this.dataEnvioProduto = dataEnvioProduto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package br.com.stackpanel.duck_api.entity.mapper;
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.Product;
|
||||
import br.com.stackpanel.duck_api.entity.dto.ProductDTO;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class ProductMapper {
|
||||
|
||||
public ProductDTO toProductDTO(Product product) {
|
||||
|
||||
if (product == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new ProductDTO(
|
||||
product.getCodigoProduto(),
|
||||
product.getNomeProduto(),
|
||||
product.getNomeProduto(),
|
||||
product.getPrecoProdutoAtualizado(),
|
||||
product.getPrecoProdutoPrecoAnterior(),
|
||||
product.getUltimaDataConsultaProduto(),
|
||||
product.getDataEnvioProduto(),
|
||||
product.getNomePlataforma()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public Product toProductEntity(ProductDTO dto) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new Product(
|
||||
dto.getCodigoProduto(),
|
||||
dto.getNomeProduto(),
|
||||
dto.getDescricaoProduto(),
|
||||
dto.getPrecoProdutoAtualizado(),
|
||||
dto.getPrecoProdutoPrecoAnterior(),
|
||||
dto.getUltimaDataConsultaProduto(),
|
||||
dto.getDataEnvioProduto(),
|
||||
dto.getNomePlataforma()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package br.com.stackpanel.duck_api.exception;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public class ErrorResponse {
|
||||
private int status;
|
||||
private String mensagem;
|
||||
private LocalDateTime timestamp;
|
||||
|
||||
public ErrorResponse(int status, String mensagem) {
|
||||
this.status = status;
|
||||
this.mensagem = mensagem;
|
||||
this.timestamp = LocalDateTime.now();
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getMensagem() {
|
||||
return mensagem;
|
||||
}
|
||||
|
||||
public void setMensagem(String mensagem) {
|
||||
this.mensagem = mensagem;
|
||||
}
|
||||
|
||||
public LocalDateTime getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
public void setTimestamp(LocalDateTime timestamp) {
|
||||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ErrorResponse{" +
|
||||
"status=" + status +
|
||||
", mensagem='" + mensagem + '\'' +
|
||||
", timestamp=" + timestamp +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package br.com.stackpanel.duck_api.exception;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
@RestControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
@ExceptionHandler(ProductNotFoundException.class)
|
||||
public ResponseEntity<ErrorResponse> handleProductNotFound(ProductNotFoundException ex) {
|
||||
ErrorResponse erro = new ErrorResponse(404, ex.getMessage());
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(erro);
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public ResponseEntity<ErrorResponse> handleGeneric(Exception ex) {
|
||||
ErrorResponse erro = new ErrorResponse(500, "Erro interno no servidor");
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(erro);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package br.com.stackpanel.duck_api.exception;
|
||||
|
||||
public class ProductNotFoundException extends RuntimeException{
|
||||
|
||||
public ProductNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package br.com.stackpanel.duck_api.repository;
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.Product;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface ProductRepository extends JpaRepository<Product, Long> {
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package br.com.stackpanel.duck_api.service;
|
||||
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.dto.ProductDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ProductService {
|
||||
|
||||
List<ProductDTO> buscarTodosProdutos();
|
||||
|
||||
ProductDTO salvarProduto(ProductDTO dto);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package br.com.stackpanel.duck_api.service.impl;
|
||||
|
||||
|
||||
import br.com.stackpanel.duck_api.entity.Product;
|
||||
import br.com.stackpanel.duck_api.entity.dto.ProductDTO;
|
||||
import br.com.stackpanel.duck_api.entity.mapper.ProductMapper;
|
||||
import br.com.stackpanel.duck_api.repository.ProductRepository;
|
||||
import br.com.stackpanel.duck_api.service.ProductService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class ProductServiceImpl implements ProductService {
|
||||
|
||||
private final ProductRepository productRepository;
|
||||
private final ProductMapper productMapper;
|
||||
|
||||
public ProductServiceImpl(ProductRepository productRepository, ProductMapper productMapper) {
|
||||
this.productRepository = productRepository;
|
||||
this.productMapper = productMapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProductDTO> buscarTodosProdutos() {
|
||||
return productRepository.findAll().stream()
|
||||
.map(productMapper::toProductDTO)
|
||||
.toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProductDTO salvarProduto(ProductDTO dto) {
|
||||
|
||||
Product produto = productMapper.toProductEntity(dto);
|
||||
|
||||
Product produtoSalvo = productRepository.save(produto);
|
||||
|
||||
return productMapper.toProductDTO(produtoSalvo);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user