Skip to content

MateusAntony/carros

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Carros — Backend

API REST desenvolvida com Java e Spring Boot para gerenciamento de carros e marcas, com arquitetura em camadas, relacionamentos JPA, queries customizadas e integração com banco de dados PostgreSQL.

Este repositório contém apenas o backend da aplicação. Para o frontend em Angular, acesse: carros-front


Tecnologias Utilizadas

Tecnologia Função
Java 17 Linguagem principal do projeto
Spring Boot 3 Framework base da aplicação
Spring Web (MVC) Criação dos controllers e endpoints REST
Spring Data JPA Abstração do banco de dados com repositórios
Hibernate ORM para mapeamento objeto-relacional
PostgreSQL Banco de dados relacional
Lombok Redução de boilerplate com anotações (@Getter, @Setter, etc.)
Maven Gerenciamento de dependências e build

Banco de Dados

Configuração — application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/carros
spring.datasource.username=postgres
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

Com ddl-auto=update, o Hibernate cria e atualiza as tabelas automaticamente ao subir a aplicação. Não é necessário rodar scripts SQL manualmente.

Diagrama de Entidades

┌─────────────────────┐          ┌─────────────────────┐
│        Marca        │          │        Carro        │
├─────────────────────┤          ├─────────────────────┤
│ id        (PK)      │◄────┐    │ id        (PK)      │
│ nome                │     └────│ marca_id  (FK)      │
│ carros (OneToMany)  │          │ nome                │
└─────────────────────┘          │ ano                 │
                                 └─────────────────────┘

Relacionamento: Uma Marca pode ter muitos Carros (@OneToMany / @ManyToOne), com CascadeType.ALL e orphanRemoval = true — ao remover uma marca, todos os seus carros são removidos automaticamente.


Endpoints da API

Base URL: http://localhost:8080

Carros — /api/carro

Método Rota Descrição
GET /api/carro/findAll Lista todos os carros
GET /api/carro/findById/{id} Busca carro por ID
GET /api/carro/findByNome?nome= Busca carros por nome
GET /api/carro/findByMarca?idMarca= Filtra carros por marca
GET /api/carro/findAcimaAno?ano= Lista carros acima de um determinado ano
POST /api/carro/save Cadastra novo carro
PUT /api/carro/update/{id} Atualiza carro existente
DELETE /api/carro/delete/{id} Remove carro

Marcas — /api/marca

Método Rota Descrição
GET /api/marca/findAll Lista todas as marcas
GET /api/marca/findById/{id} Busca marca por ID
GET /api/marca/findByNome?nome= Busca marcas por nome (contém, ignora maiúsculas)
POST /api/marca/save Cadastra nova marca
PUT /api/marca/update/{id} Atualiza marca existente
DELETE /api/marca/deleteById/{id} Remove marca

Exemplos de Requisição

Cadastrar uma Marca

POST /api/marca/save

{
  "nome": "Toyota"
}

Cadastrar um Carro

POST /api/carro/save

{
  "nome": "Corolla",
  "ano": 2022,
  "marca": {
    "id": 1
  }
}

Buscar carros acima de um ano

GET /api/carro/findAcimaAno?ano=2020

[
  { "id": 1, "nome": "Corolla", "ano": 2022, "marca": { "id": 1, "nome": "Toyota" } },
  { "id": 2, "nome": "Civic",   "ano": 2021, "marca": { "id": 2, "nome": "Honda"  } }
]

Destaques Técnicos

Query Customizada com JPQL

O filtro por ano utiliza uma query JPQL customizada diretamente no repositório, demonstrando o uso de @Query com Spring Data:

@Query("FROM Carro c WHERE c.ano > :ano")
public List<Carro> findAcimaAno(int ano);

Busca por Nome Case-Insensitive

A busca de marcas por nome ignora diferença entre maiúsculas e minúsculas e aceita trechos parciais, usando o método derivado do Spring Data:

public List<Marca> findByNomeContainingIgnoreCase(String nome);

Lombok para Código Limpo

As entidades utilizam Lombok para eliminar boilerplate, mantendo o código legível:

@Getter @Setter
@AllArgsConstructor @NoArgsConstructor
@Entity @Table(name = "carros")
public class Carro { ... }

CORS Liberado para o Frontend

Todos os controllers utilizam @CrossOrigin("*") para permitir requisições do frontend Angular sem bloqueios:

@RestController
@RequestMapping("/api/carro")
@CrossOrigin("*")
public class CarroController { ... }

Como Executar o Projeto

Pré-requisitos

1. Clone o repositório

git clone https://github.com/seu-usuario/carros-api.git
cd carros-api

2. Crie o banco de dados

CREATE DATABASE carros;

3. Configure as credenciais

Abra o arquivo src/main/resources/application.properties e ajuste:

spring.datasource.url=jdbc:postgresql://localhost:5432/carros
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha

4. Inicie a aplicação

./mvnw spring-boot:run

A API estará disponível em: http://localhost:8080


Funcionalidades

  • Listagem de todos os carros e marcas
  • Busca de carro/marca por ID
  • Busca de carro por nome
  • Busca de marca por nome (parcial e case-insensitive)
  • Filtro de carros por marca
  • Filtro de carros acima de um determinado ano (JPQL customizado)
  • Cadastro de novo carro e nova marca
  • Atualização de carro e marca existentes
  • Remoção de carro e marca
  • Relacionamento @ManyToOne / @OneToMany entre Carro e Marca
  • CORS habilitado para integração com frontend

Aprendizados e Destaques

  • Desenvolvimento de uma API REST completa com Spring Boot seguindo boas práticas
  • Arquitetura em camadas: Controller → Service → Repository → Entity
  • Mapeamento de relacionamentos JPA (@ManyToOne, @OneToMany, CascadeType, orphanRemoval)
  • Uso de Lombok para código mais limpo e produtivo
  • Criação de queries customizadas com @Query (JPQL)
  • Uso de métodos derivados do Spring Data para buscas dinâmicas
  • Tratamento adequado de status HTTP nas respostas (201 CREATED, 200 OK, 400 BAD_REQUEST)
  • Configuração de CORS para integração com aplicação Angular

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages