208 lines
4.8 KiB
Markdown
208 lines
4.8 KiB
Markdown
# API de Usuários e Grupos
|
|
|
|
Esta é uma API simples construída com Flask, SQLAlchemy e JWT para autenticação. Ela permite a criação de usuários, grupos, e a gestão desses dados.
|
|
|
|
## Tecnologias
|
|
|
|
|
|
- **Flask**: Framework web em Python.
|
|
- **SQLAlchemy**: ORM para interação com o banco de dados.
|
|
- **JWT**: Autenticação baseada em tokens JWT.
|
|
- **SQLite**: Banco de dados leve e simples para desenvolvimento.
|
|
|
|
## Instalação
|
|
---
|
|
|
|
### Pré-requisitos
|
|
|
|
- Python 3.12 ou superior
|
|
- Pip (gerenciador de pacotes Python)
|
|
|
|
### Passos para instalar
|
|
|
|
1. **Clone o repositório**:
|
|
|
|
```bash
|
|
git clone <URL_DO_REPOSITORIO>
|
|
cd <nome_do_repositorio>
|
|
```
|
|
|
|
2. **Crie um ambiente virtual (opcional, mas recomendado)**:
|
|
|
|
```bash
|
|
python3 -m venv venv
|
|
source venv/bin/activate # No Windows use venv\Scripts\activate
|
|
```
|
|
|
|
3. **Instale as dependências**:
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
4. **Configure o banco de dados**:
|
|
- O banco de dados será criado automaticamente quando você rodar as migrações, mas você pode definir a URI do banco no arquivo `config.py`.
|
|
|
|
## Execução da Aplicação
|
|
|
|
### Rodando Manualmente (sem Docker)
|
|
|
|
1. **Rodar a aplicação localmente**:
|
|
|
|
Para rodar a aplicação manualmente, você pode usar o comando abaixo:
|
|
|
|
```bash
|
|
python app.py
|
|
```
|
|
|
|
A API estará disponível em `http://127.0.0.1:5000/`.
|
|
|
|
2. **Executar as migrações e seed**:
|
|
|
|
Se você precisar rodar as migrações e seed de banco de dados, siga os passos abaixo antes de rodar a aplicação:
|
|
|
|
- **Inicializar o banco de dados** (se necessário):
|
|
|
|
```bash
|
|
flask db init
|
|
```
|
|
|
|
- **Gerar as migrações**:
|
|
|
|
```bash
|
|
flask db migrate -m "Descrição da migração"
|
|
```
|
|
|
|
- **Aplicar as migrações**:
|
|
|
|
```bash
|
|
flask db upgrade
|
|
```
|
|
|
|
- **Rodar o seed de dados**:
|
|
|
|
```bash
|
|
python seed.py
|
|
```
|
|
|
|
### Rodando com Docker
|
|
|
|
Se você preferir rodar a aplicação em um container Docker, siga os passos abaixo.
|
|
|
|
1. **Construir a imagem Docker**:
|
|
|
|
Se ainda não construiu a imagem, execute o seguinte comando para construir a imagem Docker a partir do `Dockerfile`:
|
|
|
|
```bash
|
|
docker build -t flask-app .
|
|
```
|
|
|
|
2. **Rodar a aplicação com Docker Compose**:
|
|
|
|
Se você tiver o arquivo `docker-compose.yml` configurado corretamente, basta executar o comando abaixo para iniciar a aplicação com o Docker Compose:
|
|
|
|
```bash
|
|
docker-compose up
|
|
```
|
|
|
|
Isso irá iniciar a aplicação no container e a API estará disponível em `http://127.0.0.1:5000/`.
|
|
|
|
## Migrações e Seed
|
|
|
|
### Migrações com Flask-Migrate
|
|
|
|
1. **Iniciar o repositório de migrações**:
|
|
|
|
Se for a primeira vez que você está configurando as migrações no projeto, execute:
|
|
|
|
```bash
|
|
flask db init
|
|
```
|
|
|
|
2. **Gerar migração**:
|
|
|
|
Sempre que você modificar o modelo do banco de dados (como adicionar uma nova tabela ou coluna), execute:
|
|
|
|
```bash
|
|
flask db migrate -m "Descrição da migração"
|
|
```
|
|
|
|
3. **Aplicar migrações**:
|
|
|
|
Para aplicar as migrações e atualizar o banco de dados:
|
|
|
|
```bash
|
|
flask db upgrade
|
|
```
|
|
|
|
### Seed de Banco de Dados
|
|
|
|
Para popular o banco de dados com dados iniciais, execute o seguinte comando:
|
|
|
|
```bash
|
|
python -m app.seeds.run_seeds
|
|
```
|
|
|
|
Isso vai inserir dados padrão no banco de dados, como um usuário administrador, se o script `seed.py` estiver configurado corretamente.
|
|
|
|
## Endpoints
|
|
|
|
### Criar Usuário
|
|
|
|
- **Método**: `POST`
|
|
- **URL**: `/users/`
|
|
- **Autenticação**: Bearer Token (JWT)
|
|
- **Requisição**:
|
|
|
|
```json
|
|
{
|
|
"username": "novo_usuario",
|
|
"password": "senha_segura",
|
|
"group_id": 1
|
|
}
|
|
```
|
|
|
|
- **Respostas**:
|
|
- **201**: Usuário criado com sucesso.
|
|
- **400**: Usuário já existe.
|
|
- **404**: Grupo não encontrado.
|
|
- **422**: Dados ausentes ou inválidos.
|
|
|
|
### Listar Usuários
|
|
|
|
- **Método**: `GET`
|
|
- **URL**: `/users/`
|
|
- **Autenticação**: Bearer Token (JWT)
|
|
- **Respostas**:
|
|
- **200**: Lista de usuários.
|
|
|
|
### Criar Grupo
|
|
|
|
- **Método**: `POST`
|
|
- **URL**: `/groups/`
|
|
- **Autenticação**: Bearer Token (JWT)
|
|
- **Requisição**:
|
|
|
|
```json
|
|
{
|
|
"name": "admin"
|
|
}
|
|
```
|
|
|
|
- **Respostas**:
|
|
- **201**: Grupo criado com sucesso.
|
|
- **400**: Nome de grupo já existe.
|
|
- **422**: Dados inválidos.
|
|
|
|
## Contribuindo
|
|
|
|
1. Faça um fork deste repositório.
|
|
2. Crie uma branch com suas mudanças: `git checkout -b minha-nova-feature`.
|
|
3. Faça commit das suas mudanças: `git commit -am 'Adicionando nova feature'`.
|
|
4. Envie para o repositório remoto: `git push origin minha-nova-feature`.
|
|
5. Abra um pull request.
|
|
|
|
## Licença
|
|
|
|
Este projeto está licenciado sob a [MIT License](LICENSE).
|