Všetky články
Pre vývojárov·7 min čítania

Databáza m77: kolekcie, filtre a dáta pre každého používateľa

Každá aplikácia v builder77 má vstavanú databázu. Ako fungujú kolekcie, filtre, triedenie a záznamy jednotlivých používateľov — a ako udržať súkromné dáta v súkromí.

77
Tím builder77
builder77.com

Väčšinu času sa databázy priamo ani nedotkneš — opíšeš aplikáciu a builder77 napíše kód, ktorý dáta ukladá a číta. Keď však vieš, ako to funguje, píšeš lepšie zadania, rýchlejšie hľadáš chyby a robíš dobré rozhodnutia o súkromí. Tu je prehliadka m77.db.

Kolekcie a záznamy

Dáta sú uložené v kolekciách — pomenovaných skupinách záznamov ako tasks, bookings alebo posts. Nedefinuje sa žiadna schéma: kolekcia vznikne pri prvom zápise a každý záznam je obyčajný objekt s poliami, ktoré mu dáš.

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

builder77 automaticky pridá id, createdAt, updatedAt a ownerId. ownerId sa nastaví na prihláseného používateľa aplikácie, ak nejaký je, čo bude dôležité pri oprávneniach nižšie.

Čítanie dát: list, get a 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 porovnáva polia presne, čo pokryje väčšinu potrieb aplikácie: filtre podľa stavu, kategórie, ID nadradeného záznamu pri súvisiacich záznamoch. Pri vyhľadávaní počas písania v menšom zozname sa bežne načítajú záznamy a filtrujú sa v prehliadači.

Úpravy a mazanie

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

update zlúči odovzdané polia s existujúcim záznamom, takže posielaš len to, čo sa zmenilo.

Dáta jednotlivých používateľov s mine: true

Pri aplikáciách, kde má každý svoje vlastné dáta — denníky, rozpočty, sledovanie návykov — skombinuj m77.auth s voľbou mine. Keď je používateľ prihlásený, mine: true vráti len záznamy, ktoré sám vytvoril.

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

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

Vstavaná je aj druhá vrstva ochrany: záznam vytvorený prihláseným používateľom môže upraviť alebo zmazať len ten istý používateľ. Aj keby niekto požiadavku zostavil ručne, API odmietne úpravy záznamov, ktoré mu nepatria.

Verejné vs. súkromné dáta: stručný sprievodca

  • Verejný obsah (položky menu, články blogu, ponuka produktov): na čítanie netreba prihlásenie. Požiadaj builder77, aby ich predvyplnil, alebo pridal administračnú obrazovku na ich správu, a kedykoľvek ich uprav na karte Dáta.
  • Odoslané formuláre (kontaktné formuláre, čakacie listiny, rezervácie): vytvoriť ich môže ktokoľvek; ty ich čítaš na karte Dáta.
  • Osobné dáta (poznámky, zdravotné záznamy, financie): vyžaduj prihlásenie a vždy sa dopytuj s mine: true.

Jedno pravidlo: všetko vo front-endovom kóde tvojej aplikácie vidia návštevníci a zoznamy bez mine: true môže čítať každý, kto má odkaz na aplikáciu. Ak sú dáta osobné, schovaj ich za prihlásenie a mine. Ak je celá aplikácia len pre teba alebo tvoj tím, zapni v Nastaveniach Súkromná aplikácia.

Karta Dáta

V editore ti karta Dáta umožní prechádzať všetky kolekcie, upravovať a mazať záznamy, vidieť používateľov aplikácie a kontrolovať nahrané súbory. Je to najrýchlejší spôsob, ako opraviť preklep v obsahu, upratať testovacie záznamy alebo overiť, že formulár ukladá to, čo čakáš.

Rovnaké dáta z Flutteru a iných klientov

Webové SDK je tenká vrstva nad REST API, ktoré používajú aj exporty do Flutteru. To znamená, že ľubovoľný klient môže čítať a zapisovať tie isté kolekcie:

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)

Tokeny používateľov aplikácie platia len pre jeden projekt, takže token z jednej aplikácie sa nedá použiť v inej. Čítanie a zápisy do databázy nespotrebúvajú kredity — vytvor si aplikáciu takú náročnú na dáta, akú chceš.

Zadania o dátach

Toto všetko môžeš riadiť bežnou rečou: „ukladaj výdavky so sumou, kategóriou a dátumom; každý používateľ vidí len svoje“ alebo „pridaj k rezerváciám pole stavu a filter pre čakajúce“. AI pozná SDK, takže zvyčajne stačí opísať dátový model.

Chceš to vytvoriť?

Opíš svoj nápad a zhruba za minútu dostaneš prvú funkčnú verziu. Začni zadarmo, bez platobnej karty.