Firebase Functions - Utilizando o Realtime Database
Passo a passo para usar Firebase Functions com Realtime Database para gerenciar usuários, desde o registro até a exclusão e listagem de dados

Olá meus Unicórnios! 🦄✨
Realtime Database é uma base de dados excelente para entregar dados em tempo real para seus usuários.
E a conexão com o Firebase Function nos abre portas muito legais.
Para este tutorial, iremos criar 3 funções:
- RegistraUsuario: Que ira popular o nó "/usuarios/[ID_DO_USUARIO]/"
- BuscaUsuario: Que ira buscar um nó "/usuarios/[ID_DO_USUARIO]/"
- DeletaUsuario: Que ira deletar o nó "/usuarios/[ID_DO_USUARIO]/"
- ListaUsuarios: Que ira retornar todos os usuários no nó "/usuarios/"
Criando a Base de Dados
Acesse o Console do Firebase e entre em eu Projeto.
No menu da esquerda, clique em "Realtime Database":

Na janela aberta, clique em "Criar Banco de Dados":

Em "Configurar banco de dados" clique em "Próximo":

Em seguida, clique em "Ativar":

Após isto, o Banco de Dados será iniciado.
Copie a URL do seu Banco de Dados:

Neste caso é:
https://testespaloma-default-rtdb.firebaseio.com/
Iniciando Database em nosso "index.js"
Iremos precisar da dependência "firebase-admin" que nos da acesso a todos os serviços do Firebase:
const admin = require("firebase-admin");
E em seguida, iremos iniciar o App:
admin.initializeApp({
databaseURL: 'https://testespaloma-default-rtdb.firebaseio.com/'
});
RegistraUsuario
Esta função ira criar e/ou atualizar um Usuário existente, populando o usuário em:
/usuarios/[CodigoUsuario]
A função que ira receber um Json com "CodigoUsuario" e "NomeUsuario":
{
"CodigoUsuario": 1,
"NomeUsuario": "Paloma"
}
Precisamos validar se os campos foram preenchidos, e após isto, popular os dados na base:
exports.RegistraUsuario = functions.https.onRequest(async (req, res) => {
var InfCodigoUsuario = req.body.CodigoUsuario;
var InfNomeUsuario = req.body.NomeUsuario;
if(!InfCodigoUsuario)
{
return res.status(400).json({ Message: "Parametro 'CodigoUsuario' e obrigatorio" });
}
if(!InfNomeUsuario)
{
return res.status(400).json({ Message: "Parametro 'NomeUsuario' e obrigatorio" });
}
await admin.database().ref('/usuarios/' + InfCodigoUsuario + '/').update({
Nome: InfNomeUsuario
});
res.json({ Status: "OK" });
});
Após isto, iremos adicionar o Rewrite no "firebase.json":
{
"source": "/RegistraUsuario/**",
"function": {
"functionId": "RegistraUsuario"
}
}
Teremos como resposta, um objeto com "Status: OK":
{
"Status": "OK"
}
BuscaUsuario
Esta função ira buscar um Usuário, buscando pelo nó:
/usuarios/[CodigoUsuario]
A função ira receber um Json com "CodigoUsuario":
{
"CodigoUsuario": 1
}
Precisamos validar se o campo foi preenchido, verificar se o usuário existe, e após isto, realizar a busca:
exports.BuscaUsuario = functions.https.onRequest(async (req, res) => {
var InfCodigoUsuario = req.body.CodigoUsuario;
if(!InfCodigoUsuario)
{
return res.status(400).json({ Message: "Parametro 'CodigoUsuario' e obrigatorio" });
}
const snapshot = await admin.database().ref('/usuarios/' + InfCodigoUsuario + '/').once("value");
if(!snapshot.exists())
{
return res.status(404).json({ Message: "Usuario nao Localizado" });
}
res.json(snapshot.val());
});
Após isto, iremos adicionar o Rewrite no "firebase.json":
{
"source": "/BuscaUsuario/**",
"function": {
"functionId": "BuscaUsuario"
}
}
Teremos como resposta, um objeto com os dados do Usuário:
{
"Nome": "Paloma"
}
DeletaUsuario
Esta função ira deletar um Usuário, buscando pelo nó:
/usuarios/[CodigoUsuario]
A função ira receber um Json com "CodigoUsuario":
{
"CodigoUsuario": 1
}
Precisamos validar se o campo foi preenchido, verificar se o usuário existe, e após isto, realizar a exclusão:
exports.DeletaUsuario = functions.https.onRequest(async (req, res) => {
var InfCodigoUsuario = req.body.CodigoUsuario;
if(!InfCodigoUsuario)
{
return res.status(400).json({ Message: "Parametro 'CodigoUsuario' e obrigatorio" });
}
const snapshot = await admin.database().ref('/usuarios/' + InfCodigoUsuario + '/').once("value");
if(!snapshot.exists())
{
return res.status(404).json({ Message: "Usuario nao Localizado" });
}
await admin.database().ref('/usuarios/' + InfCodigoUsuario + '/').remove();
res.json({ Status: "OK" });
});
Após isto, iremos adicionar o Rewrite no "firebase.json":
{
"source": "/DeletaUsuario/**",
"function": {
"functionId": "DeletaUsuario"
}
}
Teremos como resposta, um objeto com "Status: OK":
{
"Status": "OK"
}
ListaUsuarios
Ao chamar a função, será retornado um Json com todos os usuários:
exports.ListaUsuarios = functions.https.onRequest(async (req, res) => {
const snapshot = await admin.database().ref('/usuarios/').once("value");
if(!snapshot.exists())
{
return res.status(404).json({ Message: "Nenhum Usuario Localizado" });
}
const Usuarios = snapshot.val();
const Resultado = [];
for( const [CodigoUsuario, Dados] of Object.entries(Usuarios) )
{
Resultado.push({
Codigo: CodigoUsuario,
Nome: Dados.Nome
});
}
res.json(Resultado);
});
Após isto, iremos adicionar o Rewrite no "firebase.json":
{
"source": "/ListaUsuarios/**",
"function": {
"functionId": "ListaUsuarios"
}
}
Teremos como resposta, um array com os usuários:
[
{
"Codigo": "1",
"Nome": "Paloma"
}
]
Por hoje é só, meus unicórnios! 🦄✨
Que a magia do arco-íris continue brilhando em suas vidas! Até mais! 🌈🌟