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.
- Pré-requisitos
- Configuração
- Iniciando a aplicação
- Estrutura do Projeto
- Parando a aplicação
- Solução de problemas
- Rotas da API
- Contribuição
- Docker
- Docker compose
Clone o repositório:
git clone https://github.com/Borriguel/quiz.gitCrie 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
- Construa e inicie os contêineres:
docker compose up- A API estará disponível em localhost:8080 e para acessar o swagger e fazer requisições através do navegador localhost:8080/swagger-ui/index.html
- O banco de dados PostgreSQL estará acessível na porta
5432
- 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
Para parar a aplicação, use:
docker compose downPara parar a aplicação e remover os volumes (isso apagará todos os dados do banco):
docker compose down -vSe encontrar problemas, verifique:
- Se todas as variáveis de ambiente no arquivo
.envestã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:
docker --versiondocker compose --versionPOST /api/v1/auth/registro
{
"nome": "Exemplo Usuario",
"username": "usuario"
"email": "usuario@exemplo.com",
"senha": "senhaSuperSegura123"
}
POST /api/v1/auth/login
{
"username": "usuario"
"senha": "senhaSuperSegura123"
}
GET /api/v1/usuario/{id}
GET /api/v1/usuario
DELETE /api/v1/usuario/{id}
PUT /api/v1/usuario/{id}
{
"nome": "Nome Novo",
"username": "username_novo",
"email": "email.novo@email.com",
"senha": "novasenha123",
"dataNascimento": "1990-01-01"
}
POST /api/v1/quiz
{
"titulo": "Quiz de Programação",
"descricao": "Teste seus conhecimentos em Java e Spring"
}
GET /api/v1/quiz/{id}
GET /api/v1/quiz
DELETE /api/v1/quiz/{id}
PUT /api/v1/quiz/{id}
{
"titulo": "Quiz de Programação Avançada",
"descricao": "Teste seus conhecimentos em Design Patterns e Arquitetura de Software"
}
POST /api/v1/pergunta/quiz/{id}
{
"enunciado": "Qual é a principal característica da programação orientada a objetos?",
"dificuldade": "MEDIO"
}
DELETE /api/v1/pergunta/{id}
GET /api/v1/pergunta/{id}
GET /api/v1/pergunta/quiz/{id}
PUT /api/v1/pergunta/{id}
{
"enunciado": "Qual é o princípio fundamental da programação orientada a objetos?",
"dificuldade": "DIFICIL"
}
POST /api/v1/alternativa/pergunta/{id}
{
"proposicao": "Encapsulamento",
"correta": true
}
PUT /api/v1/alternativa/{id}
{
"proposicao": "Herança",
"correta": false
}
DELETE /api/v1/alternativa/{id}
POST /api/v1/respostas
{
"idQuiz": 1,
"idPergunta": 2,
"idAlternativa": 3
}
GET /api/v1/respostas/{id}
DELETE /api/v1/respostas/{id}
DELETE /api/v1/respostas/tudo/{id}?idUsuario={idUsuario}
GET /api/v1/resultado/quiz/1?usuarioId={id}
Contribuições são bem-vindas! Se você deseja contribuir, por favor siga os passos abaixo:
- Faça um fork deste repositório.
- Crie uma nova branch:
git checkout -b feature/nova-feature - Faça suas alterações e commit:
git commit -m 'Adiciona nova feature' - Envie para o repositório remoto:
git push origin feature/nova-feature - Abra um Pull Request explicando suas alterações.
Desenvolvido com 💜 por Rodolpho Henrique