Všechny články
Pro vývojáře·7 min čtení

Databáze m77: kolekce, filtry a data pro každého uživatele

Každá aplikace v builder77 má vestavěnou databázi. Jak fungují kolekce, filtry, řazení a záznamy jednotlivých uživatelů – a jak udržet soukromá data v soukromí.

77
Tým builder77
builder77.com

Většinu času na databázi přímo vůbec nesáhneš – popíšeš aplikaci a builder77 napíše kód, který data ukládá a čte. Když ale víš, jak to funguje, píšeš lepší prompty, rychleji hledáš chyby a děláš dobrá rozhodnutí ohledně soukromí. Tady je prohlídka m77.db.

Kolekce a záznamy

Data žijí v kolekcích – pojmenovaných skupinách záznamů jako tasks, bookings nebo posts. Žádné schéma se nedefinuje: kolekce vznikne při prvním zápisu a každý záznam je obyčejný objekt s poli, která mu dáš.

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

builder77 automaticky přidá id, createdAt, updatedAt a ownerId. ownerId se nastaví na přihlášeného uživatele aplikace, pokud nějaký je, což bude důležité u oprávnění níže.

Čtení dat: 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ává pole přesně, což pokryje většinu potřeb aplikace: filtry podle stavu, kategorie, ID nadřazeného záznamu u souvisejících záznamů. Pro vyhledávání během psaní v menším seznamu se běžně načtou záznamy a filtrují se v prohlížeči.

Úpravy a mazání

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

update sloučí předaná pole s existujícím záznamem, takže posíláš jen to, co se změnilo.

Data jednotlivých uživatelů s mine: true

U aplikací, kde má každý svá vlastní data – deníky, rozpočty, sledování návyků – zkombinuj m77.auth s volbou mine. Když je uživatel přihlášený, mine: true vrátí jen záznamy, které sám vytvořil.

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

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

Vestavěná je i druhá vrstva ochrany: záznam vytvořený přihlášeným uživatelem může upravit nebo smazat jen tentýž uživatel. I kdyby někdo požadavek sestavil ručně, API odmítne úpravy záznamů, které mu nepatří.

Veřejná vs. soukromá data: stručný průvodce

  • Veřejný obsah (položky menu, články blogu, nabídka produktů): ke čtení není potřeba přihlášení. Požádej builder77, aby je předvyplnil, nebo přidal administrační obrazovku pro jejich správu, a kdykoli je uprav v záložce Data.
  • Odeslané formuláře (kontaktní formuláře, čekací listiny, rezervace): vytvořit je může kdokoli; ty je čteš v záložce Data.
  • Osobní data (poznámky, zdravotní záznamy, finance): vyžaduj přihlášení a vždy se dotazuj s mine: true.

Jedno pravidlo: všechno ve front-endovém kódu tvé aplikace vidí návštěvníci a seznamy bez mine: true může číst každý, kdo má odkaz na aplikaci. Pokud jsou data osobní, schovej je za přihlášení a mine. Pokud je celá aplikace jen pro tebe nebo tvůj tým, zapni v Nastavení Soukromá aplikace.

Záložka Data

V editoru ti záložka Data umožní procházet všechny kolekce, upravovat a mazat záznamy, vidět uživatele aplikace a kontrolovat nahrané soubory. Je to nejrychlejší způsob, jak opravit překlep v obsahu, uklidit testovací záznamy nebo ověřit, že formulář ukládá to, co čekáš.

Stejná data z Flutteru a dalších klientů

Webové SDK je tenká vrstva nad REST API, které používají i exporty do Flutteru. To znamená, že libovolný klient může číst a zapisovat stejné kolekce:

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 uživatelů aplikace platí jen pro jeden projekt, takže token z jedné aplikace nejde použít v jiné. Čtení a zápisy do databáze nespotřebovávají kredity – postav si aplikaci tak náročnou na data, jak chceš.

Prompty o datech

Tohle všechno můžeš řídit běžnou řečí: „ukládej výdaje s částkou, kategorií a datem; každý uživatel vidí jen své“ nebo „přidej k rezervacím pole stavu a filtr pro čekající“. AI zná SDK, takže obvykle stačí popsat datový model.

Chceš to postavit?

Popiš svůj nápad a zhruba za minutu dostaneš první funkční verzi. Začni zdarma, bez kreditní karty.