Baza danych m77: kolekcje, filtry i dane użytkowników
Każda aplikacja builder77 ma wbudowaną bazę danych. Oto jak działają kolekcje, filtry, sortowanie i rekordy przypisane do użytkownika — i jak chronić prywatne dane.
Przez większość czasu w ogóle nie dotkniesz bazy danych bezpośrednio — opisujesz aplikację, a builder77 pisze kod, który zapisuje i odczytuje dane. Ale wiedza o tym, jak to działa, pomaga pisać lepsze prompty, szybciej szukać błędów i podejmować dobre decyzje w kwestii prywatności. Oto przewodnik po m77.db.
Kolekcje i rekordy
Dane trafiają do kolekcji — nazwanych grup rekordów, takich jak tasks, bookings czy posts. Nie trzeba definiować schematu: kolekcja powstaje przy pierwszym zapisie, a każdy rekord to zwykły obiekt z polami, które mu nadasz.
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }builder77 automatycznie dodaje id, createdAt, updatedAt i ownerId. ownerId jest ustawiane na zalogowanego użytkownika aplikacji, jeśli taki jest — co będzie ważne przy uprawnieniach opisanych niżej.
Odczyt danych: 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 dopasowuje pola dokładnie, co pokrywa większość potrzeb aplikacji: filtry statusu, kategorie, ID rodzica dla powiązanych rekordów. Przy wyszukiwaniu w trakcie pisania na niewielkiej liście często wczytuje się rekordy i filtruje je w przeglądarce.
Aktualizacja i usuwanie
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);update scala przekazane pola z istniejącym rekordem, więc wysyłasz tylko to, co się zmieniło.
Dane użytkownika z mine: true
W aplikacjach, w których każda osoba ma własne dane — dzienniki, budżety, trackery nawyków — połącz m77.auth z opcją mine. Gdy użytkownik jest zalogowany, mine: true zwraca tylko rekordy, które sam utworzył.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Wbudowana jest też druga warstwa ochrony: rekord utworzony przez zalogowanego użytkownika może zostać zaktualizowany lub usunięty tylko przez tego samego użytkownika. Nawet jeśli ktoś ręcznie spreparuje zapytanie, API odrzuci zmiany w rekordach, które do niego nie należą.
Dane publiczne a prywatne: krótki przewodnik
- Treści publiczne (pozycje menu, wpisy na blogu, oferty produktów): do odczytu nie trzeba logowania. Poproś builder77 o dane startowe albo o ekran administracyjny do zarządzania nimi i edytuj je w każdej chwili w zakładce Dane.
- Zgłoszenia (formularze kontaktowe, listy oczekujących, rezerwacje): każdy może je tworzyć; Ty czytasz je w zakładce Dane.
- Dane osobowe (notatki, dzienniki zdrowia, finanse): wymagaj logowania i zawsze pobieraj je z
mine: true.
Prosta zasada: wszystko w kodzie front-endu Twojej aplikacji jest widoczne dla odwiedzających, a listy bez mine: true może odczytać każdy, kto ma link do aplikacji. Jeśli dane są osobiste, schowaj je za logowaniem i mine. Jeśli cała aplikacja jest tylko dla Ciebie lub Twojego zespołu, włącz opcję Aplikacja prywatna w Ustawieniach.
Zakładka Dane
W kreatorze zakładka Dane pozwala przeglądać każdą kolekcję, edytować i usuwać rekordy, zobaczyć użytkowników aplikacji i przejrzeć przesłane pliki. To najszybszy sposób, by poprawić literówkę w treści, wyczyścić wpisy testowe albo sprawdzić, czy formularz zapisuje to, czego oczekujesz.
Te same dane we Flutterze i innych klientach
SDK webowe to cienka nakładka na REST API, z którego korzystają też eksporty do Fluttera. To znaczy, że każdy klient może czytać i zapisywać te same kolekcje:
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żytkowników aplikacji są ograniczone do jednego projektu, więc tokenu z jednej aplikacji nie da się użyć w innej. Odczyty i zapisy w bazie danych nie zużywają kredytów — buduj aplikację tak bogatą w dane, jak tylko chcesz.
Prompty o danych
Wszystkim tym możesz sterować zwykłym językiem: „zapisuj wydatki z kwotą, kategorią i datą; każdy użytkownik widzi tylko swoje” albo „dodaj pole statusu do rezerwacji i filtr dla oczekujących”. AI zna SDK, więc zwykle wystarczy opisać model danych.