Skip to content

stanleygomes/daily-bread-api

Repository files navigation

Daily Bread API

Daily Bread - A palavra diária direto no e-mail

image

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.


📖 Índice


🌟 Sobre o Projeto

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.

🎯 Problema Resolvido

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.

📊 Status do Projeto

O projeto está em produção.

🛠️ Tech Stack

  • 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

🏛️ Arquitetura

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.

✨ Princípios da Clean Architecture

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.

  1. 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.
  2. application: Orquestra o fluxo de dados entre a camada de infraestrutura e o domínio. Contém os Controllers que recebem as requisições, validam os dados e chamam os Casos de Uso apropriados.
  3. 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 no domain.

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.

📁 Estrutura de Pastas

/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

🚀 Começando

Siga estes passos para configurar e executar o projeto localmente.

✅ Pré-requisitos

  • Node.js: v20.x ou superior.
  • npm: v10.x ou superior.
  • Vercel CLI: npm install -g vercel
  • Um banco de dados MongoDB acessível (localmente ou na nuvem).

💻 Instalação

  1. Clone o repositório:
    git clone https://github.com/seu-usuario/daily-bread.git
    cd daily-bread
  2. Instale as dependências:
    npm install
  3. Crie o arquivo de variáveis de ambiente. Você pode copiar o exemplo (se houver um .env.example):
    cp .env.example .env
  4. Preencha o arquivo .env com suas credenciais. Consulte a seção Variáveis de Ambiente para mais detalhes.

▶️ Uso

Para iniciar o servidor de desenvolvimento local (usando a Vercel CLI), execute:

npm start

O servidor estará disponível em http://localhost:3000 (ou na porta definida pela Vercel).


🔧 Variáveis de Ambiente

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

🚢 Deploy

O deploy é automatizado e acontece a cada push na branch master para a Vercel.

Release e versionamento

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 release

🤝 Como Contribuir

Nosso fluxo de contribuição é baseado em Pull Requests diretamente neste repositório:

  1. 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-feature ou fix/corrige-bug-x:
git checkout -b feature/minha-nova-feature
  1. 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"
  1. Faça o Push para a sua branch:
git push origin feature/minha-nova-feature
  1. 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).

📜 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE.md para mais detalhes.

About

🙏 Daily Bread - A palavra diária direto no e-mail

Topics

Resources

License

Stars

Watchers

Forks