Firebase |The beginning|


Benvenuti!
Visto che per forza di cose bisogna  iniziare dall'inizio, per poi migliorare sempre di più, e visto che sono un dilettante, mi sembra molto sensato fare uno speciale su firebase di base. Oggi andremo a vedere alcuni blocchi che non puoi non saper usare con Firebase.
Let's go! 
Prima di tutto non possiamo partire senza aver mai dato un occhio alla struttura che un probabile database fatto con firebase può avere, quindi vediamo di capire alcune cose importanti. Quello che salta subito all'occhio è sicuramente lo sfalsamento che alcuni elementi hanno rispetto alla linea verticale principale, quella in verde per capirci. Possiamo avere quindi più "livelli" per i nostri dati e ogni volta che ci spostiamo verso destra è come se facessimo una sottocartella. Possiamo quindi affermare che gli elementi Domande, Password e Utenti sono all'interno dello stesso "livello" come anche gli elementi cerchiati di azzurro sono allo stesso livello di profondità nel database ma in zone separate. Un esempio molto semplice (forse tecnicamente errato) è come se le cartelle Domande, Password e Utenti sono tutte sul desktop e dentro ognuna di loro abbiamo un'altra cartella. A livello di percorso sono tutte un gradino verso destra ma non nello stesso posto, ogni deviazione dal percorso principale viene identificato come nodo e ogni termine in grassetto è un TAG. Perché ho perso tutto questo tempo in questa spiegazione così semplice? Quando andremo a richiamare alcuni dati , e nello specifico la lista dei tag dobbiamo sapere che firebase restituisce i valori in grassetto che si trovano sulla stessa verticale nello stesso livello. Per capire meglio, se sono nel livello più esterno ,nel mio caso optoquiz, e richiamo la lista dei tag Firebase mi darà : Domande, Password e Utenti. Facendo questa chiamata io non potrò sapere cosa e quanti dati ci sono negli altri livelli. Stessa cosa , se mi posiziono sul tag Domanda1 e richiamo la lista dei tag avrò l'elenco delle risposte ma nessuna informazione su Raffaele e Nino anche se si trovano visivamente sulla stessa verticale. Abbiamo quindi capito che possiamo muoverci all'interno del database ma non sarà così semplice visto che non abbiamo una cartina generale ma solo alcuni pezzi alla volta. Per questo motivo è molto importante progettare la struttura dei dati a priori per semplificare gli spostamenti e le varie chiamate, per posizionarci nelle varie posizioni possiamo operare sia tramite una scrittura particolare sia modificando la posizione con il blocco ProjectBucket (questo valore si può impostare anche da settings del componente firebase nel designer editor per partire in una determinata posizione).
Ecco i primi due blocchi , si perché quasi tutti i blocchi di Firebase lavorano in coppia, e una volta posizionati su un tag possiamo mandare in esecuzione call GetTagList per chiedere a Firebase i valori presenti in quel livello. Immaginiamo per esempio di aver impostato da settings il 
ProjectBucket di partenza come Utenti , la risposta di Firebase sarà una lista di elementi contenente [Nino,Raffaele] . Questa è la classica notazione che troviamo in appiventor per le liste , elementi separati da virgole e all'interno di parentesi quadre, vi ricordo anche che facendo click di destra su un blocco potete mandarlo in esecuzione con il comando do it presente nel menu che comparirà, se lo facciamo su una variabile lista avremo i dati al suo interno mostrati nel blocks editor, mi raccomando bisogna essere connessi al companion o comunque in una modalità di test. 
Ok abbiamo chiamato Firebase e chiesto i dati ma che fine faranno, come arrivano a noi? Dovremo per forza utilizzare il blocco marroncino sulla destra when TagList e i nostri dati arriveranno nella variabile locale value , la possiamo prelevare semplicemente passando il mouse sulla scritta value sotto when, essendo una variabile locale non la possiamo utilizzare al di fuori del blocco when TagList se prima non la salviamo da qualche parte, nel mio caso l'ho salvata in una variabile globale LA TUA VARIABILE 😂 in questo modo la posso richiamare quando voglio. Attenzione , abbiamo parlato di lista di tag quindi la variabile che riceve i dati deve essere inizializzata come lista vuota empty list (lista vuota). Ricapitolando call GetTagList chiede al database (da ora userò db per abbreviare) la lista dei tag presenti in quel "livello" e Firebase risponde mandando i dati nella variabile locale value del blocco when TagList.
Ok Raffaele, tutto molto interessante ma io voglio sapere quello che ho salvato sotto un tag specifico , come faccio? 
Bene prima di tutto dobbiamo sapere dove si trova l'elemento in questione e qui ci allacciamo al discordo del ProjectBucket e della struttura del db , infatti se immaginiamo di essere nella fase di login della nostra app molto probabilmente abbiamo posizionato il nostro bucket sul tag Utenti per poter controllare se il nome utente è presente e magari verificare la password inserita. In questo caso ho estremizzato per ricreare la difficoltà (studiate bene come salvare i dati a seconda dell'utilizzo) ma nel nostro esempio le operazioni da fare saranno le seguenti:
  1. Impostare il bucket su Utenti (con l'apposito blocco verde)
  2. Chiamare la lista di tag
  3. Ricevere il suo valore ( value ) grazie a when TagList
  4. Verificare la presenza del nome nella lista ricevuta
  5. Se l'utente è presente impostare il bucket su Password 
  6. Richiamare il tag e il suo valore 
Avete capito l'importanza di salvare bene i dati? 😂
Perfetto, adesso immaginiamo di trovarci già sul tag Utenti e di essere sicuri della presenza di Raffaele nel nostro db, possiamo utilizzare il primo dei due blocchi viola qui sotto per richiamare il tag Raffaele e il suo valore, al posto della scritta IL TUO TAG dovremo inserire naturalmente la scritta Raffaele. Il blocco call GetValue ci mette a disposizione anche il campo valueIfTagNotThere per ritornare un feedback nel caso di assenza del tag in quella parte del db, nel mio caso ho usato NO DATA ma potrete mettere un numero , vero o falso, qualsiasi cosa e questo valore ci verrà restituito come valore del tag. Visto che questi blocchi vanno in coppia come i carabinieri (che salutiamo con affetto e stima se ci seguono) per avere i nostri valori dobbiamo utilizzare when GotValue dove nelle variabili locali ritroveremo sia il tag chiamato sia il suo valore (value). Visto che questo valore mi servirà in seguito me lo salvo nella mia variabile o in alternativa potrei usare un blocco come quello dell'esempio per portare i miei valori in una textbox oppure in una label, in questo caso potrebbe essere molto utile usare join insieme a \n per andare a capo tra il tag e il suo valore. L'effetto finale sarà quello di incolonnare i due valori appena acquisiti.    
  
Certo che non vi sfugge niente 😅 e allora vi spiego anche il secondo comando GetValue cosa fa, la stessa identica cosa di quello sopra 😂la particolarità sta nel modo in cui abbiamo scritto il tag,  infatti è come se avessimo scritto tutto il percorso per arrivare al tag Raffaele, in questo modo possiamo evitare di usare il blocco per impostare il bucket. Usando la dicitura Utenti/Raffaele stiamo dicendo a Firebase direttamente vai nella "cartella" Utenti e prendi il tag Raffaele, con entrambi i blocchi avremo come risposta Raffaele (tag) e 12345 (value) . Carino vero? Mi raccomando la scrittura perché nell'esempio ritroviamo sia lo slash (/) che backslash (\).
Adesso siamo dei veri e propri maghi di Firebase e possiamo leggere e scrivere tutto quello che vogliamo sul nostro db 🙈 dimenticato niente? Vediamo come salvare i dati nel nostro database e anche in questo caso valgono sempre le stesse regole di posizionamento nel db prima di salvare i dati, quindi se necessario dobbiamo o cambiare il ProjectBucket con il blocco set che vedi in basso oppure inserendo tutto il percorso interponendo lo slash tra i vari tag.  

Adesso immagino sia molto più semplice intuire cosa accadrà per esempio con il blocco di sinistra call StoreValue ci permette di salvare un valore (valueToStore) sotto un determinato tag che nel caso non esistesse verrà creato in automatico. Nell'esempio Firebase entrerà nel nodo Domande, raggiungere Domanda1 e visto che Risposta4 non esiste verrà creata e al suo interno salvato il valore corretta. Nel caso in cui il nostro Raffaele non metterà una bella recensione alla nostra app possiamo tranquillamente usare il blocco call ClearTag per eliminarlo così non potrà più effettuare l'accesso alla sua app 😂 Non mi stancherò mai di dirlo anche qui ci dobbiamo muovere tra i vari livelli con i metodi visti fin qui e se necessario richiamare una lista di tag per fare le nostre verifiche. In questo caso questi blocchi non hanno un comando univoco che si attiva dopo la loro esecuzione ma possiamo comunque avere un feedback usando when DataChanged che si attiva appunto quando ci sono modifiche nel db restituendo il tag e il valore che ha subito modifiche.
Questi sono i blocchi che bisogna per forza sapere usare con Firebase e comunque i pochi non trattati seguono la stessa filosofia e sono molto intuitivi, come sempre avete a disposizione i commenti per eventuali domande.
Alla prossima ... 

    
 Se hai apprezzato il mio lavoro offrimi un bel caffè 😍

 

Commenti

Posta un commento

Ciao, spero ti piaccia il blog. Se ti fa piacere qui puoi offrirmi un caffè!

Post popolari in questo blog

GOOGLE SCRIPT & KODULAR READ, WRITE, UPDATE, DELETE

Tu lo conosci THUNKABLE?