Tots els articles
Desenvolupadors·7 min de lectura

Base de dades m77: col·leccions, filtres i dades per usuari

Cada app de builder77 inclou una base de dades integrada. Així funcionen les col·leccions, els filtres, l'ordenació i els registres per usuari, i així es mantenen privades les dades privades.

77
L'equip de builder77
builder77.com

La majoria de vegades no tocaràs mai la base de dades directament: descrius la teva app i builder77 escriu el codi que desa i llegeix les dades. Però saber com funciona t'ajuda a escriure millors instruccions, depurar més de pressa i prendre bones decisions sobre la privadesa. Aquí tens un recorregut per m77.db.

Col·leccions i registres

Les dades viuen en col·leccions: grups de registres amb nom, com tasks, bookings o posts. No cal definir cap esquema: una col·lecció es crea la primera vegada que hi escrius, i cada registre és un objecte simple amb els camps que li donis.

js
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }

builder77 afegeix id, createdAt, updatedAt i ownerId automàticament. ownerId pren el valor de l'usuari de l'app que ha iniciat la sessió, si n'hi ha, cosa que serà important per als permisos més avall.

Llegir dades: list, get i count

js
const open = await m77.db.list('tasks', {
  where: { done: false },   // exact-match filter
  sort: '-createdAt',       // '-' = descending
  limit: 50                 // up to 500
});

const one = await m77.db.get('tasks', id);          // record or null
const doneCount = await m77.db.count('tasks', { where: { done: true } });

where busca coincidències exactes als camps, cosa que cobreix la majoria de necessitats d'una app: filtres d'estat, categories, un ID pare per a registres relacionats. Per cercar mentre s'escriu en una llista no gaire gran, el més habitual és carregar els registres i filtrar al navegador.

Actualitzar i eliminar

js
await m77.db.update('tasks', id, { done: true });   // shallow merge
await m77.db.remove('tasks', id);

update fusiona els camps que passes amb el registre existent, així que només has d'enviar el que ha canviat.

Dades per usuari amb mine: true

Per a apps en què cada persona té les seves pròpies dades (diaris, pressupostos, seguiment d'hàbits), combina m77.auth amb l'opció mine. Quan un usuari ha iniciat la sessió, mine: true només retorna els registres que ha creat ell.

js
await m77.auth.signIn({ email, password });

const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });

Hi ha una segona capa de protecció integrada: un registre creat per un usuari amb la sessió iniciada només el pot actualitzar o eliminar aquest mateix usuari. Encara que algú prepari una petició a mà, l'API rebutja els canvis en registres que no són seus.

Dades públiques i privades: guia ràpida

  • Contingut públic (cartes de restaurant, articles de blog, catàlegs de productes): no cal iniciar la sessió per llegir-lo. Demana a builder77 que hi posi dades d'exemple o que afegeixi una pantalla d'administració per gestionar-lo, i edita'l quan vulguis a la pestanya Dades.
  • Enviaments (formularis de contacte, llistes d'espera, reserves): qualsevol els pot crear; tu els llegeixes a la pestanya Dades.
  • Dades personals (notes, registres de salut, finances): exigeix l'inici de sessió i consulta sempre amb mine: true.

Una regla pràctica: tot el que hi ha al codi front-end de la teva app és visible per als visitants, i les llistes sense mine: true les pot llegir qualsevol que tingui l'enllaç de l'app. Si les dades són personals, posa-les darrere de l'inici de sessió i mine. Si tota l'app és només per a tu o el teu equip, activa App privada a Configuració.

La pestanya Dades

A l'editor, la pestanya Dades et permet explorar totes les col·leccions, editar o eliminar registres, veure els usuaris de la teva app i revisar els fitxers pujats. És la manera més ràpida de corregir una errata al contingut, netejar entrades de prova o comprovar que un formulari desa el que esperes.

Les mateixes dades des de Flutter i altres clients

L'SDK web és una capa fina sobre una API REST, que és també la que fan servir les exportacions a Flutter. Això vol dir que qualsevol client pot llegir i escriure a les mateixes col·leccions:

http
GET  /api/runtime/<projectId>/db/tasks?where={"done":false}&sort=-createdAt&limit=100
POST /api/runtime/<projectId>/db/tasks   { "data": { "title": "Hi" } }
Authorization: Bearer <appUserToken>   (optional, from /auth/signin)

Els tokens dels usuaris d'una app estan limitats a un sol projecte, així que un token d'una app no serveix per a una altra. Les lectures i escriptures a la base de dades no consumeixen crèdits: crea una app amb totes les dades que vulguis.

Com demanar dades a les instruccions

Pots dirigir tot això amb llenguatge normal: «desa les despeses amb import, categoria i data; cada usuari només veu les seves», o «afegeix un camp d'estat a les reserves i un filtre per a les pendents». La IA coneix l'SDK, així que descriure el model de dades sol ser suficient.

A punt per crear-la?

Descriu la teva idea i obtén una primera versió que funciona en un minut, més o menys. Comença gratis, sense targeta de crèdit.