An open API service indexing awesome lists of open source software.

https://github.com/grupo2generation77/carona-generation

Projeto para ser feito em 30 horas, envolvendo trabalho em equipe, metodologias ageis e desenvolvimento parelelo.
https://github.com/grupo2generation77/carona-generation

java jpa jpa-hibernate jpa-persistence-applications mvc-pattern spring-boot spring-security

Last synced: 3 months ago
JSON representation

Projeto para ser feito em 30 horas, envolvendo trabalho em equipe, metodologias ageis e desenvolvimento parelelo.

Awesome Lists containing this project

README

        

# šŸ“š **API de Aplicativo de Caronas**

### šŸš— Uma API desenvolvida para um aplicativo de caronas colaborativas, com funcionalidades de gerenciamento de viagens, cĆ”lculo automĆ”tico da hora de chegada, cadastro de usuĆ”rios e sistema seguro de login.

---

## šŸ“‹ **ƍndice**

1. [Sobre o Projeto](#sobre-o-projeto)
2. [Funcionalidades Principais](#funcionalidades-principais)
3. [Tecnologias Utilizadas](#tecnologias-utilizadas)
4. [Entidades](#entidades)
5. [Relação Entre Tabelas](#relação-entre-tabelas)
6. [Instalação e Execução](#instalação-e-execução)
7. [Endpoints da API](#endpoints-da-api)
8. [Deploy](#deploy)
9. [Testes](#testes)
10. [Integrantes](#integrantes)

---

## šŸ“Œ **Sobre o Projeto**

A API foi criada como base para um **aplicativo de caronas colaborativas**. Seu objetivo é conectar motoristas e passageiros que compartilham trajetos similares, proporcionando uma maneira mais econÓmica e eficiente de viajar. A aplicação inclui um sistema completo de gerenciamento de viagens, com cÔlculo automÔtico da hora de chegada, além de segurança no login e cadastro dos usuÔrios.

A API Ć© desenvolvida utilizando **Spring Boot**, integrada ao banco de dados **PostgreSQL** e hospedada na plataforma **Render** com suporte a **Docker**.

---

## ✨ **Funcionalidades Principais**

- **CRUD completo** para:
- Gerenciamento de **viagens**.
- Cadastro de **categorias** de viagens.
- Cadastro e controle de **usuƔrios**.
- **Busca por ID** das entidades.
- **CÔlculo automÔtico** da hora de previsão de chegada com base na **hora de partida**, **velocidade média** e **distância**.
- Sistema de **login seguro** com autenticação utilizando **Spring Security**.
- Documentação interativa com **Swagger**.
- Banco de dados gerenciado com **PostgreSQL**.
- Deploy automatizado com **Render** e suporte ao **Docker**.
- **Testes unitƔrios** com **JUnit**.

---

## šŸ› ļø **Tecnologias Utilizadas**

- **Java 17** - Linguagem de programação principal.
- **Spring Boot** - Framework utilizado para acelerar o desenvolvimento da API.
- **Spring Web** - Gerenciamento de requisiƧƵes HTTP.
- **Spring Data JPA** - PersistĆŖncia de dados.
- **Spring Security** - Implementação de segurança e autenticação.
- **PostgreSQL** - Banco de dados relacional.
- **Swagger** - Documentação interativa da API.
- **Docker** - Containerização da aplicação.
- **Render** - Plataforma de hospedagem para deploy.
- **JUnit** - Ferramenta para testes unitƔrios.
- **Maven** - Gerenciador de dependĆŖncias.

---

## šŸ—ƒļø **Entidades**

### 🚘 **Produto (Viagem)**
| Campo | Tipo | Descrição |
|-----------------------|-----------------|-----------------------------------------|
| `id` | Long | Identificador Ćŗnico da viagem. |
| `distancia` | BigDecimal | Distância total do trajeto (em km). |
| `vagas` | Int | Quantidade de vagas disponĆ­veis. |
| `velocidadeMedia` | Double | Velocidade mƩdia esperada (em km/h). |
| `horaPartida` | LocalDate | Hora de inĆ­cio da viagem. |
| `horaPrevisaoChegada`| LocalDate | Hora calculada de chegada. |
| `lugarPartida` | String | Local de inĆ­cio da viagem. |
| `lugarDestino` | String | Local de destino da viagem. |
| `viagemRecorrente` | Boolean | Indica se a viagem Ć© recorrente. |
| `preco` | Long | PreƧo da viagem. |
| `usuario_id` | Long | Identificador do usuƔrio responsƔvel. |
| `categoria_id` | Long | Identificador da categoria da viagem. |

### šŸ·ļø **Categoria**
| Campo | Tipo | Descrição |
|--------------|---------|-----------------------------------------|
| `id` | Long | Identificador Ćŗnico da categoria. |
| `tipo` | String | Tipo da categoria (ex: "Longa", "Curta"). |
| `descricao` | String | Descrição da categoria. |

### šŸ‘¤ **User (UsuĆ”rio)**
| Campo | Tipo | Descrição |
|------------------|----------|-----------------------------------------|
| `id` | Long | Identificador único do usuÔrio. |
| `nome` | String | Nome do usuƔrio. |
| `email` | String | Email para login. |
| `senha` | String | Senha do usuƔrio (criptografada). |
| `modeloCarro` | String | Modelo do carro do usuƔrio. |
| `avaliacao` | Float | Avaliação média do motorista. |

---

## šŸ”— **Relação Entre Tabelas**

```mermaid
erDiagram
USER ||--o{ PRODUTO : possui
PRODUTO }o--|| CATEGORIA : pertence

USER {
Long id
String nome
String email
String senha
String modeloCarro
Float avaliacao
}

PRODUTO {
Long id
BigDecimal distancia
Int vagas
Double velocidadeMedia
LocalDate horaPartida
LocalDate horaPrevisaoChegada
String lugarPartida
String lugarDestino
Boolean viagemRecorrente
Long preco
Long usuario_id
Long categoria_id
}

CATEGORIA {
Long id
String tipo
String descricao
}
```

---

## šŸš€ **Instalação e Execução**

1. **Clone o repositório**:
```bash
git clone https://github.com/MatheusSPQ/BlogPessoal.git
```

2. **Configure o banco de dados PostgreSQL**:
- Crie um banco de dados chamado `db_blogpessoal`.
- Configure o arquivo `application.properties` com suas credenciais PostgreSQL:
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/db_blogpessoal
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=update
```

3. **Execute o projeto**:
```bash
./mvnw spring-boot:run
```

4. **Acesse a documentação Swagger**:
- URL padrão: `http://localhost:8080/swagger-ui.html`

---

## šŸ”— **Endpoints da API**

### Produto (Viagem)
- **GET /viagens** - Lista todas as viagens.
- **GET /viagens/{id}** - Busca uma viagem por ID.
- **POST /viagens** - Cria uma nova viagem.
- **PUT /viagens** - Atualiza uma viagem existente.
- **DELETE /viagens/{id}** - Deleta uma viagem.

### Categoria
- **GET /categorias** - Lista todas as categorias.
- **GET /categorias/{id}** - Busca uma categoria por ID.
- **POST /categorias** - Cria uma nova categoria.
- **PUT /categorias** - Atualiza uma categoria existente.
- **DELETE /categorias/{id}** - Deleta uma categoria.

### UsuƔrio
- **POST /usuarios/cadastrar** - Cadastra um novo usuƔrio.
- **POST /usuarios/login** - Realiza login.
- **GET /usuarios** - Lista todos os usuƔrios
- **GET /usuarios/{id}** - Busca um usuƔrio por ID.
- **PUT /usuarios** - Atualiza um usuƔrio
- **DELETE /usuarios/delete/{id}** - Deleta um usuƔrio

---

## šŸ“¦ **Deploy**

O projeto é hospedado na plataforma **Render** e utiliza **Docker** para containerização.

- Link do deploy: `em processo*`

---

## šŸ‘„ **Colaboradores**




Colaborador Matheus Queiroz

Matheus Queiroz




Colaboradora Nina Raquel

Nina Raquel




Colaborador Lucas Oliveira

Lucas Oliveira




Colaborador Ivan Barbosa

Ivan Barbosa





Colaboradora Jaqueline Valle

Jaqueline Valle


---

**Desenvolvido com šŸ’», dedicação e muita colaboração!** šŸš€