{"id":19737522,"url":"https://github.com/jacksonsr451/controle_financeiro","last_synced_at":"2026-02-19T19:03:03.043Z","repository":{"id":51028342,"uuid":"520138590","full_name":"jacksonsr451/controle_financeiro","owner":"jacksonsr451","description":"Projeto proposto pela Alura Challend Backend.","archived":false,"fork":false,"pushed_at":"2022-08-20T22:43:07.000Z","size":211,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-11T02:44:51.977Z","etag":null,"topics":["alura","alurachallengebackend4","api-rest","challenge-backend","flask","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacksonsr451.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-08-01T14:15:49.000Z","updated_at":"2023-05-01T02:51:46.000Z","dependencies_parsed_at":"2022-08-12T22:30:47.971Z","dependency_job_id":null,"html_url":"https://github.com/jacksonsr451/controle_financeiro","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jacksonsr451/controle_financeiro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacksonsr451%2Fcontrole_financeiro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacksonsr451%2Fcontrole_financeiro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacksonsr451%2Fcontrole_financeiro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacksonsr451%2Fcontrole_financeiro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacksonsr451","download_url":"https://codeload.github.com/jacksonsr451/controle_financeiro/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacksonsr451%2Fcontrole_financeiro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29627703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T18:02:07.722Z","status":"ssl_error","status_checked_at":"2026-02-19T18:01:46.144Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["alura","alurachallengebackend4","api-rest","challenge-backend","flask","python3"],"created_at":"2024-11-12T01:11:25.495Z","updated_at":"2026-02-19T19:03:03.020Z","avatar_url":"https://github.com/jacksonsr451.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Controle Financeiro\n\nProjeto proposto pela Alura Challend Backend.\n\n# Utilizando\n\n- Dokerfile: docker\n- docker-compose\n- Flask\n- dynaconf\n- Flask-RESTful\n- Flask-SQLAlchemy\n- Flask-Migrate\n- flask-marshmallow\n- marshmallow-sqlalchemy\n- marshmallow-enum\n- Flask-JWT-Extended\n- gunicorn\n- CLI\n\nProjeto bem bacana para se trabalhar, utilizando conseitos de login com jwt. Efetuei o vinculo de usuário a cada um dos modelos através do login, pegando o e-mail e assim tendo o id de usuário para cadastrar cada despesa ou receita.\n\n# Superuser \n\nPara adcionar um superuser, somente rodar o comando no terminal\n\n```shell\nflask create-superuser\n```\n\n```shell\nflask create-superuser\nCreate superuser command\nUsername: nome-de-usuario\nE-Mail: email@email.com\nPassword: minhaSenha\n```\n\n# Login\n\n``` http://localhost:5500/api/v1/auth/login ```\n\n```json\n{\n    \"email\": \"email@email.com\",\n    \"password\": \"123456\"\n}\n```\n\ncaso de sucesso deve se retornar um novo token\n\n```json\n{\n    \"token\": \"eyJ0eXAiOiJAL1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY2MDc4ODg3NSlkanRpIjoiNzgzNTAyMzYtYzRhYS00NDRmLWE1OGEtOGQwMDliNjFmNzgwIiwidHlaTSI6ImFjY2VzcyIsInN1YiI6eyJlbWFpbCI6ImphY2tzb25zcjQ1MUBnbWFpbC5ja20ifSwibmJmIjoxNjYwNzg4ODc1LCJleHAiOjE2NjA3OTYwNzV9.SgX6-LH4G5lEwGMltxUxi6Zjd80Vn84VPIO10lkq_Ro\"\n}\n```\n\ncaso de erro\n\n```json\n{\n    \"error\": \"Erro ao tentar login!\"\n}\n```\n\na cada rota da api deve ser entregue o TOKEN meno para cadastro de usuário.\n\n``` Authorization: Bearer meu-token ```\n\n```py \n    @classmethod\n    def add_user_id(cls, user_id):\n        cls.user_id = user_id\n        return cls\n```\n\nAssim ao controlador chamar o model é passado a ele o usuário que esta utilizando para efetuar o cadastro de uma receita ou despesa.\n\n```py\nfrom flask_jwt_extended import get_jwt_identity\n\ndef meu_controller(self):\n    user = UserModel.get_user_by_email(email=get_jwt_identity()[\"email\"])\n\n    DespesasModel.add_user_id(user_id=user.id).add(request=req_request)\n\n    ReceitasModel.add_user_id(user_id=user.id).add(request=req_request)\n```\n\n# Rotas\n\n**Por padrão as Rotas da api se iniciam como** /api/v1\n\n- ```/api/v1/receitas```\n- ```/api/v1/receitas?descricao=??```\n- ```/api/v1/receitas/\u003cid\u003e```\n- ```/api/v1/receitas/\u003cano\u003e/\u003cmes\u003e```\n- ```/api/v1/despesas```\n- ```/api/v1/despesas?descricao=??```\n- ```/api/v1/despesas/\u003cid\u003e```\n- ```/api/v1/despesas/\u003cano\u003e/\u003cmes\u003e```\n- ```/api/v1/resumo/\u003cano\u003e/\u003cmes\u003e```\n- ```/api/v1/usuarios```\n- ```/api/v1/usuarios/\u003cid\u003e```\n- ```/api/v1/auth/login```\n\n### exemplos:\n\nno caso de localhost é porta 5000:\n\n### Adcionar uma receita\n\n- ```http://localhost.5000/api/v1/receitas```\n\nmetodo POST com campos obrigatorios (descrição, valor, data), no formato json\n\n```json\n{\n    \"descricao\": \"Minha descrição de receita\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\ncaso de SUCESSO\n\n```json\n{\n\t\"message\": \"Dados inseridos com sucesso\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n    \"error\": \"Não é permitido salvar, verifique os dados inseridos e se não são repeditos!\"\n}\n```\n\n### Visualizar todas as receita\n\n- ```http://localhost.5000/api/v1/receitas```\n\nmetodo GET, visualização em json\n\ncaso tenha REGISTROS\n\n```json\n[\n    {\n        \"id\": 1,\n        \"descricao\": \"Minha descrição de receita\",\n        \"valor\": \"1000,00\",\n        \"data\": \"2022-08-02 19:43:10\"\n    },\n    {\n        \"id\": 2,\n        \"descricao\": \"Minha descrição 2 de receita\",\n        \"valor\": \"1000,00\",\n        \"data\": \"2022-08-02 19:43:10\"\n    }\n]\n```\n\ncaso não tenha REGISTOS\n\n```json\n{\n    \"error\": \"Não há registros em receitas\"\n}\n```\n\n### Deletar receita\n\n- ```http://localhost.5000/api/v1/receitas/1```\n\nmetodo DELETE, visualização em json\n\ncaso SUCESSO\n\n```json\n{\n    \"message\": \"Registro deletado com sucesso para o id: 1\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n    \"error\": \"Registro não existe para este id: 1\"\n}\n```\n\n### Visualizar uma receita\n\n- ```http://localhost.5000/api/v1/receitas/1```\n\nmetodo GET, visualização em json\n\n```json\n{\n    \"id\": 1,\n    \"descricao\": \"Minha descrição de receita\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\n### Atualizar uma receita\n\n- ```http://localhost.5000/api/v1/receitas/1```\n\nmetodo PUT com campos obrigatorios (descrição, valor, data), no formato json\n\n```json\n{\n    \"descricao\": \"Minha descrição atualizada de receita\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\nvisualização de resultado com json\n\ncaso SUCESSO\n\n```json\n{\n\t\"message\": \"Dados atualizado\"\n}\n```\n\ncaso não encontre REGISTO\n\n```json\n{\n\t\"error\": \"Não há registro para receita de id: 1\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n\t\"message\": \"Erro ao alualizar receita de id: 1\"\n}\n```\n\n### Adcionar uma despesas\n\n- ```http://localhost.5000/api/v1/despesas```\n\nmetodo POST com campos obrigatorios (descrição, valor, data), no formato json\n\n```json\n{\n    \"descricao\": \"Minha descrição de receita\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\nvisualizando resultado em json\n\ncaso de SUCESSO\n\n```json\n{\n\t\"message\": \"Dados inseridos com sucesso\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n    \"message\": \"Não é permitido salvar, verifique os dados inseridos e se não são repeditos!\"\n}\n```\n\n### Visualizar todas as despesas\n\n- ```http://localhost.5000/api/v1/despesas```\n\nmetodo GET, visualização em json\n\ncaso tenha REGISTROS\n\n```json\n[\n    {\n        \"id\": 1,\n        \"descricao\": \"Minha descrição de despesa\",\n        \"valor\": \"1000,00\",\n        \"data\": \"2022-08-02 19:43:10\"\n    },\n    {\n        \"id\": 2,\n        \"descricao\": \"Minha descrição 2 de despesa\",\n        \"valor\": \"1000,00\",\n        \"data\": \"2022-08-02 19:43:10\"\n    }\n]\n```\n\ncaso não tenha REGISTOS\n\n```json\n{\n    \"message\": \"Não há registros em receitas\"\n}\n```\n\n### Deletar despesa\n\n- ```http://localhost.5000/api/v1/despesas/1```\n\nmetodo DELETE, visualização em json\n\ncaso SUCESSO\n\n```json\n{\n    \"message\": \"Registro deletado com sucesso para o id: 1\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n    \"message\": \"Registro não existe para este id: 1\"\n}\n```\n\n### Visualizar uma despesa\n\n- ```http://localhost.5000/api/v1/despesas/1```\n\nmetodo GET, visualização em json\n\n```json\n{\n    \"id\": 1,\n    \"descricao\": \"Minha descrição de despesa\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\n### Atualizar uma despesa\n\n- ```http://localhost.5000/api/v1/despesas/1```\n\nmetodo PUT com campos obrigatorios (descrição, valor, data), no formato json\n\n```json\n{\n    \"descricao\": \"Minha descrição atualizada de despesa\",\n    \"valor\": \"1000,00\",\n    \"data\": \"2022-08-02 19:43:10\"\n}\n```\n\nvisualização de resulta com json\n\ncaso SUCESSO\n\n```json\n{\n\t\"message\": \"Dados atualizado\"\n}\n```\n\ncaso não encontre REGISTO\n\n```json\n{\n\t\"message\": \"Não há registro para despesa de id: 1\"\n}\n```\n\ncaso ERRO\n\n```json\n{\n\t\"message\": \"Erro ao alualizar despesa de id: 1\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacksonsr451%2Fcontrole_financeiro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacksonsr451%2Fcontrole_financeiro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacksonsr451%2Fcontrole_financeiro/lists"}