Plann.er é uma simples Api que permite o planejamento e gerenciamento de viagens de forma colaborativa. Usuários podem cadastrar viagens, confirmar presença, adicionar atividades e links importantes, e convidar participantes para a viagem.
- Cadastro de viagem com detalhes do destino, datas, e-mails dos convidados, e informações do criador.
- Confirmação e cancelamento de viagens.
- Confirmação e cancelamento de presença dos participantes.
- Adição de links importantes e atividades relacionadas à viagem.
- Consulta de detalhes da viagem, participantes, atividades, e links.
- Java 17
- Spring Boot
- Maven
- Java 17
- Spring Boot
- Spring Data JPA
- Spring Web
- Lombok
- Validation
- Spring Boot DevTools
- Flyway
- Maven
- PostgreSQL
-
Clone o repositório:
git clone https://github.com/valdirsantos714/plann.er.git cd Plann.er
-
Configure o banco de dados PostgreSQL:
- Crie um banco de dados no PostgreSQL.
- Atualize o arquivo
application.properties
com as configurações do seu banco de dados.
spring.datasource.url=jdbc:postgresql://localhost:5432/seu_banco_de_dados spring.datasource.username=seu_usuario spring.datasource.password=sua_senha spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=org.hibernate.dialect.PostgreSQLDialect server.error.include-stacktrace=never
-
Compile e execute a aplicação:
mvn clean install mvn spring-boot:run
-
Acesse a aplicação:
- A aplicação estará disponível em
http://localhost:8080
.
- A aplicação estará disponível em
Endpoint: POST /trips
Descrição: Cadastra uma nova viagem informando o local de destino, data de início, data de término, e-mails dos convidados, nome completo e endereço de e-mail do criador.
Request Body:
{
"destination": "Rio grande do norte",
"starts_at": "2026-09-29T14:51:06",
"ends_at": "2027-07-19T22:51:06",
"owner_name": "Vitor",
"owner_email": "Vitor@gmail.com",
"participants": [
{
"email": "Valdir@gmail.com"
}
]
}
Response:
{
"id": "uuid",
"destination": "Rio grande do norte",
"starts_at": "2026-09-29T14:51:06",
"ends_at": "2027-07-19T22:51:06",
"is_confirmed": false,
"owner_name": "Vitor",
"owner_email": "Vitor@gmail.com",
"participants": [
{
"id": "uuid",
"email": "Valdir@gmail.com",
"is_confirmed": false
}
]
}
Endpoint: GET /trips/{tripId}
Descrição: Retorna os detalhes de uma viagem específica.
Response:
{
"id": "uuid",
"destination": "Rio grande do norte",
"starts_at": "2026-09-29T14:51:06",
"ends_at": "2027-07-19T22:51:06",
"is_confirmed": true,
"owner_name": "Vitor",
"owner_email": "Vitor@gmail.com",
"participants": [
{
"id": "uuid",
"name": "Valdir",
"email": "Valdir@gmail.com",
"is_confirmed": true
}
],
"activities": [
{
"id": "uuid",
"title": "Visita ao Parque",
"occurs_at": "2026-10-01T10:00:00"
}
],
"links": [
{
"id": "uuid",
"url": "http://airbnb.com/reserva123",
"description": "Reserva do AirBnB"
}
]
}
Endpoint: PUT /trips/{tripId}
Descrição: Atualiza os detalhes de uma viagem específica.
Request Body:
{
"destination": "São Paulo",
"starts_at": "2026-10-01T14:51:06",
"ends_at": "2027-08-19T22:51:06",
"is_confirmed": true,
"owner_name": "Vitor",
"owner_email": "Vitor@gmail.com"
}
Response:
{
"id": "uuid",
"destination": "São Paulo",
"starts_at": "2026-10-01T14:51:06",
"ends_at": "2027-08-19T22:51:06",
"is_confirmed": true,
"owner_name": "Vitor",
"owner_email": "Vitor@gmail.com"
}
Endpoint: GET /trips/{tripId}/confirm
Descrição: Confirma a viagem e notifica os participantes.
Response:
{
"message": "Viagem confirmada com sucesso."
}
Endpoint: POST /participants/{participantId}/confirm
Descrição: Confirma a presença de um participante na viagem.
Request Body:
{
"name": "Valdir"
}
Response:
{
"id": "uuid",
"email": "valdir@gmail.com",
"is_confirmed": true
}
Endpoint: POST /trips/{tripId}/invites
Descrição: Convida um novo participante para a viagem.
Request Body:
{
"email": "novo_participante@gmail.com"
}
Response:
{
"id": "uuid",
"email": "novo_participante@gmail.com",
"is_confirmed": false
}
Endpoint: GET /trips/{tripId}/participants
Descrição: Retorna a lista de participantes de uma viagem específica.
Response:
{
"participants": [
{
"id": "uuid",
"name": "Valdir",
"email": "Valdir@gmail.com",
"is_confirmed": true
}
]
}
Endpoint: POST /trips/{tripId}/activities
Descrição: Adiciona uma nova atividade à viagem.
Request Body:
{
"title": "Visita ao Parque",
"occurs_at": "2026-10-01T10:00:00"
}
Response:
{
"id": "uuid",
"title": "Visita ao Parque",
"occurs_at": "2026-10-01T10:00:00"
}
Endpoint: GET /trips/{tripId}/activities
Descrição: Retorna a lista de atividades de uma viagem específica.
Response:
{
"activities": [
{
"id": "uuid",
"title": "Visita ao Parque",
"occurs_at": "2026-10-01T10:00:00"
}
]
}
Endpoint: POST /trips/{tripId}/links
Descrição: Adiciona um novo link importante à viagem.
Request Body:
{
"url": "http://airbnb.com/reserva123",
"title": "Reserva do AirBnB"
}
Response:
{
"id": "uuid",
"url": "http://airbnb.com/reserva123",
"title": "Reserva do AirBnB"
}
Endpoint: GET /trips/{tripId}/links
Descrição: Retorna a lista de links importantes de uma viagem específica.
Response:
{
"links": [
{
"id": "uuid",
"url": "http://airbnb.com/reserva123",
"title": "Reserva do AirBnB"
}
]
}