{"id":25615323,"url":"https://github.com/eneas-almeida/api-tindin","last_synced_at":"2026-04-10T12:31:46.956Z","repository":{"id":135550940,"uuid":"449926947","full_name":"eneas-almeida/api-tindin","owner":"eneas-almeida","description":"API em NodeJS, utilizando banco de dados MongoDB (TypeORM), com cobertura de testes (coverages), utilizando o Jest.","archived":false,"fork":false,"pushed_at":"2022-01-20T02:43:04.000Z","size":823,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-22T03:19:17.535Z","etag":null,"topics":["babel","docker","docker-compose","jest","jwt","mongodb","nodejs","sentry","typeorm","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/eneas-almeida.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":"2022-01-20T02:27:17.000Z","updated_at":"2022-01-20T02:58:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"4f6e987a-6d69-41cb-9882-06cd55182fd2","html_url":"https://github.com/eneas-almeida/api-tindin","commit_stats":null,"previous_names":["eneas-almeida/api-tindin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eneas-almeida/api-tindin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fapi-tindin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fapi-tindin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fapi-tindin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fapi-tindin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eneas-almeida","download_url":"https://codeload.github.com/eneas-almeida/api-tindin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eneas-almeida%2Fapi-tindin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31642715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: 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":["babel","docker","docker-compose","jest","jwt","mongodb","nodejs","sentry","typeorm","typescript"],"created_at":"2025-02-22T03:19:12.947Z","updated_at":"2026-04-10T12:31:46.213Z","avatar_url":"https://github.com/eneas-almeida.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Api Backend Tindin\n\n\u003cimg src=\"./media/images/logo-tindin.webp\" /\u003e\n\n## Sobre\n\n\u003e API em NodeJS, utilizando banco de dados MongoDB (TypeORM), com cobertura de testes (coverages), utilizando o Jest.\u003cbr /\u003e 👉 \u003ca href=\"http://143.198.112.106:3011/classes\"\u003e app url\u003c/a\u003e\n\n## Paths\n\n### Login do user\n\n👉 http://143.198.112.106:3011/users/login (POST)\n\n```json\n{\n    \"email\": \"admin@admin.com\",\n    \"password\": \"G1rafarosa#\"\n}\n```\n\n### Registro de user\n\n👉 http://143.198.112.106:3011/users (POST)\n\n```json\n{\n    \"name\": \"Tiago Rizzo\",\n    \"email\": \"tiago@gmail.com\",\n    \"password\": \"T1ag0rizzo#\"\n}\n```\n\n### Cria a aula\n\n👉 http://143.198.112.106:3011/classes (POST)\n\n```json\n{\n    \"name\": \"Inglês\",\n    \"description\": \"Aula de inglês ao vivo\",\n    \"video\": \"http://inglesaovivo.com\",\n    \"date_init\": \"12-12-2021\",\n    \"date_end\": \"12-21-2021\"\n}\n```\n\n### Atualiza a aula\n\n👉 http://143.198.112.106:3011/classes/{id} (PUT)\n\n```json\n{\n    \"name\": \"Portugês\",\n    \"description\": \"Aula de portugês ao vivo\",\n    \"video\": \"http://inglesaovivo.com\",\n    \"date_init\": \"12-12-2021\",\n    \"date_end\": \"12-21-2021\"\n}\n```\n\n### Lista as aulas\n\n👉 http://143.198.112.106:3011/classes (GET)\n\n```json\n{}\n```\n\n### Mostra detalhes de uma aula\n\n👉 http://143.198.112.106:3011/classes/{id} (GET)\n\n```json\n{}\n```\n\n### Deleta uma aula\n\n👉 http://143.198.112.106:3011/classes/{id} (DELETE)\n\n```json\n{}\n```\n\n### Cria comentário\n\n👉 http://143.198.112.106:3011/classes/comments (POST)\n\n```json\n{\n    \"id_class\": \"61e7952ab7b18add1344cde7\",\n    \"comment\": \"Comentário sobre a aula de português...\"\n}\n```\n\n### Lista comentários\n\n👉 http://143.198.112.106:3011/comments (GET)\ns\n\n```json\n{}\n```\n\n### Mostra detalhes de um comentário\n\n👉 http://143.198.112.106:3011/classes/comments/{id} (GET)\n\n```json\n{}\n```\n\n### Deleta um comentário\n\n👉 http://143.198.112.106:3011/classes/comments/{id} (DELETE)\n\n```json\n{}\n```\n\n## Recursos utilizados\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://cdn.worldvectorlogo.com/logos/nodejs-icon.svg\" alt=\"NodeJs\" title=\"NodeJs\" width=\"30\" height=\"30\" /\u003e\n  \u003cimg src=\"https://cdn.worldvectorlogo.com/logos/typescript.svg\" alt=\"Typescript\" title=\"Typescript\" width=\"30\" height=\"30\" /\u003e\n  \u003cimg src=\"https://cdn.worldvectorlogo.com/logos/logo-javascript.svg\" alt=\"Javascript\" title=\"Javascript\" width=\"30\" height=\"30\" /\u003e\n  \u003cimg src=\"./media/images/jest.svg\" alt=\"Jest\" title=\"Jest\" width=\"30\" height=\"30\" /\u003e\n\u003c/p\u003e\n\n-   Typescript\n-   Docker / Docker compose\n-   Arquitetura Feature By Package\n-   Conceitos do DDD, como repository, providers, modules e etc.\n-   Framework Express\n-   Testes com coverages (Jest)\n-   Serviço Sentry para catalogar errors\n-   TypeOrm\n-   JWT\n-   Assincronismo de errors\n-   Injeção de dependência com a biblioteca tsyringe\n-   Babel para build, resolvendo o problema dos paths\n-   Criação de seed para criar o user Admin\n-   Helmet\n-   Morgan\n-   Validação nos DTOs com a biblioteca class-validator\n-   Padrões de projeto (Chain of responsability, Strategy, Factory)\n-   Gitflow (develop/master/main)\n-   Utilização de padronização de commits (convetional commits)\n-   Makefile\n\n## Sugestões futuras\n\n-   Utilizar o Swagger para documentar a API.\n-   Utilização de cache com Redis, utilizando o padrão proxy para login do usuário.\n-   Utilizar cache na parte de listagem de aulas e comentários.\n-   Utilizar filas com o bull para resolver a remoção em cascata dos documentos relacionados.\n-   Utilizar o rate limit para mitigar a idempotência dos métodos posts.\n\n## Vantagens da arquitetura Feat By Packages\n\n-   **Manutenção**: Facilita o engajamento de multiplas equipes e colaboradores em um projeto;\n-   **Escalável**: Facilita refatoramento do código monolítico para uma uma estrura de microserviços;\n-   **SOLID**: Facilita a aplicação de todos os princípios do SOLID;\n-   **Git**: Melhora o gerenciamento dos commits, evitando conflitos e etc;\n-   **Testes**: Facilita o desenvolvimento de testes de unidade e integração.\n\n## Outras informações\n\nO projeto tem como gerencimento de pacotes o **Yarn** e o **Makefile** como automação de comandos, além disso, o MongoDB é um container do **Docker**.\n\n## Padrão de projeto: Middleware\n\n👉 Na linha 12, é possível observar o funcionamento do padrão de projeto, onde os contextos podem ser observados em: path (nó inicial), authenticate, validade e handle (nó folha).\n\n\u003cimg src=\"./media/images/middleware.png\" /\u003e\n\n## Gitflow\n\n\u003cimg src=\"./media/images/gitflow-v1.png\" /\u003e\n\n## Testes com coverages reports\n\n\u003cimg src=\"./media/images/all-coverages.png\" /\u003e\n\n\u003cimg src=\"./media/images/delete-comment-coverage.png\" /\u003e\n\n\u003cimg src=\"./media/images/alias-tests.png\" /\u003e\n\n## Instruções para rodar a API\n\n### Pré-requisitos\n\n-   NodeJs v12.22.9\n-   Yarn v1.21.1\n-   Docker v20.10.12, build e91ed57\n-   Docker compose v1.29.2, build 5becea4c\n-   Makefile para rodar os aliases\n\n### passo a passo\n\n```bash\n# Para clonar repositório\ngit clone https://github.com/venzel/api-tindin.git\n\n# Para entrar na pasta do projeto\ncd api-tindin\n\n# Renomear arquivo .env.example para .env\ncp -r .env.example .env\n\n# Inserir as variáveis de ambiente no arquivo .env\n# Para gerar a o SENTRY_DSN: https://sentry.io/\n# Para gerar os TOKEN_SECRET e TOKEN_SECRET_REFRESH http://www.md5.cz/\nSENTRY_DSN=\nTOKEN_SECRET=\nTOKEN_SECRET_REFRESH=\n\n# Para instalar os pacotes\nmake install\n\n# Para rodar os testes\nmake test\n\n# Para subir o container do mongodb na porta 27017\nmake up\n\n# Para rodar as seeds do projeto (email: admin@admin.com, senha: G1rafarosa#)\nmake seed\n\n# Para executar o projeto na porta 3010\nmake run\n```\n\n## Autor\n\nEnéas Almeida\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feneas-almeida%2Fapi-tindin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feneas-almeida%2Fapi-tindin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feneas-almeida%2Fapi-tindin/lists"}