Az m77 adatbázis: gyűjtemények, szűrők és felhasználónkénti adatok
Minden builder77-alkalmazás beépített adatbázissal érkezik. Így működnek a gyűjtemények, a szűrők, a rendezés és a felhasználónkénti rekordok – és így maradnak privátak a privát adatok.
Az esetek többségében közvetlenül hozzá sem nyúlsz az adatbázishoz – leírod az alkalmazást, a builder77 pedig megírja az adatokat tároló és olvasó kódot. De ha tudod, hogyan működik, jobb promptokat írsz, gyorsabban hibakeresel, és jobb döntéseket hozol az adatvédelemről. Íme egy körút az m77.db világában.
Gyűjtemények és rekordok
Az adatok gyűjteményekben élnek – rekordok elnevezett csoportjaiban, mint a tasks, a bookings vagy a posts. Nincs definiálandó séma: a gyűjtemény az első íráskor jön létre, és minden rekord egy egyszerű objektum azokkal a mezőkkel, amiket megadsz neki.
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }A builder77 automatikusan hozzáadja az id, createdAt, updatedAt és ownerId mezőket. Az ownerId a bejelentkezett alkalmazásfelhasználóra áll be, ha van ilyen – ez lent, a jogosultságoknál lesz fontos.
Adatok olvasása: list, get és 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 } });A where pontos egyezéssel szűr, ami lefedi a legtöbb alkalmazás igényeit: állapotszűrők, kategóriák, szülőazonosító a kapcsolódó rekordokhoz. Egy kisebb listában gépelés közbeni kereséshez gyakori megoldás a rekordok betöltése és a böngészőben való szűrése.
Frissítés és törlés
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);Az update a megadott mezőket összefésüli a meglévő rekorddal, így csak azt kell elküldened, ami megváltozott.
Felhasználónkénti adatok a mine: true opcióval
Olyan alkalmazásoknál, ahol mindenkinek saját adatai vannak – naplók, költségvetések, szokáskövetők –, kombináld az m77.auth modult a mine opcióval. Ha egy felhasználó be van jelentkezve, a mine: true csak az általa létrehozott rekordokat adja vissza.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Van egy második, beépített védelmi réteg is: egy bejelentkezett felhasználó által létrehozott rekordot csak ugyanaz a felhasználó frissíthet vagy törölhet. Még ha valaki kézzel rak is össze egy kérést, az API elutasítja a nem a sajátjába tartozó rekordok módosítását.
Nyilvános és privát adatok: rövid útmutató
- Nyilvános tartalom (menüpontok, blogbejegyzések, termékajánlatok): olvasásukhoz nem kell bejelentkezés. Kérd meg a builder77-et, hogy töltse fel őket, vagy adjon hozzá egy adminfelületet a kezelésükhöz, és bármikor szerkesztheted őket az Adatok fülön.
- Beküldések (kapcsolatfelvételi űrlapok, várólisták, foglalások): bárki létrehozhatja őket; te az Adatok fülön olvasod őket.
- Személyes adatok (jegyzetek, egészségnaplók, pénzügyek): követelj meg bejelentkezést, és mindig
mine: trueopcióval kérdezz le.
Egy ökölszabály: az alkalmazásod frontendkódjában minden látható a látogatók számára, a mine: true nélküli listákat pedig bárki olvashatja, akinél ott az alkalmazás linkje. Ha az adat személyes, tedd bejelentkezés és mine mögé. Ha az egész alkalmazás csak neked vagy a csapatodnak szól, kapcsold be a Beállításokban a Privát alkalmazás opciót.
Az Adatok fül
A szerkesztőben az Adatok fülön böngészheted az összes gyűjteményt, szerkesztheted vagy törölheted a rekordokat, láthatod az alkalmazásod felhasználóit, és átnézheted a feltöltött fájlokat. Ez a leggyorsabb módja annak, hogy kijavíts egy elírást a tartalomban, eltakarítsd a tesztbejegyzéseket, vagy ellenőrizd, hogy egy űrlap azt menti-e, amit vársz.
Ugyanazok az adatok Flutterből és más kliensekből
A webes SDK egy vékony réteg egy REST API felett, amelyet a Flutter-exportok is használnak. Ez azt jelenti, hogy bármelyik kliens olvashatja és írhatja ugyanazokat a gyűjteményeket:
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)Az alkalmazásfelhasználói tokenek egyetlen projektre érvényesek, így az egyik alkalmazás tokenje nem használható egy másikhoz. Az adatbázis-olvasások és -írások nem fogyasztanak kreditet – építs olyan adatigényes alkalmazást, amilyet csak szeretnél.
Promptok az adatokról
Mindezt egyszerű nyelven irányíthatod: „tárold a kiadásokat összeggel, kategóriával és dátummal; mindenki csak a sajátját látja”, vagy „adj állapotmezőt a foglalásokhoz, és egy szűrőt a függőben lévőkhöz”. Az MI ismeri az SDK-t, így általában elég leírni az adatmodellt.