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

Firebase Functions - Utilizando o Realtime Database

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! 🌈🌟