{"id":19287969,"url":"https://github.com/pedrosfaria2/pycal","last_synced_at":"2026-04-12T17:38:59.590Z","repository":{"id":254147455,"uuid":"845001555","full_name":"pedrosfaria2/pycal","owner":"pedrosfaria2","description":"API de Gerenciamento de Eventos com FastAPI, SQLAlchemy e testes automatizados.","archived":false,"fork":false,"pushed_at":"2024-08-22T01:15:33.000Z","size":96,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-05T19:23:00.241Z","etag":null,"topics":["ci-cd","crud","docker","fast-api","fastapi","github-actions","logging","mysql","orm","poetry","pydantic","pytest","python","python3","sqlalchemy"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedrosfaria2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-20T11:46:06.000Z","updated_at":"2024-08-22T01:15:35.000Z","dependencies_parsed_at":"2024-08-21T18:19:06.053Z","dependency_job_id":"afe112ef-9d6b-4751-bd85-235e8c3b21bd","html_url":"https://github.com/pedrosfaria2/pycal","commit_stats":null,"previous_names":["pedrosfaria2/pycal"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrosfaria2%2Fpycal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrosfaria2%2Fpycal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrosfaria2%2Fpycal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrosfaria2%2Fpycal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedrosfaria2","download_url":"https://codeload.github.com/pedrosfaria2/pycal/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240392692,"owners_count":19794139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-cd","crud","docker","fast-api","fastapi","github-actions","logging","mysql","orm","poetry","pydantic","pytest","python","python3","sqlalchemy"],"created_at":"2024-11-09T22:07:42.717Z","updated_at":"2025-11-14T17:05:31.320Z","avatar_url":"https://github.com/pedrosfaria2.png","language":"Python","readme":"\n# Event Manager API\n\n## Descrição do Projeto\n\nEsta API foi desenvolvida como parte de um desafio técnico para a criação de um sistema de gerenciamento de eventos. O projeto foi implementado utilizando o framework FastAPI, com validação de dados usando Pydantic, integração com MySQL via SQLAlchemy, e um pipeline CI/CD configurado com GitHub Actions.\n\n## Requisitos\n\n### Dependências:\n\n- **Python 3.12+**\n- **Docker** (para rodar o MySQL server)\n- **Poetry** (para gerenciamento de dependências)\n\n## Explicação do Projeto\n\n### Estrutura do Projeto:\n\n- **`app/`**: Contém todo o código-fonte da aplicação, dividido em vários módulos:\n  - **`crud/`**: Implementação das operações CRUD (Create, Read, Update, Delete) para o modelo `Event`.\n  - **`database.py`**: Configuração do banco de dados e gerenciamento de sessões.\n  - **`exceptions/`**: Handlers para exceções personalizadas e tratamento de erros.\n  - **`logging_config.py`**: Configuração do sistema de logging.\n  - **`middleware/`**: Contém middlewares para tratamento de exceções e controle de throttling.\n  - **`models/`**: Definição dos modelos do banco de dados.\n  - **`routers/`**: Definição das rotas da API.\n  - **`schemas/`**: Definição dos schemas Pydantic para validação de dados.\n  - **`config.py`**: Configurações gerais da aplicação.\n  - **`main.py`**: Ponto de entrada da aplicação FastAPI.\n- **`tests/`**: Contém testes para a aplicação.\n  - **`conftest.py`**: Configura o ambiente de testes.\n  - **`test_crud.py`**: Testa as operações de CRUD diretamente, utilizando a camada de banco de dados.\n  - **`test_events.py`**: Teste as rotas da API.\n  - **`test_validation.py`**: Foca na validação de dados, testando cenários de erro e garantindo que dados inválidos sejam rejeitados.\n  - **`test_throttling.py`**: Testa o throttle imposto na API.\n  - **`test_health_check.py`**: Testa o endpoint de saúde criado. \n  \n### Escolhas Técnicas:\n\n- **FastAPI**: Escolhi o FastAPI devido à sua performance, facilidade de uso, e suporte embutido para validação de dados e documentação automática.\n  \n- **Pydantic**: Utilizado para validação de dados, assegurando que todos os inputs e outputs estejam no formato correto e que dados inválidos sejam identificados e tratados de forma apropriada.\n\n- **SQLAlchemy**: Optado como ORM para facilitar a manipulação do banco de dados de forma orientada a objetos, mantendo o código limpo e modularizado.\n\n- **Docker**: Utilizado para garantir que o ambiente de banco de dados seja consistente e fácil de configurar, independentemente do ambiente de desenvolvimento.\n\n- **Poetry**: Escolhido para gerenciamento de dependências, permitindo um controle preciso das bibliotecas utilizadas e facilitando a instalação e o gerenciamento do ambiente de desenvolvimento.\n\n- **Pytest**: Selecionado como framework de testes para garantir a robustez e a qualidade do código. Os testes implementados cobrem tanto as funcionalidades da API quanto as validações de dados, assegurando que a aplicação se comporte conforme o esperado.\n\n- **CI/CD com GitHub Actions**: Configurei um pipeline de CI/CD para garantir que os testes sejam executados automaticamente a cada novo commit, mantendo a integridade do código e a qualidade do projeto.\n\n## Como Rodar o Projeto\n\n1. **Inicie o MySQL com Docker:**\n\n   Certifique-se de que o MySQL está rodando com Docker:\n\n   ```bash\n   docker-compose up -d\n   ```\n\n2. **Instale as Dependências:**\n    \n    Utilize o Poetry para instalar todas as dependências do projeto:\n\n   ```bash\n   poetry install\n   ```\n\n3. **Ative o Ambiente Virtual:**\n\n    Ative o ambiente virtual criado pelo Poetry:\n\n    ```bash\n   poetry shell\n   ```\n\n\n4. **Execute as Migrações:**\n\n   Use o Alembic para aplicar as migrações necessárias ao banco de dados:\n\n   ```bash\n   poetry run alembic upgrade head\n   ```\n\n5. **Inicie a Aplicação:**\n\n   Inicie o servidor FastAPI:\n\n   ```bash\n   poetry run uvicorn app.main:app --reload\n   ```\n\n6. **Acesse a API:**\n\n   Abra seu navegador e acesse:\n\n   ```\n   http://127.0.0.1:8000\n   ```\n\n   A documentação interativa da API estará disponível em:\n\n   ```\n   http://127.0.0.1:8000/docs\n   ```\n\n## Testes\n\nO projeto inclui uma série de testes unitários, de integração e de validação, que garantem a correta funcionalidade das operações CRUD (Create, Read, Update, Delete) e a integridade dos dados processados pela API. Esses testes também cobrem o controle de throttling e a verificação do endpoint de saúde, assegurando que a API lida corretamente com limites de requisição e a conexão ao banco de dados. Os testes foram implementados utilizando o framework pytest e cobrem tanto o comportamento das rotas quanto a lógica interna do CRUD. Para rodar os testes localmente, utilize:\n```bash\npoetry run pytest\n```\n\nIsso garantirá que todas as funcionalidades estão cobertas e funcionando como esperado.\n\n## Considerações Finais\n\nEste projeto foi desenvolvido com o objetivo de cobrir todos os requisitos obrigatórios do desafio, incluindo a utilização de um framework web moderno (FastAPI), validação de dados (Pydantic), manipulação de banco de dados com ORM (SQLAlchemy), testes automatizados e controle de throttling para gerenciar o tráfego da API e evitar abusos. Além disso, a maior parte dos requisitos opcionais foi implementada, especialmente aqueles que impactam diretamente as funcionalidades da API e demonstram boas práticas de desenvolvimento, como a integração contínua (CI/CD) e a cobertura de testes.\n\nA escolha das tecnologias foi baseada em sua eficiência e compatibilidade com o cenário proposto. Docker foi utilizado para garantir um ambiente de banco de dados consistente, enquanto Poetry foi escolhido para o gerenciamento de dependências, assegurando um ambiente de desenvolvimento controlado e fácil de replicar.\n\nEmbora a segurança não tenha sido o foco principal nesta versão do projeto, ela foi identificada como uma área de melhoria para futuras iterações. O projeto está preparado para expansões, incluindo a adição de mecanismos de autenticação e autorização, que podem ser incorporados conforme a evolução das necessidades da aplicação.\n\nAdicionalmente, embora ferramentas de monitoramento não tenham sido integradas diretamente ao projeto, foi exposto um endpoint de verificação de saúde (`/health`) que permite a fácil integração com sistemas de monitoramento externos. Esse endpoint verifica a conectividade com o banco de dados e o estado geral da aplicação.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrosfaria2%2Fpycal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedrosfaria2%2Fpycal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrosfaria2%2Fpycal/lists"}