https://github.com/alan-oliveir/gestao-escolar
Este projeto é uma API desenvolvida com FastAPI para gerenciar alunos, cursos e matrículas em uma instituição de ensino.
https://github.com/alan-oliveir/gestao-escolar
cloud devops docker gcp-cloud-run
Last synced: 16 days ago
JSON representation
Este projeto é uma API desenvolvida com FastAPI para gerenciar alunos, cursos e matrículas em uma instituição de ensino.
- Host: GitHub
- URL: https://github.com/alan-oliveir/gestao-escolar
- Owner: Alan-oliveir
- Created: 2025-07-08T01:56:28.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-07-15T02:20:22.000Z (11 months ago)
- Last Synced: 2025-07-15T06:33:15.894Z (11 months ago)
- Topics: cloud, devops, docker, gcp-cloud-run
- Language: Python
- Homepage:
- Size: 67.4 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🎓 API de Gestão Escolar - Imersão DevOps
Esta é uma API RESTful moderna desenvolvida com **FastAPI** para gerenciar alunos, cursos e matrículas de uma instituição de ensino. O projeto demonstra práticas de DevOps, incluindo containerização com Docker, documentação interativa com Scalar, e deploy na nuvem com Google Cloud Run.
## 🚀 Características
- ✅ **API RESTful** completa com FastAPI
- ✅ **Documentação interativa** moderna com Scalar
- ✅ **Containerização** com Docker
- ✅ **Deploy na nuvem** com Google Cloud Run
- ✅ **Banco de dados** SQLite com SQLAlchemy
- ✅ **Validação de dados** com Pydantic
- ✅ **Estrutura modular** com routers separados
## 🛠️ Tecnologias Utilizadas
- **[FastAPI](https://fastapi.tiangolo.com/)** - Framework web moderno e rápido
- **[SQLAlchemy](https://www.sqlalchemy.org/)** - ORM para Python
- **[Pydantic](https://pydantic.dev/)** - Validação de dados
- **[Scalar](https://scalar.com/)** - Documentação interativa moderna
- **[Docker](https://www.docker.com/)** - Containerização
- **[Google Cloud Run](https://cloud.google.com/run)** - Deploy serverless
- **[SQLite](https://www.sqlite.org/)** - Banco de dados leve
## 📋 Pré-requisitos
Antes de começar, certifique-se de ter instalado:
- **[Python 3.10+](https://www.python.org/downloads/)**
- **[Git](https://git-scm.com/downloads)**
- **[Docker](https://www.docker.com/get-started/)** (opcional, para containerização)
- **[Google Cloud CLI](https://cloud.google.com/sdk/docs/install)** (para deploy na nuvem)
## 🏃♂️ Executando o Projeto
### Opção 1: Executar Localmente
1. **Clone o repositório:**
```bash
git clone
cd api-gestao-escolar
```
2. **Crie e ative um ambiente virtual:**
```bash
# Criar ambiente virtual
python3 -m venv venv
# Ativar no Linux/Mac
source venv/bin/activate
# Ativar no Windows
# Primeiro, execute como administrador:
Set-ExecutionPolicy RemoteSigned
# Depois ative:
venv\Scripts\activate
```
3. **Instale as dependências:**
```bash
pip install -r requirements.txt
```
4. **Execute a aplicação:**
```bash
uvicorn app:app --reload
```
5. **Acesse a documentação:**
- **Documentação Scalar (moderna):** [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)
- **API Base:** [http://127.0.0.1:8000](http://127.0.0.1:8000)
### Opção 2: Executar com Docker
1. **Construa a imagem Docker:**
```bash
docker build -t api-gestao-escolar .
```
2. **Execute o container:**
```bash
docker run -p 8000:8000 api-gestao-escolar
```
3. **Acesse a aplicação:**
- **Documentação:** [http://localhost:8000/docs](http://localhost:8000/docs)
## ☁️ Deploy no Google Cloud
### Configuração Inicial
1. **Autentique no Google Cloud:**
```bash
gcloud auth login
gcloud config set project SEU_PROJECT_ID
```
2. **Deploy direto no Cloud Run:**
```bash
gcloud run deploy api-gestao-escolar \
--source . \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--port 8000
```
### Deploy via Docker (Alternativo)
1. **Configure o Docker para o Google Cloud:**
```bash
gcloud auth configure-docker
```
2. **Construa e envie a imagem:**
```bash
docker build -t gcr.io/SEU_PROJECT_ID/api-gestao-escolar .
docker push gcr.io/SEU_PROJECT_ID/api-gestao-escolar
```
3. **Deploy no Cloud Run:**
```bash
gcloud run deploy api-gestao-escolar \
--image gcr.io/SEU_PROJECT_ID/api-gestao-escolar \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--port 8000
```
## 📁 Estrutura do Projeto
```
api-gestao-escolar/
│
├── app.py # Aplicação principal FastAPI
├── database.py # Configuração do banco SQLite
├── models.py # Modelos SQLAlchemy
├── schemas.py # Schemas Pydantic com validação
├── requirements.txt # Dependências Python
├── Dockerfile # Configuração Docker
├── .dockerignore # Arquivos ignorados pelo Docker
├── README.md # Documentação do projeto
│
└── routers/ # Módulos de rotas
├── alunos.py # Endpoints de alunos
├── cursos.py # Endpoints de cursos
└── matriculas.py # Endpoints de matrículas
```
## 🔗 Endpoints da API
### 👨🎓 Alunos
- `GET /alunos` - Listar todos os alunos
- `POST /alunos` - Criar novo aluno
- `GET /alunos/{id}` - Buscar aluno por ID
- `PUT /alunos/{id}` - Atualizar aluno
- `DELETE /alunos/{id}` - Excluir aluno
- `GET /alunos/nome/{nome}` - Buscar por nome
- `GET /alunos/email/{email}` - Buscar por email
### 📚 Cursos
- `GET /cursos` - Listar todos os cursos
- `POST /cursos` - Criar novo curso
- `GET /cursos/{codigo}` - Buscar curso por código
- `PUT /cursos/{codigo}` - Atualizar curso
### 📋 Matrículas
- `POST /matriculas` - Criar nova matrícula
- `GET /matriculas/aluno/{nome}` - Listar cursos do aluno
- `GET /matriculas/curso/{codigo}` - Listar alunos do curso
## 🎯 Funcionalidades Principais
### Gestão de Alunos
- Cadastro completo com validação de email
- Busca por nome (parcial) e email
- Atualização e exclusão de registros
### Gestão de Cursos
- Cadastro com código único
- Busca por código do curso
- Atualização de informações
### Sistema de Matrículas
- Vinculação entre alunos e cursos
- Consulta de cursos por aluno
- Consulta de alunos por curso
## 💾 Banco de Dados
O projeto utiliza **SQLite** como banco de dados, que é:
- **Leve e portável** - Perfeito para desenvolvimento e demonstração
- **Sem configuração** - Criado automaticamente na primeira execução
- **Arquivo único** - Armazenado como `escola.db`
### Reiniciar o Banco
Para reiniciar o banco de dados (⚠️ **apaga todos os dados**):
```bash
rm escola.db
```
## 🧪 Testando a API
### Usando a Documentação Interativa
1. Acesse [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)
2. Explore os endpoints disponíveis
3. Teste diretamente na interface Scalar
### Usando curl (exemplos)
```bash
# Criar um aluno
curl -X POST "http://127.0.0.1:8000/alunos" \
-H "Content-Type: application/json" \
-d '{
"nome": "João Silva",
"email": "joao@email.com",
"telefone": "(11) 99999-9999"
}'
# Listar alunos
curl -X GET "http://127.0.0.1:8000/alunos"
# Criar um curso
curl -X POST "http://127.0.0.1:8000/cursos" \
-H "Content-Type: application/json" \
-d '{
"nome": "FastAPI para Iniciantes",
"codigo": "FAST001",
"descricao": "Curso introdutório de FastAPI"
}'
```
## 🔧 Desenvolvimento
### Executar em Modo de Desenvolvimento
```bash
uvicorn app:app --reload --host 0.0.0.0 --port 8000
```
### Instalar Dependências de Desenvolvimento
```bash
pip install -r requirements.txt
```
## 🚀 Sobre a Imersão DevOps
Este projeto foi desenvolvido durante a **Imersão Cloud DevOps da Alura e Google Cloud**, onde aprendemos:
- **Fundamentos do DevOps** - Cultura e práticas que unem desenvolvimento e operações
- **Automação de Processos** - Pipelines eficientes e deploy contínuo
- **Containerização** - Docker para ambientes consistentes
- **Deploy na Nuvem** - Google Cloud Run para aplicações escaláveis
- **Monitoramento e Observabilidade** - Práticas para aplicações em produção
### Por que DevOps?
- ✅ **Redução de falhas** em produção
- ✅ **Escalabilidade** com segurança
- ✅ **Entrega contínua** de valor ao cliente
- ✅ **Automação** de processos repetitivos
## 🤝 Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para:
1. Fazer fork do projeto
2. Criar uma branch para sua feature (`git checkout -b feature/nova-feature`)
3. Commit suas mudanças (`git commit -m 'Adiciona nova feature'`)
4. Push para a branch (`git push origin feature/nova-feature`)
5. Abrir um Pull Request
## 📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo `LICENSE` para mais detalhes.
## ❤️ Agradecimentos e Créditos
**Este projeto foi adaptado da Imersão Cloud DevOps**
- **Alura:** [https://www.alura.com.br](https://www.alura.com.br)
- **Google Cloud:** [https://cloud.google.com](https://cloud.google.com)
## 📞 Contato
Desenvolvido por Alan de O. Gonçalves baseado no projeto feito durante a imersão.
[](https://github.com/Alan-oliveir)
[](https://www.linkedin.com/in/alan-ogoncalves)
---
⭐ **Se este projeto te ajudou, considere dar uma estrela no repositório!**