{"id":51169631,"url":"https://github.com/devalex-full/north-back","last_synced_at":"2026-06-26T23:03:46.808Z","repository":{"id":367413810,"uuid":"1272891209","full_name":"DevAlex-full/north-back","owner":"DevAlex-full","description":"API backend do North para tarefas, finanças, metas, projetos, leads e dashboard operacional.","archived":false,"fork":false,"pushed_at":"2026-06-25T21:47:50.000Z","size":51,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T23:13:26.910Z","etag":null,"topics":["api","fastify","nodejs","postgresql","prisma","supabase","typescript"],"latest_commit_sha":null,"homepage":null,"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/DevAlex-full.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-18T03:00:48.000Z","updated_at":"2026-06-25T21:47:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/DevAlex-full/north-back","commit_stats":null,"previous_names":["devalex-full/north-back"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/DevAlex-full/north-back","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevAlex-full%2Fnorth-back","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevAlex-full%2Fnorth-back/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevAlex-full%2Fnorth-back/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevAlex-full%2Fnorth-back/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DevAlex-full","download_url":"https://codeload.github.com/DevAlex-full/north-back/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DevAlex-full%2Fnorth-back/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34835782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"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","fastify","nodejs","postgresql","prisma","supabase","typescript"],"created_at":"2026-06-26T23:03:46.651Z","updated_at":"2026-06-26T23:03:46.800Z","avatar_url":"https://github.com/DevAlex-full.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧭 North — Backend API\n\nSistema pessoal de organização de rotina, finanças e produtividade.\n\n## 🚀 Stack\n\n- **Runtime:** Node.js + TypeScript Strict\n- **Framework:** Fastify\n- **ORM:** Prisma\n- **Banco:** PostgreSQL (Supabase)\n- **Auth:** JWT + Refresh Token\n- **Validação:** Zod\n- **Deploy:** Render\n\n---\n\n## 🔐 Segurança (v2)\n\n- **Access Token** assinado via `@fastify/jwt` usando `JWT_SECRET`.\n- **Refresh Token** assinado separadamente via `jsonwebtoken` usando `JWT_REFRESH_SECRET` — secret diferente do access token, com rotação a cada uso (o token antigo é revogado ao gerar um novo).\n- **Validação Zod** em `request.body`, `request.params` e `request.query` de todos os endpoints (`src/validators/*.validator.ts`).\n- **Geração automática de tarefas diárias**: `TaskService.ensureTasksForDate()` cria as tarefas do dia a partir dos `ScheduleBlock` ativos para o dia da semana, sem duplicar, sempre que o dashboard ou a agenda são consultados.\n\n---\n\n## 📦 Changelog v2\n\n- ✅ Corrigido: refresh token usava o mesmo secret do access token.\n- ✅ Adicionado: validação Zod em 10 controllers que recebiam `request.body as any`.\n- ✅ Corrigido: dashboard ficava vazio no dia seguinte ao seed (tarefas agora são geradas automaticamente a partir da rotina semanal).\n- ✅ Adicionada dependência `jsonwebtoken` + `@types/jsonwebtoken`.\n- ✅ `pino-pretty` e `dotenv` movidos para `devDependencies`.\n\n---\n\n## ⚙️ Pré-requisitos\n\n- Node.js 18+\n- npm ou yarn\n- PostgreSQL (local ou Supabase)\n\n---\n\n## 🛠️ Instalação\n\n```bash\n# 1. Clone o repositório\ngit clone \u003crepo-url\u003e\ncd north-backend\n\n# 2. Instale as dependências\nnpm install\n\n# 3. Configure o ambiente\ncp .env.example .env\n# Edite o .env com suas credenciais\n\n# 4. Gere o Prisma Client\nnpm run db:generate\n\n# 5. Execute as migrations\nnpm run db:migrate\n\n# 6. Rode o seed inicial\nnpm run db:seed\n\n# 7. Inicie o servidor\nnpm run dev\n```\n\n---\n\n## 🌍 Variáveis de Ambiente\n\n```env\nDATABASE_URL=\"postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=public\"\nJWT_SECRET=\"sua-chave-secreta-jwt\"\nJWT_REFRESH_SECRET=\"sua-chave-secreta-refresh\"\nJWT_EXPIRES_IN=\"15m\"\nJWT_REFRESH_EXPIRES_IN=\"7d\"\nPORT=3000\nNODE_ENV=\"development\"\nCORS_ORIGIN=\"*\"\n```\n\n---\n\n## 🗄️ Banco de Dados (Supabase)\n\n1. Crie um projeto em [supabase.com](https://supabase.com)\n2. Vá em **Settings → Database**\n3. Copie a **Connection String** (modo `URI`)\n4. Cole no `.env` como `DATABASE_URL`\n\n---\n\n## ☁️ Deploy no Render\n\n1. Crie conta em [render.com](https://render.com)\n2. Novo serviço → **Web Service**\n3. Conecte o repositório GitHub\n4. Configure:\n   - **Build Command:** `npm install \u0026\u0026 npm run db:generate \u0026\u0026 npm run build`\n   - **Start Command:** `npm run db:migrate:prod \u0026\u0026 node dist/server.js`\n5. Adicione as variáveis de ambiente\n6. Deploy!\n\n---\n\n## 📡 Endpoints da API\n\n### Auth\n| Método | Rota | Descrição |\n|--------|------|-----------|\n| POST | `/api/v1/auth/register` | Cadastro |\n| POST | `/api/v1/auth/login` | Login |\n| POST | `/api/v1/auth/refresh` | Renovar token |\n| POST | `/api/v1/auth/logout` | Logout |\n| GET | `/api/v1/auth/me` | Perfil |\n| PUT | `/api/v1/auth/profile` | Atualizar perfil |\n| PUT | `/api/v1/auth/settings` | Configurações |\n| PUT | `/api/v1/auth/notifications` | Notificações |\n\n### Dashboard\n| Método | Rota | Descrição |\n|--------|------|-----------|\n| GET | `/api/v1/dashboard` | Dados do dashboard |\n\n### Tarefas\n| Método | Rota | Descrição |\n|--------|------|-----------|\n| GET | `/api/v1/tasks` | Listar tarefas |\n| GET | `/api/v1/tasks/progress` | Progresso do dia |\n| POST | `/api/v1/tasks` | Criar tarefa |\n| PUT | `/api/v1/tasks/:id` | Atualizar tarefa |\n| DELETE | `/api/v1/tasks/:id` | Deletar tarefa |\n\n### Financeiro\n| Método | Rota | Descrição |\n|--------|------|-----------|\n| GET | `/api/v1/financial/categories` | Categorias |\n| POST | `/api/v1/financial/categories` | Criar categoria |\n| GET | `/api/v1/financial/transactions` | Transações |\n| POST | `/api/v1/financial/transactions` | Registrar transação |\n| GET | `/api/v1/financial/summary?period=day\\|week\\|month` | Resumo |\n| GET | `/api/v1/financial/daily-goal` | Meta Indrive do dia |\n| PUT | `/api/v1/financial/daily-goal` | Atualizar meta |\n| GET | `/api/v1/financial/suggestion?amount=200` | Sugestão divisão |\n\n### Leads / CRM\n| Método | Rota | Descrição |\n|--------|------|-----------|\n| GET | `/api/v1/leads` | Listar leads |\n| POST | `/api/v1/leads` | Criar lead |\n| PUT | `/api/v1/leads/:id` | Atualizar lead |\n| DELETE | `/api/v1/leads/:id` | Deletar lead |\n\n### Workana\n| GET | `/api/v1/workana` | Listar propostas |\n| GET | `/api/v1/workana/week-count` | Propostas da semana |\n| POST | `/api/v1/workana` | Criar proposta |\n\n### Projetos\n| GET | `/api/v1/projects` | Listar projetos |\n| POST | `/api/v1/projects` | Criar projeto |\n| POST | `/api/v1/projects/:id/tasks` | Criar tarefa do projeto |\n\n### Metas\n| GET | `/api/v1/goals` | Listar metas |\n| PUT | `/api/v1/goals/:id` | Atualizar progresso |\n\n### Agenda\n| GET | `/api/v1/schedule?dayOfWeek=1` | Blocos da semana |\n\n### Conteúdo\n| GET | `/api/v1/content?platform=instagram` | Conteúdos |\n\n### Empregos\n| GET | `/api/v1/jobs` | Vagas |\n\n---\n\n## 🏥 Health Check\n\n```\nGET /health\n```\n\n---\n\n## 🔐 Credenciais do Seed\n\n```\nEmail: alex@north.app\nSenha: north2024\n```\n\n---\n\n## 📁 Estrutura\n\n```\nsrc/\n├── app/           # Configuração do Fastify\n├── config/        # Variáveis de ambiente\n├── controllers/   # Handlers das rotas\n├── routes/        # Definição das rotas\n├── services/      # Regras de negócio\n├── repositories/  # Acesso ao banco\n├── middlewares/   # Auth, erros\n├── lib/           # Prisma client\n├── types/         # Tipagens\n└── server.ts      # Entry point\n\nprisma/\n├── schema.prisma  # Schema do banco\n└── seed.ts        # Dados iniciais\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevalex-full%2Fnorth-back","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevalex-full%2Fnorth-back","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevalex-full%2Fnorth-back/lists"}