https://github.com/zyasuo/tech-flow
Server application using Express and TypeScript
https://github.com/zyasuo/tech-flow
decorators express-js inversify modules redis sequelize typescript zod
Last synced: 3 months ago
JSON representation
Server application using Express and TypeScript
- Host: GitHub
- URL: https://github.com/zyasuo/tech-flow
- Owner: zYasuo
- Created: 2025-08-16T13:57:18.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2025-08-17T01:56:18.000Z (11 months ago)
- Last Synced: 2025-08-17T03:30:53.976Z (11 months ago)
- Topics: decorators, express-js, inversify, modules, redis, sequelize, typescript, zod
- Language: TypeScript
- Homepage:
- Size: 108 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# tech-flow






**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.
---
## 🚀 Funcionalidades
- **Autenticação JWT** - Registro, login, refresh token e logout
- **Gerenciamento de Projetos** - CRUD completo de projetos por usuário
- **Gerenciamento de Tarefas** - CRUD de tarefas vinculadas a projetos
- **Integração GitHub** - Consulta repositórios públicos e vincula aos projetos
- **Validação de dados** - Schemas de validação com **Zod**
- **Banco MySQL** - Persistência de dados com **Sequelize ORM**
- **Cache Redis** - Otimização de consultas e redução de chamadas externas
- **InversifyJS** - Injeção de dependência para modularidade e escalabilidade
---
## 📁 Estrutura de Pastas e Módulos
```bash
src
├── common
│ ├── di # Configuração de Inversify (injeção de dependência)
│ ├── errors # Classes de erros personalizados
│ └── tokens # Tokens de identificação para serviços e repositórios
├── config # Configurações globais (DB, Redis, etc.)
├── middleware # Middlewares globais (auth, logger, etc.)
├── modules
│ ├── auth # Autenticação e JWT
│ │ ├── controller
│ │ ├── jwt
│ │ ├── repository
│ │ └── services
│ ├── cache # Integração e utilitários de cache Redis
│ ├── db # Inicialização do Sequelize e conexão MySQL
│ ├── github # Serviços para integração com a API do GitHub
│ ├── projects # CRUD de projetos
│ │ ├── controller
│ │ ├── repositories
│ │ └── services
│ ├── task # CRUD de tarefas
│ │ ├── controller
│ │ ├── repositories
│ │ └── services
│ └── user # Serviços e repositórios de usuários
├── models # Modelos Sequelize (User, Project, Task)
├── routes # Definição centralizada das rotas
└── server.ts # Ponto de entrada da aplicação
```
### 🔎 Explicação dos Módulos
- **Auth** → Responsável pela autenticação de usuários com JWT (registro, login, refresh token, logout).
- **Cache** → Implementação de cache com Redis para consultas e respostas da API (ex.: repositórios GitHub).
- **DB** → Configuração e inicialização da conexão com MySQL usando Sequelize.
- **GitHub** → Integração com a API pública do GitHub para buscar repositórios e associá-los a projetos.
- **Projects** → CRUD de projetos, com regras de negócio para associação ao usuário autenticado.
- **Task** → CRUD de tarefas, sempre vinculadas a um projeto.
- **User** → Camada de repositórios e serviços para manipulação de dados de usuários.
- **Common** → Contém utilitários comuns como tratamento de erros, tokens de DI e configuração da injeção de dependência.
---
## ⚡ Como rodar o projeto
### 1. Clone o repositório
```bash
git clone https://github.com/zYasuo/tech-flow.git
cd tech-flow
```
### 2. Instale as dependências
```bash
npm install
```
### 3. Configure as variáveis de ambiente
Crie um arquivo `.env` na raiz do projeto:
```env
# Servidor
NODE_ENV=development
SERVER_PORT=3001
# Banco de dados
DB_NAME_SEQUELIZE=tech-flow
DB_USER_SEQUELIZE=root
DB_PASSWORD_SEQUELIZE=sua_senha
DB_HOST_SEQUELIZE=localhost
DB_PORT_SEQUELIZE=3306
# JWT
JWT_SECRET=seu_jwt_secret
JWT_ISSUER=tech-flow
JWT_AUDIENCE=api-users
# Redis
REDIS_USERNAME=default
REDIS_PASSWORD=sua_senha_redis
REDIS_HOST=localhost
REDIS_PORT=6379
```
### 4. Rodando a aplicação
#### 🐳 **Com Docker (Recomendado)**
Para Windows:
```powershell
# Iniciar Docker Desktop
npm run docker:start
# Ambiente de desenvolvimento
npm run docker:dev
# Ambiente de produção
npm run docker:prod
```
Para Linux/Mac:
```bash
# Iniciar containers
docker-compose up -d
# Ver logs
docker-compose logs -f
```
#### 💻 **Desenvolvimento Local**
Execute as migrations (opcional, se usar SQL/Sequelize-CLI):
```bash
npx sequelize-cli db:migrate
```
Modo desenvolvimento (com **hot reload**):
```bash
npm run dev
```
Rodar os testes automatizados:
```bash
npm test
```
Gerar build de produção:
```bash
npm run build
```
Executar em produção:
```bash
npm start
```
> Após iniciar, a API estará disponível em:
👉 `http://localhost:3001`
👉 Health Check: `http://localhost:3001/health`
---
## 🐳 Comandos Docker
### Windows (PowerShell)
| Comando | Descrição |
|---------|-----------|
| `npm run docker:start` | Inicia o Docker Desktop |
| `npm run docker:dev` | Ambiente de desenvolvimento (MySQL + Redis + API local) |
| `npm run docker:prod` | Ambiente de produção completo |
| `npm run docker:redis` | Acessa o Redis CLI |
| `npm run docker:clean` | Limpa completamente o ambiente |
| `npm run docker:health` | Testa o health check da API |
| `npm run docker:up` | Inicia containers |
| `npm run docker:down` | Para containers |
### Linux/Mac
| Comando | Descrição |
|---------|-----------|
| `docker-compose up -d` | Inicia todos os serviços |
| `docker-compose down` | Para todos os serviços |
| `docker-compose logs -f` | Visualiza logs |
| `docker-compose restart` | Reinicia serviços |
---
## 📝 Autor
**Danilo Aguiar**
Desenvolvedor Full Stack • Node.js | React | TypeScript