Integrando o Cloud Firestore com o Cloud Functions e gerando um PDF.
Esta é a primeira série de artigos em que começo falando sobre alguns serviços que a Google oferece e nós, desenvolvedores, às vezes, não a conhecemos e acabamos deixando passar.
Um amigo desenvolveu um aplicativo e para guardar os dados foi utilizado o banco de dados (Cloud Firestore) e durante uma conversa ele teve a necessidade de gerar PDF para algumas funcionalidades.
Por o Firebase ser um Backend-as-a-Service — BaaS, onde não era cogitado, de maneira alguma utilizar um servidor somente pra gerar o PDF, então fui atrás de outros caminhos para ajudá-lo.
Foi aí que descobri um serviço muito bacana e melhor ainda, DE GRAÇA. Então, sem mais delongas, vamos ao tutorial de como construir o PDF com a integração do Cloud Firestore + Functions.
Vem comigo.
Cloud Firestore
O Cloud Firestore é uma banco de dados NoSQL (Not Only SQL) que te permite flexibilidade e escalabilidade para desenvolvimento de aplicações.
Mas Pedro, me fale quais as vantagens de utilizar esse banco?
Bom, segundo o próprio website deles, essas são algumas vantagens abordadas:
- Manter os dados em sincronia em aplicativos cliente por meio de listeners em tempo real;
- Oferecer suporte off-line para dispositivos móveis e Web para que você possa criar aplicativos responsivos que funcionem independentemente da latência da rede ou da conectividade com a Internet;
- E o melhor dentro do contexto desse artigo: oferecer integração perfeita com outros produtos do Firebase, como exemplo, o Cloud Functions.
Porém, até o dia de hoje, o Cloud Firestore encontra-se na sua versão Beta, mas isso não é um problema, pois sua API está bem evoluída.
“O Cloud Firestore está atualmente na versão Beta. A disponibilidade de recursos e o suporte a integrações e plataformas de produtos continuarão a melhorar à medida que o produto amadurece. Para mais informações sobre as limitações existentes no Cloud Firestore, consulte a documentação de limites e cotas.”
Configurando o Firestore
Primeiramente, será necessário abrir o CONSOLE do firebase e procurar o menu de serviços , selecionar a opção DATABASE e ao seu lado direito clicar em CRIAR BANCO DE DADOS.
As imagens a seguir mostram a sequência para criação do banco de dados. Na imagem 1, foi colocado o modo de teste para que seja configurado com mais rapidez, mas em ambiente de produção é necessário, e correto, iniciar no modo bloqueado.
Na imagem 2, é definido o local onde os dados serão armazenados. Por default é colocado o que foi selecionado no processo de criação do projeto.
Nas imagens 3 e 4, serão o local de criação e visualização das coleções e documentos da sua database. Para criar uma coleção basta clicar em Adicionar coleção e informar o nome da mesma. Na segunda parte é para adicionar documentos a coleção, o processo também é simples: Adicionar documento e informar os valores (Tipo, Chave e Valor).
Enfim, o database foi criado com SUCESSO!
Cloud Functions
Com o Cloud Functions você pode executar um código de back-end armazenado em servidor na nuvem do Google, sem a necessidade de gerenciar e controlar servidores, tudo pronto para você! Vamos aprender a configurá-lo e utilizá-lo!
Configurando o Cloud Functions
Vamos para a etapa número 2, onde será a configuração do nosso CLOUD FUNCTION. Agora, será necessário selecionar a opção FUNCTIONS e ao seu lado direito, clicar em COMEÇAR.
Podemos iniciar o processo de configuração da function(s) que será(ão) disponibilizado(s). Primeiramente, precisamos instalar as ferramentas de linha de comando do firebase através do NPM.
npm install -g firebase-tools
No dashboard do firebase aparecerá a mensagem “AGUARDANDO A SUA PRIMEIRA IMPLANTAÇÃO”, quando sua primeira function for enviada, essa mensagem desaparecerá e mostrará detalhes sobre a function(s).
Ainda no terminal, será necessário fazer o login com o firebase, para isso basta executar a instrução a seguir:
firebase login
Após isso, ele perguntará se você permitirá que seja coletada as informações anônimas de uso de CLI e de relatórios de erros. Fica a seu critério, mas no meu caso, optei por SIM.
Dando continuidade, será necessário executar mais dois comandos: o primeiro para INICIAR O PROJETO e o segundo para implantar a estrutura básica para servir uma CLOUD FUNCTIONS.
firebase init
Após iniciar o projeto, serão feitas algumas perguntas básicas de configuração, siga a mesma linha da imagem subsequente.
Dentro da pasta, será criado uma estrutura, como a imagem seguinte, o arquivo principal pra function é o index.js, pois neste será disponibilizado a função que será executada.
Dentro da pasta functions é preciso instalar as dependências do projeto, execute a instrução posterior:
npm install
Para geração do PDF, utilizaremos a PDFKIT que é uma biblioteca de geração de documentos em PDF para o Node e o navegador facilitando a criação de documentos complexos. O processo de instalação é bem simples. Basta executar o comando abaixo na mesma pasta:
npm install pdfkit
Partindo para o arquivo index.js, vamos preparar o código:
Na linha 01, 02 e 04: Carregam os módulos pdfkit, firebase-functions e firebase-admin.
Na linha 05 a 10: São configurados os parâmetros necessários para iniciar o firebase.
Na linha 12: Chamado o método para utilizar o Firestore e atribuído a uma variável chamada db.
Na linha 15: Assinatura da Cloud Function que recebe dois parâmetros, o primeiro é referente a requisição, então, serão disponibilizado todos os dados expostos da requisição e o segundo é o de resposta, ou seja, todos os dados e métodos para responder as requisições realizadas.
Na linha 16 a 19: Criado a instância para manipular/construir o PDF.
Na linha 21 a 30: Percorrendo a coleção do banco e disponibilizando no PDF.
Por fim, para fazer o deploy da function, é necessário executar o comando abaixo:
firebase deploy
Será realizado o processo do deploy dos arquivos conforme a imagem:
No terminal, o link de acesso a function e o dashboard serão disponibilizados também.
Após acessar o link, o PDF será gerado!
Gostou do texto? Agora você já tem uma ideia básica de como utilizar dois serviços robustos do firebase e disponibilizar em um biblioteca muito simples para geração de PDF. Caso você tenha alguma dúvida ou sugestão, não deixe de entrar em contato pelo email pedroedson12@hotmail.com, Telegram ou se preferir nos comentários. Ficarei agradecido em conversar contigo!
Até a próxima!
Agradecimentos 🎉
Aproveitando o espaço para agradecer a minha namorada pelo apoio e contribuição nas melhorias do texto para que o leitor entendesse da melhor forma possível.