{"id":16513493,"url":"https://github.com/gumiranda/crazystacknodejs","last_synced_at":"2025-07-16T02:37:25.647Z","repository":{"id":39533160,"uuid":"474364866","full_name":"gumiranda/CrazyStackNodeJs","owner":"gumiranda","description":"Módulo de NodeJs da CrazyStack! O bootcamp do DevDoido","archived":false,"fork":false,"pushed_at":"2024-05-22T21:42:54.000Z","size":1374,"stargazers_count":18,"open_issues_count":6,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-22T21:43:44.995Z","etag":null,"topics":["architecture","bootcamp","clean","crazy","crazystack","dev","devdoido","doido","fastify","javascript","nestjs","nodejs","stack","tdd","typescript"],"latest_commit_sha":null,"homepage":"https://hotmart.com/pt-br/marketplace/produtos/aprenda-nodejs-e-react-native-do-zero-ao-infinito/P34477060O","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/gumiranda.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-03-26T14:02:52.000Z","updated_at":"2024-05-29T13:11:39.359Z","dependencies_parsed_at":"2023-02-18T07:45:29.737Z","dependency_job_id":"4e048d7e-c082-4bee-8a1b-a8da7ffed99b","html_url":"https://github.com/gumiranda/CrazyStackNodeJs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gumiranda/CrazyStackNodeJs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gumiranda%2FCrazyStackNodeJs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gumiranda%2FCrazyStackNodeJs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gumiranda%2FCrazyStackNodeJs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gumiranda%2FCrazyStackNodeJs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gumiranda","download_url":"https://codeload.github.com/gumiranda/CrazyStackNodeJs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gumiranda%2FCrazyStackNodeJs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259723478,"owners_count":22901919,"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","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":["architecture","bootcamp","clean","crazy","crazystack","dev","devdoido","doido","fastify","javascript","nestjs","nodejs","stack","tdd","typescript"],"created_at":"2024-10-11T16:09:07.502Z","updated_at":"2025-06-13T21:33:03.324Z","avatar_url":"https://github.com/gumiranda.png","language":"TypeScript","readme":"\n# CrazyStack Typescript Node.js - Sistema de Agendamentos Online 🚀\n\nEste repositório faz parte do bootcamp **CrazyStack** do **DevDoido** e implementa uma API completa para gerenciamento de agendamentos online utilizando **Node.js**. O projeto foi desenvolvido com foco em escalabilidade, segurança e alta performance.\n\n## Sumário 📚\n\n- [Tecnologias Utilizadas](#tecnologias-utilizadas)\n- [Requisitos](#requisitos)\n- [Instalação](#instalação)\n- [Configuração](#configuração)\n- [Comandos Disponíveis](#comandos-disponíveis)\n- [Scripts de Teste](#scripts-de-teste)\n- [Contribuição](#contribuição)\n- [Licença](#licença)\n\n## Tecnologias Utilizadas 🛠️\n\nEste projeto utiliza as seguintes tecnologias:\n\n- **Node.js** 🟢 para a criação do servidor.\n- **Fastify** ⚡ como framework de servidor web, com suporte a WebSockets.\n- **MongoDB/PostgreSQL** 🐱‍💻 para banco de dados não relacional ou relacional, você escolhe!\n- **RabbitMQ** 🐻 para processamento de jobs paralelos via mensageria\n- **Redis** 🧊 (via IORedis) para gerenciamento de cache.\n- **JWT (JsonWebToken)** 🔐 para autenticação e autorização.\n- **Axios** 📦 para requisições HTTP.\n- **Stripe** 💳, **Woovi (PIX)** 💸 e **Pagar.me** 💵 para integração com pagamentos.\n\n## Requisitos ✅\n\n- Node.js v18+\n- MongoDB\n- Redis\n- Kafka ou RabbitMQ\n\n## Instalação 🛠️\n\n1. Clone o repositório:\n\n   ```bash\n   git clone https://github.com/gumiranda/CrazyStackNodeJs.git\n   ```\n\n2. Acesse a pasta do projeto:\n\n   ```bash\n   cd CrazyStackNodeJs\n   ```\n\n3. Instale as dependências:\n\n   ```bash\n   yarn\n   ```\n\n4. Compile o projeto (caso esteja usando TypeScript):\n\n```bash\n  yarn build\n```\n\n5. Rode o projeto:\n\n```bash\n  yarn start\n```\n\n## Configuração ⚙️\n\nCrie um arquivo `.env` na raiz do projeto e defina as variáveis de ambiente necessárias. Aqui está um exemplo de configuração:\n\n```env\nNODE_ENV = production;\nJWT_SECRET = SEUS_BAGULHO;\nJWT_REFRESH_SECRET = SEUS_BAGULHO;\nPORT = 3000\nREDIS_PORT = 6379;\nREDIS_URL = SEUS_BAGULHO;\nREDIS_PASSWORD = SEUS_BAGULHO;\nGOOGLE_MAPS_API_KEY = SEUS_BAGULHO;\nWOOVI_KEY = \"SEUS_BAGULHO\";\nWOOVI_WEBHOOK_SECRET = \"SEUS_BAGULHO\";\nFUSORARIOBR = \"inactive\"; //mudar pra production se rodar local \nDATABASE = \"mongodb\"; // postgres or mongodb\nCLOUDFLARE_R2_ACCESS_KEY_ID = SEUS_BAGULHO;\nCLOUDFLARE_R2_ACCOUNT_ID = SEUS_BAGULHO;\nCLOUDFLARE_R2_BUCKET_NAME = SEUS_BAGULHO;\nCLOUDFLARE_R2_SECRET_ACCESS_KEY = SEUS_BAGULHO;\nRABBITMQ_URL = SEUS_BAGULHO;\nMESSAGE_BROKER = rabbitmq;\nMONGO_URL_PROD = \"SEUS_BAGULHO\";\nRESEND_API_KEY = SEUS_BAGULHO;\nEMAIL_PROVIDER = resend;\n\nMONGO_URL = \"SEUS_BAGULHO\";\n\nPGHOST = \"SEUS_BAGULHO\";\nPGDATABASE = \"SEUS_BAGULHO\";\nPGUSER = \"SEUS_BAGULHO\";\nPGPASSWORD = \"SEUS_BAGULHO\";\nENDPOINT_ID = \"SEUS_BAGULHO\";\nPGPORT = 5432;\n\nKAFKAJS_NO_PARTITIONER_WARNING = 1;\nKAFKA_USERNAME = SEUS_BAGULHO;\nKAFKA_PASSWORD = SEUS_BAGULHO;\nKAFKA_HOST = SEUS_BAGULHO;\nKAFKA_CLIENT_ID = SEUS_BAGULHO;\nPAGARME_KEY = SEUS_BAGULHO;\n\n```\n\n\n## Comandos Disponíveis 🖥️\n\n- `yarn start`: Inicia a API em produção.\n- `yarn build`: Remove a pasta `dist` e compila o TypeScript.\n- `yarn test`: Executa os testes com o Jest.\n- `yarn format`: Formata o código utilizando Prettier.\n- `yarn generate`: Executa o Plop para gerar componentes ou rotas automaticamente.\n\n## Scripts de Teste 🧪\n\n- `yarn test:db`: Testa a integração com o banco de dados.\n- `yarn test:all`: Executa todos os testes.\n- `yarn test:spec`: Testa arquivos específicos.\n- `yarn test:t`: Testes personalizados.\n- `yarn test:v`: Testes com output detalhado.\n\n\n# Deploy da sua PRÓPRIA API Node.js\n\n## Passo a Passo\n\n### 1. Clonar o Template\n- Clone o template do projeto a partir do repositório: [CrazyStackNodeJs](https://github.com/gumiranda/CrazyStackNodeJs)\n\n### 2. Instalação das Dependências\n- Baixe o repositório\n- Rode o comando:\n  ```bash\n  yarn\n  ```\n- Crie o arquivo `.env` a partir do arquivo `env.example`\n\n---\n\n## Configuração do Banco de Dados não relacional\n\n### 3. Criar Conta no MongoDB Atlas\n- Acesse: [MongoDB Atlas](https://www.mongodb.com/lp/cloud/atlas/try4-reg)\n- Crie sua conta e um novo cluster.\n- Permita acesso de qualquer IP através do link:\n  [Network Access](https://cloud.mongodb.com/v2/67dfe86414db796e800078bc#/security/network/accessList/addToAccessList)\n\n### 4. Variáveis de Ambiente para o MongoDB\n- Defina as seguintes variáveis no arquivo `.env`:\n  ```bash\n  DATABASE=mongodb\n  MONGO_URL=\u003cURL do banco de teste\u003e\n  MONGO_URL_PROD=\u003cURL do banco de produção\u003e\n  ```\n\n---\n\n## Configuração do RabbitMQ\n\n### 5. Criar Conta no CloudAMQP\n- Acesse: [CloudAMQP](https://customer.cloudamqp.com/signup)\n- Crie uma nova instância: [Create Instance](https://customer.cloudamqp.com/instance/create)\n- Atualize o arquivo `.env` com a variável:\n  ```bash\n  RABBITMQ_URL=\u003cURL do RabbitMQ\u003e\n  ```\n\n### 6. Criar Tópicos no RabbitMQ\n- No gerenciador do RabbitMQ, crie os seguintes tópicos:\n  - `newOwner`\n  - `resendEmailVerification`\n  - `updatePosition`\n  - `routeDriverFinished`\n  - `sendEmailVerification`\n\n---\n\n## Autenticação com JWT\n\n### 7. Gerar Secret JWT\n- Gere um secret de 64 caracteres em: [JWT Secret Generator](https://jwtsecret.com/generate)\n\n---\n\n## Armazenamento na Cloudflare R2\n\n### 8. Criar Conta na Cloudflare\n- Acesse: [Cloudflare](https://dash.cloudflare.com/login)\n- Crie um bucket no armazenamento R2\n- Gere um token de API com permissão de leitura/gravação\n\n### 9. Variáveis de Ambiente Cloudflare R2\n- Adicione ao arquivo `.env`:\n  ```bash\n  CLOUDFLARE_R2_SECRET_ACCESS_KEY=\u003cChave de acesso secreta\u003e\n  CLOUDFLARE_R2_BUCKET_NAME=\u003cNome do bucket\u003e\n  CLOUDFLARE_R2_ACCESS_KEY_ID=\u003cID da chave de acesso\u003e\n  CLOUDFLARE_R2_ACCOUNT_ID=\u003cID da conta\u003e\n  ```\n\n---\n\n## Outras Integrações\n\n### 10. Configurar Resend\n- Acesse: [Resend API Keys](https://resend.com/api-keys)\n- Crie uma chave de API e adicione ao `.env`\n\n### 11. Configurar Google Maps API\n- Acesse: [Google Maps API](https://console.cloud.google.com/apis/credentials)\n- Crie uma chave de API e adicione ao `.env`:\n  ```bash\n  GOOGLE_MAPS_API_KEY=\u003cSua chave de API\u003e\n  ```\n\n### 12. Configurar Redis no Upstash\n- Acesse: [Upstash](https://console.upstash.com/login)\n- Crie um banco de dados e adicione ao `.env`:\n  ```bash\n  REDIS_URL=\u003cURL do Redis\u003e\n  REDIS_PASSWORD=\u003cSenha do Redis\u003e\n  ```\n\n---\n\n## Deploy no Fly.io\n\n### 13. Criar Conta no Fly.io\n- Acesse: [Fly.io](https://fly.io/dashboard/personal/new-launch)\n- Adicione um cartão de crédito e conecte o GitHub\n- Rode o comando para instalar o Flyctl:\n  ```bash\n  brew install flyctl\n  ```\n- Lance a aplicação:\n  ```bash\n  fly launch\n  fly deploy\n  ```\n\n---\n\n## Configuração do PIX na Woovi\n\n### 14. Criar Conta na Woovi\n- Acesse: [Woovi](https://app.woovi.com/home/start)\n- Crie um novo webhook com o evento de cobrança paga\n- Adicione o `WOOVI_KEY` ao arquivo `.env`\n- Crie a webhook de cobrança paga apontando pra url do fly.io no endpoint `/api/webhooks/add`\n- Atualize o env com a variável `WOOVI_WEBHOOK_SECRET`\n\n---\n\n## Teste da API\n- Verifique se a API está funcionando acessando a URL de documentação:\n  ```bash\n  fly open /docs\n  ```\n\n## Criando Usuário no Swagger\n- Acesse o Swagger da aplicação e crie um novo usuário para testar a configuração no /signup.\n\n\n## Contribuição 🤝\n\nContribuições são bem-vindas! Se você deseja melhorar este projeto, sinta-se à vontade para abrir uma *issue* ou enviar um *pull request*.\n\n## Licença 📜\n\nEste projeto está licenciado sob a Licença MIT. Consulte o arquivo [LICENSE](./LICENSE) para mais detalhes.\n```\n\nAdicionei emojis para tornar o README mais visualmente atraente e destaquei as bibliotecas e tecnologias utilizadas. Sinta-se à vontade para modificar conforme necessário!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgumiranda%2Fcrazystacknodejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgumiranda%2Fcrazystacknodejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgumiranda%2Fcrazystacknodejs/lists"}