Alla inlägg
Utvecklare·7 min läsning

Använda m77-databasen: samlingar, filter och data per användare

Varje builder77-app levereras med en inbyggd databas. Så här fungerar samlingar, filter, sortering och poster per användare – och så håller du privat data privat.

77
builder77-teamet
builder77.com

Oftast rör du aldrig databasen direkt – du beskriver din app, och builder77 skriver koden som sparar och läser data. Men när du vet hur den fungerar skriver du bättre promptar, felsöker snabbare och fattar bra beslut om integritet. Här är en rundtur i m77.db.

Samlingar och poster

Data bor i samlingar – namngivna grupper av poster som tasks, bookings eller posts. Det finns inget schema att definiera: en samling skapas första gången du skriver till den, och varje post är ett vanligt objekt med de fält du ger den.

js
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }

builder77 lägger till id, createdAt, updatedAt och ownerId automatiskt. ownerId sätts till den inloggade appanvändaren när det finns en, vilket blir viktigt för behörigheterna nedan.

Läsa data: list, get och count

js
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 matchar fält exakt, vilket täcker de flesta behov i en app: statusfilter, kategorier, ett överordnat ID för relaterade poster. För sökning medan man skriver i en måttligt stor lista är det vanligt att läsa in posterna och filtrera i webbläsaren.

Uppdatera och radera

js
await m77.db.update('tasks', id, { done: true });   // shallow merge
await m77.db.remove('tasks', id);

update slår ihop fälten du skickar med den befintliga posten, så du behöver bara skicka det som har ändrats.

Data per användare med mine: true

För appar där varje person har sin egen data – dagböcker, budgetar, vanetrackers – kombinerar du m77.auth med alternativet mine. När en användare är inloggad returnerar mine: true bara de poster som hen själv har skapat.

js
await m77.auth.signIn({ email, password });

const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });

Det finns ett andra skyddslager inbyggt: en post som skapats av en inloggad användare kan bara uppdateras eller raderas av samma användare. Även om någon skapar en förfrågan för hand avvisar API:et ändringar av poster som personen inte äger.

Offentlig vs. privat data: en snabbguide

  • Offentligt innehåll (menyrätter, blogginlägg, produktlistor): ingen inloggning behövs för att läsa. Be builder77 att lägga in dem från början, eller lägg till en adminskärm för att hantera dem, och redigera dem när du vill i fliken Data.
  • Inskickat (kontaktformulär, väntelistor, bokningar): vem som helst kan skapa dem; du läser dem i fliken Data.
  • Personlig data (anteckningar, hälsologgar, ekonomi): kräv inloggning och fråga alltid med mine: true.

En tumregel: allt i appens frontend-kod är synligt för besökare, och listor utan mine: true kan läsas av alla som har länken till appen. Om datan är personlig, lägg den bakom inloggning och mine. Om hela appen bara är för dig eller ditt team, slå på Privat app under Inställningar.

Fliken Data

I byggverktyget låter fliken Data dig bläddra i varje samling, redigera eller radera poster, se dina appanvändare och granska uppladdade filer. Det är det snabbaste sättet att rätta ett stavfel i innehållet, städa bort testposter eller kontrollera att ett formulär sparar det du förväntar dig.

Samma data från Flutter och andra klienter

Webb-SDK:t är ett tunt lager ovanpå ett REST API, som även exporterade Flutter-appar använder. Det betyder att vilken klient som helst kan läsa och skriva samma samlingar:

http
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)

Appanvändarnas tokens är begränsade till ett enda projekt, så en token från en app kan inte användas mot en annan. Läsningar och skrivningar i databasen använder inga krediter – bygg en så datatung app du vill.

Promptar om data

Du kan styra allt detta med vanligt språk: ”spara utgifter med belopp, kategori och datum; varje användare ser bara sina egna” eller ”lägg till ett statusfält på bokningar och ett filter för väntande”. AI:n kan SDK:t, så det räcker oftast att beskriva datamodellen.

Redo att bygga den?

Beskriv din idé och få en fungerande första version på ungefär en minut. Gratis att börja, inget kreditkort krävs.