{"id":30453644,"url":"https://github.com/zyasuo/tech-flow","last_synced_at":"2026-04-14T03:32:37.620Z","repository":{"id":310286352,"uuid":"1039109632","full_name":"zYasuo/tech-flow","owner":"zYasuo","description":"Server application using Express and TypeScript","archived":false,"fork":false,"pushed_at":"2025-08-17T01:56:18.000Z","size":111,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-08-17T03:30:53.976Z","etag":null,"topics":["decorators","express-js","inversify","modules","redis","sequelize","typescript","zod"],"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/zYasuo.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":"2025-08-16T13:57:18.000Z","updated_at":"2025-08-17T01:56:21.000Z","dependencies_parsed_at":"2025-08-17T03:31:09.907Z","dependency_job_id":"454f484f-c691-4fbd-9f56-210e4df1e57f","html_url":"https://github.com/zYasuo/tech-flow","commit_stats":null,"previous_names":["zyasuo/tech-flow"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/zYasuo/tech-flow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zYasuo%2Ftech-flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zYasuo%2Ftech-flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zYasuo%2Ftech-flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zYasuo%2Ftech-flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zYasuo","download_url":"https://codeload.github.com/zYasuo/tech-flow/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zYasuo%2Ftech-flow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273392282,"owners_count":25097257,"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-09-03T02:00:09.631Z","response_time":76,"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":["decorators","express-js","inversify","modules","redis","sequelize","typescript","zod"],"created_at":"2025-08-23T16:01:10.119Z","updated_at":"2026-04-14T03:32:37.594Z","avatar_url":"https://github.com/zYasuo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tech-flow\n\n![Node.js](https://img.shields.io/badge/Node.js-v18+-339933?style=flat\u0026logo=node.js\u0026logoColor=white)  \n![TypeScript](https://img.shields.io/badge/TypeScript-5.8+-3178C6?style=flat\u0026logo=typescript\u0026logoColor=white)  \n![Express](https://img.shields.io/badge/Express-5.1+-000000?style=flat\u0026logo=express\u0026logoColor=white)  \n![Sequelize](https://img.shields.io/badge/Sequelize-6+-52B0E7?style=flat\u0026logo=sequelize\u0026logoColor=white)  \n![Redis](https://img.shields.io/badge/Redis-7+-DC382D?style=flat\u0026logo=redis\u0026logoColor=white)  \n![InversifyJS](https://img.shields.io/badge/InversifyJS-DI-00b5ad?style=flat\u0026logo=inversify\u0026logoColor=white)  \n\n**tech-flow** é um sistema de gerenciamento de projetos e tarefas com **autenticação JWT**, integração com **GitHub** e recursos de cache utilizando **Redis**. Foi desenvolvido com **Express.js**, **TypeScript**, **Sequelize ORM** e **InversifyJS** para injeção de dependência.\n\n---\n\n## 🚀 Funcionalidades\n\n- **Autenticação JWT** - Registro, login, refresh token e logout  \n- **Gerenciamento de Projetos** - CRUD completo de projetos por usuário  \n- **Gerenciamento de Tarefas** - CRUD de tarefas vinculadas a projetos  \n- **Integração GitHub** - Consulta repositórios públicos e vincula aos projetos  \n- **Validação de dados** - Schemas de validação com **Zod**  \n- **Banco MySQL** - Persistência de dados com **Sequelize ORM**  \n- **Cache Redis** - Otimização de consultas e redução de chamadas externas  \n- **InversifyJS** - Injeção de dependência para modularidade e escalabilidade  \n\n---\n\n## 📁 Estrutura de Pastas e Módulos\n\n```bash\nsrc\n├── common\n│   ├── di          # Configuração de Inversify (injeção de dependência)\n│   ├── errors      # Classes de erros personalizados\n│   └── tokens      # Tokens de identificação para serviços e repositórios\n├── config          # Configurações globais (DB, Redis, etc.)\n├── middleware      # Middlewares globais (auth, logger, etc.)\n├── modules\n│   ├── auth        # Autenticação e JWT\n│   │   ├── controller\n│   │   ├── jwt\n│   │   ├── repository\n│   │   └── services\n│   ├── cache       # Integração e utilitários de cache Redis\n│   ├── db          # Inicialização do Sequelize e conexão MySQL\n│   ├── github      # Serviços para integração com a API do GitHub\n│   ├── projects    # CRUD de projetos\n│   │   ├── controller\n│   │   ├── repositories\n│   │   └── services\n│   ├── task        # CRUD de tarefas\n│   │   ├── controller\n│   │   ├── repositories\n│   │   └── services\n│   └── user        # Serviços e repositórios de usuários\n├── models          # Modelos Sequelize (User, Project, Task)\n├── routes          # Definição centralizada das rotas\n└── server.ts       # Ponto de entrada da aplicação\n```\n\n### 🔎 Explicação dos Módulos\n\n- **Auth** → Responsável pela autenticação de usuários com JWT (registro, login, refresh token, logout).  \n- **Cache** → Implementação de cache com Redis para consultas e respostas da API (ex.: repositórios GitHub).  \n- **DB** → Configuração e inicialização da conexão com MySQL usando Sequelize.  \n- **GitHub** → Integração com a API pública do GitHub para buscar repositórios e associá-los a projetos.  \n- **Projects** → CRUD de projetos, com regras de negócio para associação ao usuário autenticado.  \n- **Task** → CRUD de tarefas, sempre vinculadas a um projeto.  \n- **User** → Camada de repositórios e serviços para manipulação de dados de usuários.  \n- **Common** → Contém utilitários comuns como tratamento de erros, tokens de DI e configuração da injeção de dependência.  \n\n---\n\n## ⚡ Como rodar o projeto\n\n### 1. Clone o repositório\n```bash\ngit clone https://github.com/zYasuo/tech-flow.git\ncd tech-flow\n```\n\n### 2. Instale as dependências\n```bash\nnpm install\n```\n\n### 3. Configure as variáveis de ambiente\nCrie um arquivo `.env` na raiz do projeto:\n\n```env\n# Servidor\nNODE_ENV=development\nSERVER_PORT=3001\n\n# Banco de dados\nDB_NAME_SEQUELIZE=tech-flow\nDB_USER_SEQUELIZE=root\nDB_PASSWORD_SEQUELIZE=sua_senha\nDB_HOST_SEQUELIZE=localhost\nDB_PORT_SEQUELIZE=3306\n\n# JWT\nJWT_SECRET=seu_jwt_secret\nJWT_ISSUER=tech-flow\nJWT_AUDIENCE=api-users\n\n# Redis\nREDIS_USERNAME=default\nREDIS_PASSWORD=sua_senha_redis\nREDIS_HOST=localhost\nREDIS_PORT=6379\n```\n\n### 4. Rodando a aplicação\n\n#### 🐳 **Com Docker (Recomendado)**\n\nPara Windows:\n```powershell\n# Iniciar Docker Desktop\nnpm run docker:start\n\n# Ambiente de desenvolvimento\nnpm run docker:dev\n\n# Ambiente de produção\nnpm run docker:prod\n```\n\nPara Linux/Mac:\n```bash\n# Iniciar containers\ndocker-compose up -d\n\n# Ver logs\ndocker-compose logs -f\n```\n\n#### 💻 **Desenvolvimento Local**\n\nExecute as migrations (opcional, se usar SQL/Sequelize-CLI):\n```bash\nnpx sequelize-cli db:migrate\n```\n\nModo desenvolvimento (com **hot reload**):\n```bash\nnpm run dev\n```\n\nRodar os testes automatizados:\n```bash\nnpm test\n```\n\nGerar build de produção:\n```bash\nnpm run build\n```\n\nExecutar em produção:\n```bash\nnpm start\n```\n\n\u003e Após iniciar, a API estará disponível em:  \n👉 `http://localhost:3001`  \n👉 Health Check: `http://localhost:3001/health`\n\n---\n\n## 🐳 Comandos Docker\n\n### Windows (PowerShell)\n| Comando | Descrição |\n|---------|-----------|\n| `npm run docker:start` | Inicia o Docker Desktop |\n| `npm run docker:dev` | Ambiente de desenvolvimento (MySQL + Redis + API local) |\n| `npm run docker:prod` | Ambiente de produção completo |\n| `npm run docker:redis` | Acessa o Redis CLI |\n| `npm run docker:clean` | Limpa completamente o ambiente |\n| `npm run docker:health` | Testa o health check da API |\n| `npm run docker:up` | Inicia containers |\n| `npm run docker:down` | Para containers |\n\n### Linux/Mac\n| Comando | Descrição |\n|---------|-----------|\n| `docker-compose up -d` | Inicia todos os serviços |\n| `docker-compose down` | Para todos os serviços |\n| `docker-compose logs -f` | Visualiza logs |\n| `docker-compose restart` | Reinicia serviços |\n\n---\n\n## 📝 Autor\n\n**Danilo Aguiar**  \nDesenvolvedor Full Stack • Node.js | React |  TypeScript  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzyasuo%2Ftech-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzyasuo%2Ftech-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzyasuo%2Ftech-flow/lists"}