Baza de date m77: colecții, filtre și date per utilizator
Fiecare aplicație builder77 vine cu o bază de date integrată. Iată cum funcționează colecțiile, filtrele, sortarea și înregistrările per utilizator — și cum păstrezi datele personale cu adevărat private.
De cele mai multe ori nu vei atinge deloc baza de date direct — îți descrii aplicația, iar builder77 scrie codul care stochează și citește datele. Dar dacă știi cum funcționează, scrii prompturi mai bune, depanezi mai repede și iei decizii bune legate de confidențialitate. Iată un tur al m77.db.
Colecții și înregistrări
Datele stau în colecții — grupuri de înregistrări cu nume, precum tasks, bookings sau posts. Nu trebuie definită nicio schemă: o colecție se creează la prima scriere, iar fiecare înregistrare este un obiect simplu cu câmpurile pe care i le dai.
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }builder77 adaugă automat id, createdAt, updatedAt și ownerId. ownerId primește valoarea utilizatorului autentificat al aplicației, dacă există unul, ceea ce devine important pentru permisiunile de mai jos.
Citirea datelor: list, get și 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 potrivește câmpurile exact, ceea ce acoperă majoritatea nevoilor unei aplicații: filtre de status, categorii, un ID părinte pentru înregistrările asociate. Pentru căutare în timp ce scrii, pe o listă de dimensiuni modeste, se obișnuiește să încarci înregistrările și să le filtrezi în browser.
Actualizare și ștergere
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);update îmbină câmpurile pe care le trimiți în înregistrarea existentă, așa că trebuie să trimiți doar ce s-a schimbat.
Date per utilizator cu mine: true
Pentru aplicațiile în care fiecare persoană are propriile date — jurnale, bugete, trackere de obiceiuri — combină m77.auth cu opțiunea mine. Când un utilizator este autentificat, mine: true returnează doar înregistrările create de el.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Există și un al doilea strat de protecție integrat: o înregistrare creată de un utilizator autentificat poate fi actualizată sau ștearsă doar de același utilizator. Chiar dacă cineva construiește o cerere de mână, API-ul respinge modificările asupra înregistrărilor care nu-i aparțin.
Date publice vs. private: un ghid rapid
- Conținut public (elemente de meniu, articole de blog, fișe de produs): nu e nevoie de autentificare pentru citire. Cere-i lui builder77 să le pre-populeze sau să adauge un ecran de administrare pentru gestionarea lor și editează-le oricând în fila Date.
- Trimiteri (formulare de contact, liste de așteptare, programări): oricine le poate crea; tu le citești în fila Date.
- Date personale (notițe, jurnale de sănătate, finanțe): cere autentificare și interoghează mereu cu
mine: true.
O regulă de bază: tot ce se află în codul front-end al aplicației tale este vizibil vizitatorilor, iar listele fără mine: true pot fi citite de oricine are linkul aplicației. Dacă datele sunt personale, pune-le în spatele autentificării și al mine. Dacă întreaga aplicație e doar pentru tine sau echipa ta, activează Aplicație privată în Setări.
Fila Date
În editor, fila Date îți permite să răsfoiești fiecare colecție, să editezi sau să ștergi înregistrări, să vezi utilizatorii aplicației și să verifici fișierele încărcate. Este cel mai rapid mod de a corecta o greșeală de scriere în conținut, de a curăța intrările de test sau de a verifica dacă un formular salvează ce te aștepți.
Aceleași date din Flutter și din alți clienți
SDK-ul web este un strat subțire peste un REST API, pe care îl folosesc și exporturile Flutter. Asta înseamnă că orice client poate citi și scrie aceleași colecții:
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)Tokenurile utilizatorilor aplicației sunt limitate la un singur proiect, deci un token dintr-o aplicație nu poate fi folosit în alta. Citirile și scrierile în baza de date nu consumă credite — construiește o aplicație cu oricâte date vrei.
Prompturi despre date
Poți controla toate acestea în limbaj obișnuit: „stochează cheltuielile cu sumă, categorie și dată; fiecare utilizator le vede doar pe ale lui” sau „adaugă un câmp de status la programări și un filtru pentru cele în așteptare”. AI-ul cunoaște SDK-ul, așa că de obicei e suficient să descrii modelul de date.