Sådan bruger du m77-databasen: samlinger, filtre og data pr. bruger
Alle builder77-apps leveres med en indbygget database. Sådan fungerer samlinger, filtre, sortering og poster pr. bruger — og sådan holder du private data private.
Det meste af tiden rører du slet ikke databasen direkte — du beskriver din app, og builder77 skriver koden, der gemmer og læser data. Men når du ved, hvordan den virker, skriver du bedre prompts, fejlsøger hurtigere og træffer gode beslutninger om privatliv. Her er en rundtur i m77.db.
Samlinger og poster
Data ligger i samlinger — navngivne grupper af poster som tasks, bookings eller posts. Der er intet skema at definere: En samling oprettes, første gang du skriver til den, og hver post er et almindeligt objekt med de felter, du giver den.
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }builder77 tilføjer id, createdAt, updatedAt og ownerId automatisk. ownerId sættes til den indloggede appbruger, når der er en, hvilket bliver vigtigt for rettighederne nedenfor.
Læsning af data: list, get og 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 matcher felter præcist, hvilket dækker de fleste behov i en app: statusfiltre, kategorier, et overordnet ID til relaterede poster. Til søgning mens man skriver i en overskuelig liste er det almindeligt at indlæse posterne og filtrere i browseren.
Opdatering og sletning
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);update fletter de felter, du sender, ind i den eksisterende post, så du kun behøver at sende det, der er ændret.
Data pr. bruger med mine: true
Til apps, hvor hver person har sine egne data — dagbøger, budgetter, vanetrackere — kombinerer du m77.auth med indstillingen mine. Når en bruger er logget ind, returnerer mine: true kun de poster, vedkommende selv har oprettet.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Der er et ekstra beskyttelseslag indbygget: En post, der er oprettet af en indlogget bruger, kan kun opdateres eller slettes af den samme bruger. Selv hvis nogen sammensætter en forespørgsel i hånden, afviser API'et ændringer af poster, de ikke ejer.
Offentlige vs. private data: en hurtig guide
- Offentligt indhold (menupunkter, blogindlæg, produktlister): Der kræves intet login for at læse dem. Bed builder77 om at oprette dem på forhånd, eller tilføj en adminskærm til at administrere dem, og redigér dem når som helst under fanen Data.
- Indsendelser (kontaktformularer, ventelister, bookinger): Alle kan oprette dem; du læser dem under fanen Data.
- Personlige data (noter, sundhedslogs, økonomi): Kræv login, og forespørg altid med
mine: true.
En tommelfingerregel: Alt i din apps frontend-kode er synligt for besøgende, og lister uden mine: true kan læses af alle, der har linket til appen. Hvis data er personlige, så læg dem bag login og mine. Hvis hele appen kun er til dig eller dit team, så slå Privat app til under Indstillinger.
Fanen Data
I builderen lader fanen Data dig gennemse alle samlinger, redigere eller slette poster, se dine appbrugere og gennemgå uploadede filer. Det er den hurtigste måde at rette en slåfejl i indholdet, rydde op i testposter eller tjekke, at en formular gemmer det, du forventer.
De samme data fra Flutter og andre klienter
Web-SDK'et er et tyndt lag oven på et REST API, som også er det, Flutter-eksporter bruger. Det betyder, at enhver klient kan læse og skrive de samme samlinger:
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)Appbrugertokens er begrænset til et enkelt projekt, så et token fra én app kan ikke bruges mod en anden. Læsning og skrivning i databasen bruger ikke kreditter — byg en så datatung app, som du vil.
Prompts om data
Du kan styre alt dette med almindeligt sprog: »gem udgifter med beløb, kategori og dato; hver bruger ser kun sine egne« eller »tilføj et statusfelt til bookinger og et filter for de afventende«. AI'en kender SDK'et, så det er som regel nok at beskrive datamodellen.