# 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 cd ``` 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).