{"id":22164433,"url":"https://github.com/faustinopsy/fastcrud","last_synced_at":"2025-08-24T04:21:06.574Z","repository":{"id":226130885,"uuid":"758634588","full_name":"faustinopsy/FastCrud","owner":"faustinopsy","description":"O FastCrud é uma aplicação modelo essencial para estudantes focados no desenvolvimento moderno de aplicações web.  com o framewework FastAPI que facilita o uso de rotas e documentação automática de API. com recursos avançados de de autenticação como token JWT de forma simplificada ","archived":false,"fork":false,"pushed_at":"2025-05-20T23:11:32.000Z","size":73,"stargazers_count":3,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-26T15:57:19.278Z","etag":null,"topics":["api","apirest","fastapi","python3","webservice"],"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/faustinopsy.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,"zenodo":null}},"created_at":"2024-02-16T18:31:52.000Z","updated_at":"2025-05-20T21:43:15.000Z","dependencies_parsed_at":"2024-03-06T02:47:40.855Z","dependency_job_id":"a0da80fe-f7f2-4c41-a4e3-b427c5900690","html_url":"https://github.com/faustinopsy/FastCrud","commit_stats":null,"previous_names":["faustinopsy/fastcrud"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/faustinopsy/FastCrud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2FFastCrud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2FFastCrud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2FFastCrud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2FFastCrud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faustinopsy","download_url":"https://codeload.github.com/faustinopsy/FastCrud/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faustinopsy%2FFastCrud/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271790636,"owners_count":24821636,"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-08-24T02:00:11.135Z","response_time":111,"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":["api","apirest","fastapi","python3","webservice"],"created_at":"2024-12-02T05:07:58.890Z","updated_at":"2025-08-24T04:21:06.520Z","avatar_url":"https://github.com/faustinopsy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FastAPI CRUD com MySQL e MongoDB\nEste é um exemplo de aplicação CRUD (Create, Read, Update, Delete) usando o framework FastAPI do Python. O aplicativo é projetado para alternar entre dois bancos de dados diferentes, MySQL e MongoDB, usando o padrão de design Strategy.\npara saber mais sobre o fastAPI: https://fastapi.tiangolo.com/learn/\num framework python muito poderoso que facilita a criação de rotas e documentação automatica de API\n\n## Branch monitoracao ***\n- nova branch (https://github.com/faustinopsy/FastCrud/tree/monitoracao)\n- nela foi adicionada um dashboard protegido com login e token jwt, mas o recurso dessa branch é a capacidade de inserir no banco toda tentativa de acesso às rotas gerando um log de uso da API, e outro recurso para monitorar é o dashboard com gráfico usando um recurso avançado chamado SSE.\n\n- SSE (Server-Sent Events) é uma tecnologia web que permite que um servidor envie automaticamente dados para um cliente assim que esses dados estiverem disponíveis, sem a necessidade de uma solicitação explícita do cliente, é uma forma de comunicação unidirecional do servidor para o cliente.\n\nO SSE foi projetado para facilitar a transmissão de dados em tempo real do servidor para o navegador, permitindo a criação de aplicativos que exibam informações dinamicamente sem fazer varias requisições para o servidor, como feeds de notícias, atualizações de status, feeds de redes sociais em tempo real, entre outros.\n\n### Principais características e usos do SSE:\n\n- Comunicação assíncrona: \nO SSE permite que os servidores enviem dados para os clientes de forma assíncrona, o que significa que os clientes não precisam fazer solicitações repetidas para obter atualizações.\n- Padrão baseado em eventos: \nOs dados enviados pelo servidor são organizados em eventos, cada um com um nome e opcionalmente um corpo de dados associado. O cliente pode então ouvir esses eventos e responder a eles conforme necessário.\n- Compatibilidade com navegadores: \nSSE é suportado nativamente por todos os principais navegadores modernos, o que torna uma opção acessível para desenvolvedores web.\n- Simplicidade de implementação: \nComparado a outras tecnologias de comunicação em tempo real, como WebSockets, SSE é mais simples de implementar e não requer configuração adicional no servidor.\n-Baixa latência: \nComo os dados são enviados do servidor para o cliente assim que estão disponíveis, o SSE pode fornecer atualizações em tempo real com baixa latência, tornando-o adequado para aplicativos que exigem respostas rápidas.\n- Eficiência de largura de banda: \nSSE usa uma conexão HTTP única e mantém essa conexão aberta enquanto necessário, reduzindo a sobrecarga de conexão e tornando-o eficiente em termos de largura de banda.\n\n### Implicações e potenciais do SSE:\n\n- Aplicações em tempo real: \nSSE é amplamente utilizado em aplicativos da web que exigem atualizações em tempo real, como feeds de notícias ao vivo, salas de bate-papo, sistemas de monitoramento em tempo real e notificações em tempo real.\n- Feedback em tempo real: \nPodemos usar SSE para fornecer feedback instantâneo aos usuários sobre ações realizadas no aplicativo, como confirmações de envio de formulário, progresso de operações e atualizações de estado, ou atualização de dados no banco de dados.\n- Streaming de dados: \nSSE pode ser usado para transmitir dados de forma contínua para o cliente, como transmissões de áudio e vídeo, atualizações de jogos online e dados de sensores em tempo real.\n\n\n## Recursos\nCRUD completo para manipulação de usuários.\nSuporte para MySQL e MongoDB como bancos de dados subjacentes.\nUso do padrão Strategy para alternar entre os bancos de dados.\nno arquivo controller_usuario tem a linha abaixo que poderá alterar o banco de dados a ser utilizado, \ne dentro de cada classe do banco precisa´ra colocar todos os métodos a serem manipulados no banco de dados para cada entidade do banco, o modelo poderá ser melhorado para deixar mais genérica isso deixo como desafio para quem quiser usar..\noutro recurso aqui é o token JWT ao realizar o login receberá o token que o forntend precisa armazenar para reenviar nas requisições, as requisições até o momento são listar_usuarios e verificar token para realizar a validação.\n\n```\n#db = MySQL()\ndb = MongoDB()\n\n```\nse for utilizado o MySQL use a tabela:\n\n```\nCREATE TABLE `usuarios` (\n  `id` varchar(50) NOT NULL,\n  `nome` varchar(45) DEFAULT NULL,\n  `email` varchar(45) DEFAULT NULL,\n  `senha` text,\n  PRIMARY KEY (`id`)\n);\nCREATE TABLE `logs` (\n  `id` char(45) NOT NULL,\n  `path` varchar(255) NOT NULL,\n  `method` varchar(10) NOT NULL,\n  `client_ip` varchar(45) NOT NULL,\n  `data_ini` datetime NOT NULL,\n  `data_fim` datetime NOT NULL,\n  `process_time` varchar(50) NOT NULL,\n  PRIMARY KEY (`id`)\n)\n\n```\n\nSobre o token jwt, toda a lógica esta encapsulada no arquivo token.py dentro do diretorio controller, e para proteger uma rota adicione a dependência\n\n```\n@router.get(\"/usuarios/\", dependencies=[Depends(verificar_token)])\ndef listar_usuarios():\n    return controller.listar_usuarios()\n```\n\n## Requisitos\n- Python 3.x\n- FastAPI\n- MySQL Connector Python\n- PyMongo\n## Instalação\nClone este repositório:\n```\ngit clone https://github.com/faustinopsy/FastCrud.git\n```\n\nNavegue até o diretório do projeto:\n```\ncd fastcrud\n```\nInstale as dependências:\n```\npip install -r requirements.txt\n```\nUso\nExecute o aplicativo:\n```\nuvicorn main:app --reload\n\nou \n\npython main.py\n```\nAcesse a documentação interativa do Swagger em:\n```\nhttp://localhost:8000/docs\n```\nExperimente as rotas CRUD fornecidas para manipulação de usuários.\n## Estrutura do Projeto\n- main.py: Arquivo principal que inicializa o aplicativo FastAPI.\n- router/routes_usuario.py: Define as rotas para manipulação de usuários.\n- controller/controller_usuario.py: Controlador que lida com as operações CRUD.\n- controller/token.py: controlador que lida com a geração e validação do token JWT.\n- database/: Pasta que contém os módulos relacionados aos bancos de dados.\n- db_mysql.py: Implementação da classe para interagir com o MySQL.\n- db_mongo.py: Implementação da classe para interagir com o MongoDB.\n- database_strategy.py: Definição da interface Strategy.\n- model/: Pasta que contém os modelos de dados Pydantic.\n- config/: Pasta que contém o helper para gerenciar o Cors.\n## Contribuindo\nSinta-se à vontade para abrir uma issue para relatar problemas, fazer sugestões ou contribuir com código.\n\n## Licença\nEste projeto está licenciado sob a MIT License.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaustinopsy%2Ffastcrud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaustinopsy%2Ffastcrud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaustinopsy%2Ffastcrud/lists"}