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í.
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áš.
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
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í
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.
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:
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.