{"id":20381624,"url":"https://github.com/douglasmoraisdev/base_fastapi_service","last_synced_at":"2025-10-13T13:09:31.408Z","repository":{"id":61774706,"uuid":"473967488","full_name":"douglasmoraisdev/base_fastapi_service","owner":"douglasmoraisdev","description":null,"archived":false,"fork":false,"pushed_at":"2022-10-20T23:33:28.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-04T22:36:09.245Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/douglasmoraisdev.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}},"created_at":"2022-03-25T10:36:27.000Z","updated_at":"2022-03-25T10:37:30.000Z","dependencies_parsed_at":"2022-10-21T00:45:15.932Z","dependency_job_id":null,"html_url":"https://github.com/douglasmoraisdev/base_fastapi_service","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/douglasmoraisdev/base_fastapi_service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fbase_fastapi_service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fbase_fastapi_service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fbase_fastapi_service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fbase_fastapi_service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/douglasmoraisdev","download_url":"https://codeload.github.com/douglasmoraisdev/base_fastapi_service/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglasmoraisdev%2Fbase_fastapi_service/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015284,"owners_count":26085683,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-11-15T02:14:35.382Z","updated_at":"2025-10-13T13:09:31.387Z","avatar_url":"https://github.com/douglasmoraisdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Swiss Re Service\n\nMicroserviço para conexão e integração com a API do parceiro Swiss Re.\n\n## Sobre a PEP-8\n\nA PEP-8 é o conjunto oficial de convenções de código adotados pela comunidade Python.\n\nEste projeto implementa as diretrizes de design de código do [PEP-8](https://www.python.org/dev/peps/)\n\n\n\n## Framework FastAPI\nO projeto roda sobre o framework FastAPI. Para mais informações e documentação [clique aqui](https://fastapi.tiangolo.com/)\n\n\n\n## Estrutura de diretórios\n\n    app                             - diretorio do aplicativo\n    ├── core                        - classes e funções globais\n    │   ├── config.py               - contém o mapeamento das variáveis de ambiente de configuração\n    │   └── utils.py                - funções auxiliares globais, ex.: debug, logs, conversor de data, etc.\n    ├── db                          - classes relacionadas a conexão de banco de dados\n    │   ├── migrations              - migrações de db, utilizado pelo Alembic\n    │   └── base.py                 - classe base dos models, utilizado pelo SQLAlchemy\n    ├── dependencies                - lógica de negócio principal\n    │   └── xyz_crud.py             - lógica de CRUD\n    ├── errors                      - classes de tratamento de erros\n    │   ├── http_error.py           - handler dos erros de HTTP\n    │   └── validation_erros.py     - handler dos erros de validação de dados\n    ├── models                      - modelos de dados\n    │   ├── domain                  - models do banco de dados\n    │   |   └── xyz_model.py        - classe model da entidade xyz, formato SQLAlchemy\n    │   └── schemas                 - schemas para representação dos dados em JSON\n    │       └── xyz_schema.py       - classe schema da entidade xyz, formato Pydantic\n    ├── tests                       - testes unitários\n    ├── main.py                     - Arquivo de configuração e startup do serviço\n    └── routes.py                   - arquivos de rotas que conterá os endpoints\n\n\nA maioria dos diretórios e arquivos do serviço base são internos ao funcionamento e não necessitam alterações. Em seguida é apresentado os principais diretórios e arquivos para desenvolvimento da lógica do serviço.\n\n\n\n## Principais arquivos e diretórios\n\nUtilize os seguintes arquivos pra implmentar a lógica do serviço:\n\n* core/config.py - variáveis de configuração neste arquivo\n\n* core/utils.py - funções e classes auxiliares gerais usadas por todo o serviço\n\n* dependencies/ - coloque as classes de lógica, CRUD, acesso e tratamento de dados aqui\n\n* models/domain - Models do SQLAlchemy neste diretório\n\n* models/schemas - Schemas de representação dos dados em JSON nesse diretório, classes padrão Pydantic\n\n* tests/ - testes unitário aqui\n\n* routes.py - rotas dos endpoints aqui\n\n\n\n# Desenvolvimento\n\n\u003e Para desenvolvimento local, é aconselhavel rodar o serviço como um container Docker em conjunto com o proxy reverso do Nginx.\n\n\n## Configuração local\n\nA configuração dos serviços é baseada em *Variáveis de Ambiente*. Utilize a sessão *environment* do arquivo **docker-compose.yml** para definir as variáveis que serão utilizadas pelo container. Exemplo:\n\n```yml\n    environment:\n      - STAGE=local\n      - CLUSTER_URL=http://172.17.0.1:80\n      - BUILD_ID=1\n      - DEBUG=0\n      - DATABASE_URL=mysql+pymysql://root:pass4mysql@172.17.0.1/homolog\n```\n\n\n## Portas e Proxy\n\nAo rodar localmente, defina um número **único** de porta de saída para o serviço. Esta porta é utilizada posteriormente na configuração do proxy reverso.\n\n```yml\n    ports: \n      - \"3000:3002\" # porta de saída exemplo 3000(única na sua máquina), (3002 padrão não alterar)\n      - \"9000:8080\" # lambda port\n      - \"5678:5678\" # python debug port\n```\n\n\n## Rodando localmente\n\nUtilize os arquivos **Dockerfile.local** e **docker-compose.yml** para criar a imagem do serviço e rodar o container:\n\n1º - Fazer build da imagem, na raiz do projeto\n```sh\n    $ docker build -t nome_do_service -f Dockerfile.local .\n```\n\n2º - Rodar o container\n```sh\n    $ docker-compose up\n```\n\n## Documentação dos endpoints\n\nO framework FastAPI é integrado com o [Swagger](https://swagger.io/). A geração da documentação dos endpoints é gerada automaticamente.\n\nPara ter acesso a documentação do serviço basta acessar [https://url_do_host/stage/nome_servico/docs](https://url_do_host/stage/nome_servico/docs)\n\n\n# Deploy\n\nO deploy roda pelo arquivo de Pipeline *Jenkinsfile*, baseado no branch/tag que o projeto for enviado.\n\n## Configuração\n\n\nNo aplicativo Jenkins, adicione a variável e o seu valor para determinado stage.\n\nExemplo, *homolog_envfile* \n```json\n\"swissre_service\" :\n{\n        \"STAGE\": \"homolog\",\n        \"CLUSTER_URL\": \"https://meboqxocli.execute-api.us-west-1.amazonaws.com\",\n        \"DATABASE_URL\": \"mysql+pymysql://root:pass4mysql@172.17.0.1/homolog\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglasmoraisdev%2Fbase_fastapi_service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdouglasmoraisdev%2Fbase_fastapi_service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglasmoraisdev%2Fbase_fastapi_service/lists"}