https://github.com/borriguel/quiz
https://github.com/borriguel/quiz
docker docker-compose dockerfile java-21 postgresql spring-boot-3 spring-data-jpa spring-security-jwt swagger-ui
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/borriguel/quiz
- Owner: Borriguel
- License: mit
- Created: 2024-08-14T20:06:48.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-12T23:07:40.000Z (almost 2 years ago)
- Last Synced: 2025-04-12T07:54:35.726Z (about 1 year ago)
- Topics: docker, docker-compose, dockerfile, java-21, postgresql, spring-boot-3, spring-data-jpa, spring-security-jwt, swagger-ui
- Language: Java
- Homepage:
- Size: 93.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
#
Quiz API
Este projeto é uma API construída com **Java, Spring Boot, PostgreSQL, Docker e Docker Compose.**
A API permite a criação de quizzes, perguntas e alternativas, além de permitir a resolução de quizzes por usuários
autenticados.
## Tabela de conteúdo
- [Pré-requisitos](#pré-requisitos)
- [Configuração](#configuração)
- [Iniciando a aplicação](#iniciando-a-aplicação)
- [Estrutura do Projeto](#estrutura-do-projeto)
- [Parando a aplicação](#parando-a-aplicação)
- [Solução de problemas](#solução-de-problemas)
- [Rotas da API](#rotas-da-api)
- [Contribuição](#contribuição)
## Pré-requisitos
- Docker
- Docker compose
## Configuração
Clone o repositório:
```bash
git clone https://github.com/Borriguel/quiz.git
```
Crie um arquivo `.env` na raíz do projeto com as seguintes variáveis:
````
DB_USERNAME= seu_usuario_db
DB_PASSWORD= sua_senha_db
JWT_SECRET= seu_segredo_jwt
JWT_EXPIRATION_MS= tempo_expiracao_em_ms
````
Exemplo:
````
DB_USERNAME= admin
DB_PASSWORD= 123
JWT_SECRET= 71596D68536E50624B2B4728443F41387635732F785B6B585567624E61
JWT_EXPIRATION_MS= 86400000
````
# Iniciando a aplicação
1. Construa e inicie os contêineres:
```bash
docker compose up
```
2. A API estará disponível em e para acessar o swagger e fazer requisições através do
navegador
3. O banco de dados PostgreSQL estará acessível na porta ``5432``
## Estrutura do Projeto
- A aplicação Java roda no contêiner `app`
- O banco de dados PostgreSQL roda no contêiner `db`
- Os contêineres estão na mesma rede `quiz-net`
- Os dados do PostgreSQL são persistidos no volume `banco-dados`
## Parando a aplicação
Para parar a aplicação, use:
```bash
docker compose down
```
Para parar a aplicação e remover os volumes (isso apagará todos os dados do banco):
```bash
docker compose down -v
```
## Solução de problemas
Se encontrar problemas, verifique:
- Se todas as variáveis de ambiente no arquivo `.env` estão corretamente definidas
- Se as portas 8080 e 5432 não estão sendo usadas por outros processos em sua máquina
- Se o Docker e Docker Compose estão instalados corretamente em sua máquina. Você pode verificar isso executando:
```bash
docker --version
```
```bash
docker compose --version
```
## Rotas da API
### Auth
#### Registro de Usuário
```
POST /api/v1/auth/registro
{
"nome": "Exemplo Usuario",
"username": "usuario"
"email": "usuario@exemplo.com",
"senha": "senhaSuperSegura123"
}
```
#### Login de Usuário
```
POST /api/v1/auth/login
{
"username": "usuario"
"senha": "senhaSuperSegura123"
}
```
### Usuário
#### Buscar usuário pelo ID
```
GET /api/v1/usuario/{id}
```
#### Buscar todos usuários paginados
```
GET /api/v1/usuario
```
#### Excluir usuário pelo ID
```
DELETE /api/v1/usuario/{id}
```
#### Atualizar usuário pelo ID
```
PUT /api/v1/usuario/{id}
{
"nome": "Nome Novo",
"username": "username_novo",
"email": "email.novo@email.com",
"senha": "novasenha123",
"dataNascimento": "1990-01-01"
}
```
### Quiz
#### Criar quiz
```
POST /api/v1/quiz
{
"titulo": "Quiz de Programação",
"descricao": "Teste seus conhecimentos em Java e Spring"
}
```
#### Buscar quiz por ID
```
GET /api/v1/quiz/{id}
```
#### Buscar todos os quizzes paginados
```
GET /api/v1/quiz
```
#### Excluir quiz por ID
```
DELETE /api/v1/quiz/{id}
```
#### Atualizar quiz por ID
```
PUT /api/v1/quiz/{id}
{
"titulo": "Quiz de Programação Avançada",
"descricao": "Teste seus conhecimentos em Design Patterns e Arquitetura de Software"
}
```
### Pergunta
#### Adicionar pergunta a um quiz
```
POST /api/v1/pergunta/quiz/{id}
{
"enunciado": "Qual é a principal característica da programação orientada a objetos?",
"dificuldade": "MEDIO"
}
```
#### Deletar pergunta por ID
```
DELETE /api/v1/pergunta/{id}
```
#### Buscar pergunta por ID
```
GET /api/v1/pergunta/{id}
```
#### Buscar todas as perguntas de um quiz:
```
GET /api/v1/pergunta/quiz/{id}
```
#### Atualizar pergunta por ID
```
PUT /api/v1/pergunta/{id}
{
"enunciado": "Qual é o princípio fundamental da programação orientada a objetos?",
"dificuldade": "DIFICIL"
}
```
### Alternativa
#### Adicionar alternativa a uma pergunta
```
POST /api/v1/alternativa/pergunta/{id}
{
"proposicao": "Encapsulamento",
"correta": true
}
```
#### Atualizar alternativa por ID
```
PUT /api/v1/alternativa/{id}
{
"proposicao": "Herança",
"correta": false
}
```
#### Deletar alternativa por ID
```
DELETE /api/v1/alternativa/{id}
```
### Resposta
#### Salvar resposta
```
POST /api/v1/respostas
{
"idQuiz": 1,
"idPergunta": 2,
"idAlternativa": 3
}
```
#### Buscar resposta por ID
```
GET /api/v1/respostas/{id}
```
#### Deletar resposta por ID
```
DELETE /api/v1/respostas/{id}
```
#### Deletar todas as resposta de um quiz de um usuário específico
```
DELETE /api/v1/respostas/tudo/{id}?idUsuario={idUsuario}
```
### Resultado
#### Calcular o resultado do quiz de um usuário
```
GET /api/v1/resultado/quiz/1?usuarioId={id}
```
## Contribuição
Contribuições são bem-vindas! Se você deseja contribuir, por favor siga os passos abaixo:
1. Faça um fork deste repositório.
2. Crie uma nova branch: ``git checkout -b feature/nova-feature``
3. Faça suas alterações e commit: ``git commit -m 'Adiciona nova feature'``
4. Envie para o repositório remoto: ``git push origin feature/nova-feature``
5. Abra um Pull Request explicando suas alterações.
Desenvolvido com 💜 por Rodolpho Henrique