Daily Bread - A palavra diária direto no e-mail
This project is a Node.js backend application designed to be hosted on Vercel Functions. It provides an endpoint that triggers a request to the AiMlApi.com, retrieves text based on a specified prompt, and sends that text via email to a designated address.
- Sobre o Projeto
- 🏛️ Arquitetura
- 🚀 Começando
▶️ Uso- 🔧 Variáveis de Ambiente
- 🚢 Deploy
- 🤝 Como Contribuir
- 📜 Licença
O Daily Bread API é uma aplicação backend Node.js que automatiza o envio de uma palavra diária por e-mail. Ele expõe um endpoint hospedado em Vercel Functions, que aciona uma requisição à AiMlApi.com para obter um texto baseado em um prompt específico e envia esse conteúdo para o endereço de e-mail configurado.
O objetivo é facilitar o recebimento diário de mensagens inspiradoras, sem depender de plataformas de terceiros, utilizando uma arquitetura moderna, escalável e fácil de manter.
Muitas pessoas desejam receber mensagens inspiradoras diariamente, mas dependem de plataformas de terceiros, redes sociais ou aplicativos que nem sempre oferecem flexibilidade, privacidade ou personalização. O Daily Bread API resolve esse problema ao automatizar o envio de uma palavra diária diretamente para o e-mail do usuário, sem a necessidade de acessar aplicativos externos ou lidar com notificações indesejadas. Isso garante praticidade, controle sobre o conteúdo recebido e independência de plataformas proprietárias.
O projeto está em produção.
- Runtime: Node.js v20.x
- Framework: Express.js (orquestrado via Vercel Functions)
- Linguagem: TypeScript
- Banco de Dados: MongoDB com Mongoose
- Autenticação: Google OAuth 2.0
- Logging: Pino com Pino-Pretty
- Deployment: Vercel
Este projeto foi construído seguindo os princípios da Clean Architecture para garantir um código desacoplado, testável, escalável e de fácil manutenção.
A arquitetura é dividida em camadas concêntricas, onde a regra principal é que as dependências sempre apontam para dentro. A camada mais interna (domain) não conhece nenhuma das camadas externas.
domain: O coração da aplicação. Contém as entidades de negócio (ex:User,Video), as regras de negócio (Casos de Uso) e as interfaces (contratos) para o mundo externo (ex:IVideoRepository). É 100% independente de frameworks.application: Orquestra o fluxo de dados entre a camada de infraestrutura e o domínio. Contém osControllersque recebem as requisições, validam os dados e chamam os Casos de Uso apropriados.infrastructure: A camada mais externa. Contém todos os detalhes técnicos: a configuração do servidor, a implementação do repositório com MongoDB/Mongoose, clientes para APIs externas (YouTube), o logger, etc. Esta camada implementa as interfaces definidas nodomain.
Essa abordagem nos permite, por exemplo, trocar o MongoDB por outro banco de dados alterando apenas a camada de infrastructure, sem impactar a lógica de negócio.
/src
├── domain/
│ ├── entities/
│ ├── errors/
│ ├── repositories/
│ └── services/
│
├── application/
│ └── use-cases/
│
└── infrastructure/
├── config/
├── database/
│ └── mongodb/
├── logger/
├── services/
│ └── google-account/
│ └── google-auth/
│ └── youtube/
├── web/
│ └── express/
│ └── middlewares/
└── providers/ # Injeção de Dependência
Siga estes passos para configurar e executar o projeto localmente.
- Node.js:
v20.xou superior. - npm:
v10.xou superior. - Vercel CLI:
npm install -g vercel - Um banco de dados MongoDB acessível (localmente ou na nuvem).
- Clone o repositório:
git clone https://github.com/seu-usuario/daily-bread.git cd daily-bread - Instale as dependências:
npm install
- Crie o arquivo de variáveis de ambiente. Você pode copiar o exemplo (se houver um
.env.example):cp .env.example .env
- Preencha o arquivo
.envcom suas credenciais. Consulte a seção Variáveis de Ambiente para mais detalhes.
Para iniciar o servidor de desenvolvimento local (usando a Vercel CLI), execute:
npm startO servidor estará disponível em http://localhost:3000 (ou na porta definida pela Vercel).
As seguintes variáveis são necessárias para a execução do projeto. Elas devem ser definidas em um arquivo .env na raiz do projeto.
| Variável | Descrição | Exemplo |
|---|---|---|
MONGODB_URI |
String de conexão completa com o MongoDB. | mongodb://jhon-the-baptist:ABC123@localhost:27017/ |
MONGODB_DATABASE |
Nome do banco de dados a ser utilizado. | essence-tube |
APP_CORS_ORIGIN |
Domínio do cliente autorizado a fazer requisições. | http://localhost:3001 |
O deploy é automatizado e acontece a cada push na branch master para a Vercel.
O versionamento do projeto segue o Semantic Versioning e utiliza o pacote standard-version para gerar changelog, atualizar a versão no package.json e criar tags automaticamente com base nos commits.
Para ver todas as mudanças e versões, consulte o nosso CHANGELOG.md.
Para criar uma nova versão, gere changelog, commit e tag, execute:
npm run releaseNosso fluxo de contribuição é baseado em Pull Requests diretamente neste repositório:
- Crie uma Branch para sua nova feature ou correção. Use um nome descritivo (em inglês) e siga um padrão, como
feature/minha-nova-featureoufix/corrige-bug-x:
git checkout -b feature/minha-nova-feature- Desenvolva e Faça o Commit de suas mudanças. Escreva mensagens de commit claras e significativas seguindo o padrão Conventional Commits.
git commit -m "feat: Adiciona nova funcionalidade de busca por tags"- Faça o Push para a sua branch:
git push origin feature/minha-nova-feature- Abra um Pull Request neste repositório. O título do PR deve ser claro e a descrição deve explicar o que foi feito, por que foi feito e como pode ser testado. Se o PR resolve uma Issue existente, mencione-a na descrição (ex:
Resolves #42).
Este projeto está sob a licença MIT. Veja o arquivo LICENSE.md para mais detalhes.
