andreamboni / books-api

Books API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Books API

TODO:

  • Converter as classes para portugues
  • Tipos dos campos:
    • Talvez uma classe para o author
    • Enum pro
      • tipo
      • formato
      • acabamento
    • Criar uma classe generos com uma tabela auxiliar
    • Fazer classe especifica para pais
      • criar migration para associar na tabela livros
    • Fazer classe especifica para idioma
      • criar migration para associar na tabela livros
    • Criar uma tabela para colecao
    • Trocar o quantidadePaginas para Int
    • Arrumar formato da dataMorte do Autor e também verificar pq está voltando null no response
    • Cardinalidade banco
  • Acumular os erros para mostrar tudo o que está de errado com o request
  • Restante dos métodos CRUD
  • Desacoplar algumas coisas

Backlog

  • [] Tratar melhor as exceções
  • [] Fazer os ids do banco contar a partir do 1000
  • [] Adicionar logs se necessário
  • [] Quando for criar o banco real da aplicação, arrumar o nome das migrations ou não fazer os alter tables
  • [] Criar testes de integração

Exemplo de tratamento global de exceções

Eu estou tirando essa classe do projeto porque não faz mais sentido pra mim, porém, eu não queria jogar fora esse exemplo. Eu usei ele para tratar a exceção que ocorre quando mandamos um valor null para um atributo que está anotado como @Column(nullable = false), como é o caso da classe autor.

Desisti dessa abordagem porque ela fica muito genérica. Acredito que existe uma forma de tratar a exceção de uma forma mais específica.

@Entity
@Table(name = "autores")
public class Autor {

	@Id	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	private Long id;

	@Column(nullable = false)
	private String nome;

	@Column(nullable = false)
	private String nacionalidade;

	@Column(nullable = false) @JsonFormat(pattern="yyyy-MM-dd")
	private Date dataNascimento;
	
	@JsonFormat(pattern="yyyy-MM-dd")
	private Date dataMorte;
package com.books.exceptions;

import org.springframework.dao.DataIntegrityViolationException;
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(DataIntegrityViolationException.class)
    public ResponseEntity<BookError> handleDataIntegrityViolation(DataIntegrityViolationException ex) {
        BookError error = new BookError();
        error.setErrorMessage("Erro de integridade de dados. Todos os campos são obrigatórios, exceto 'collection'.");
        error.setFieldsAvailable("collection, title, author, publisher, type, format, pages, edition, editionYear, genres, finishing, language, country e bookQuantity.");

        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
    }
}
package com.books.exceptions;

public class BookError {

    private String errorMessage;
    private String fieldsAvailable;

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public String getFieldsAvailable() {
        return fieldsAvailable;
    }

    public void setFieldsAvailable(String fieldsAvailable) {
        this.fieldsAvailable = fieldsAvailable;
    }

}

About

Books API


Languages

Language:Java 100.0%