Este 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.
- Tecnologias Utilizadas
- Requisitos
- Instalação
- Configuração
- Comandos Disponíveis
- Scripts de Teste
- Contribuição
- Licença
Este projeto utiliza as seguintes tecnologias:
- Node.js 🟢 para a criação do servidor.
- Fastify ⚡ como framework de servidor web, com suporte a WebSockets.
- MongoDB 🐱💻 para banco de dados, usando MongoDB Memory Server para testes.
- KafkaJS 🐻 para integração com o Apache Kafka.
- Redis 🧊 (via IORedis) para gerenciamento de cache.
- JWT (JsonWebToken) 🔐 para autenticação e autorização.
- Axios 📦 para requisições HTTP.
- Stripe 💳, Woovi (PIX) 💸 e Pagar.me 💵 para integração com pagamentos.
- Node.js v18+
- MongoDB
- Redis
- Kafka (opcional, se houver necessidade de integração com filas)
-
Clone o repositório:
git clone https://github.com/gumiranda/CrazyStackNodeJs.git
-
Acesse a pasta do projeto:
cd CrazyStackNodeJs
-
Instale as dependências:
yarn
-
Compile o projeto (caso esteja usando TypeScript):
yarn build
- Rode o projeto:
yarn start
Crie um arquivo .env
na raiz do projeto e defina as variáveis de ambiente necessárias. Aqui está um exemplo de configuração:
NODE_ENV = production;
JWT_SECRET = SEUS_BAGULHO;
JWT_REFRESH_SECRET = SEUS_BAGULHO;
PORT = 3333;
REDIS_PORT = 6379;
REDIS_URL = SEUS_BAGULHO;
REDIS_PASSWORD = SEUS_BAGULHO;
GOOGLE_MAPS_API_KEY = SEUS_BAGULHO;
WOOVI_KEY = "SEUS_BAGULHO";
WOOVI_WEBHOOK_SECRET = "SEUS_BAGULHO";
FUSORARIOBR = "production";
DATABASE = "mongodb"; // postgres or mongodb
CLOUDFLARE_R2_ACCESS_KEY_ID = SEUS_BAGULHO;
CLOUDFLARE_R2_ACCOUNT_ID = SEUS_BAGULHO;
CLOUDFLARE_R2_BUCKET_NAME = SEUS_BAGULHO;
CLOUDFLARE_R2_SECRET_ACCESS_KEY = SEUS_BAGULHO;
RABBITMQ_URL = SEUS_BAGULHO;
MESSAGE_BROKER = rabbitmq;
MONGO_URL_PROD = "SEUS_BAGULHO";
RESEND_API_KEY = SEUS_BAGULHO;
EMAIL_PROVIDER = resend;
MONGO_URL = "SEUS_BAGULHO";
PGHOST = "SEUS_BAGULHO";
PGDATABASE = "SEUS_BAGULHO";
PGUSER = "SEUS_BAGULHO";
PGPASSWORD = "SEUS_BAGULHO";
ENDPOINT_ID = "SEUS_BAGULHO";
PGPORT = 5432;
KAFKAJS_NO_PARTITIONER_WARNING = 1;
KAFKA_USERNAME = SEUS_BAGULHO;
KAFKA_PASSWORD = SEUS_BAGULHO;
KAFKA_HOST = SEUS_BAGULHO;
KAFKA_CLIENT_ID = SEUS_BAGULHO;
PAGARME_KEY = SEUS_BAGULHO;
yarn start
: Inicia a API em produção.yarn build
: Remove a pastadist
e compila o TypeScript.yarn test
: Executa os testes com o Jest.yarn format
: Formata o código utilizando Prettier.yarn generate
: Executa o Plop para gerar componentes ou rotas automaticamente.
yarn test:db
: Testa a integração com o banco de dados.yarn test:all
: Executa todos os testes.yarn test:spec
: Testa arquivos específicos.yarn test:t
: Testes personalizados.yarn test:v
: Testes com output detalhado.
- Clone o template do projeto a partir do repositório: CrazyStackNodeJs
- Baixe o repositório
- Rode o comando:
yarn
- Crie o arquivo
.env
a partir do arquivoenv.example
- Acesse: MongoDB Atlas
- Crie sua conta e um novo cluster.
- Permita acesso de qualquer IP através do link: Network Access
- Defina as seguintes variáveis no arquivo
.env
:DATABASE=mongodb MONGO_URL=<URL do banco de teste> MONGO_URL_PROD=<URL do banco de produção>
- Acesse: CloudAMQP
- Crie uma nova instância: Create Instance
- Atualize o arquivo
.env
com a variável:RABBITMQ_URL=<URL do RabbitMQ>
- No gerenciador do RabbitMQ, crie os seguintes tópicos:
newOwner
resendEmailVerification
updatePosition
routeDriverFinished
sendEmailVerification
- Gere um secret de 64 caracteres em: JWT Secret Generator
- Acesse: Cloudflare
- Crie um bucket no armazenamento R2
- Gere um token de API com permissão de leitura/gravação
- Adicione ao arquivo
.env
:CLOUDFLARE_R2_SECRET_ACCESS_KEY=<Chave de acesso secreta> CLOUDFLARE_R2_BUCKET_NAME=<Nome do bucket> CLOUDFLARE_R2_ACCESS_KEY_ID=<ID da chave de acesso> CLOUDFLARE_R2_ACCOUNT_ID=<ID da conta>
- Acesse: Resend API Keys
- Crie uma chave de API e adicione ao
.env
- Acesse: Google Maps API
- Crie uma chave de API e adicione ao
.env
:GOOGLE_MAPS_API_KEY=<Sua chave de API>
- Acesse: Upstash
- Crie um banco de dados e adicione ao
.env
:REDIS_URL=<URL do Redis> REDIS_PASSWORD=<Senha do Redis>
- Acesse: Fly.io
- Adicione um cartão de crédito e conecte o GitHub
- Rode o comando para instalar o Flyctl:
brew install flyctl
- Lance a aplicação:
fly launch fly deploy
- Acesse: Woovi
- Crie um novo webhook com o evento de cobrança paga
- Adicione o
WOOVI_KEY
ao arquivo.env
- Crie a webhook de cobrança paga apontando pra url do fly.io no endpoint
/api/webhooks/add
- Atualize o env com a variável
WOOVI_WEBHOOK_SECRET
- Verifique se a API está funcionando acessando a URL de documentação:
fly open /docs
- Acesse o Swagger da aplicação e crie um novo usuário para testar a configuração no /signup.
Contribuições são bem-vindas! Se você deseja melhorar este projeto, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para mais detalhes.
Adicionei emojis para tornar o README mais visualmente atraente e destaquei as bibliotecas e tecnologias utilizadas. Sinta-se à vontade para modificar conforme necessário!