Всички статии
За разработчици·7 мин четене

Базата данни m77: колекции, филтри и потребителски данни

Всяко приложение в builder77 идва с вградена база данни. Ето как работят колекциите, филтрите, сортирането и записите за всеки потребител — и как да пазиш личните данни лични.

77
Екипът на builder77
builder77.com

През повечето време изобщо няма да пипаш базата данни директно — описваш приложението си, а builder77 пише кода, който записва и чете данните. Но ако знаеш как работи, ще пишеш по-добри промптове, ще откриваш грешки по-бързо и ще взимаш добри решения за поверителността. Ето обиколка на m77.db.

Колекции и записи

Данните живеят в колекции — именувани групи от записи като tasks, bookings или posts. Няма схема за дефиниране: колекцията се създава при първия запис в нея, а всеки запис е обикновен обект с полетата, които му зададеш.

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

builder77 добавя автоматично id, createdAt, updatedAt и ownerId. ownerId се задава на влезлия потребител на приложението, ако има такъв, което става важно за правата по-долу.

Четене на данни: list, get и 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 сравнява полетата за точно съвпадение, което покрива повечето нужди на едно приложение: филтри по статус, категории, ID на родителски запис за свързани записи. За търсене докато пишеш в неголям списък обичайно се зареждат записите и се филтрират в браузъра.

Обновяване и изтриване

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

update слива подадените полета със съществуващия запис, така че изпращаш само това, което се е променило.

Данни за всеки потребител с mine: true

За приложения, в които всеки има свои данни — дневници, бюджети, тракери на навици — комбинирай m77.auth с опцията mine. Когато потребителят е влязъл, mine: true връща само записите, създадени от него.

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

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

Има и втори вграден слой защита: запис, създаден от влязъл потребител, може да бъде обновен или изтрит само от същия потребител. Дори някой да сглоби заявка на ръка, API отхвърля промени по записи, които не са негови.

Публични и лични данни: кратко ръководство

  • Публично съдържание (елементи от меню, статии в блог, продуктови обяви): за четене не е нужен вход. Помоли builder77 да ги попълни предварително или да добави администраторски екран за управлението им и ги редактирай по всяко време в раздел „Данни“.
  • Изпратени форми (контактни форми, списъци за чакане, резервации): всеки може да ги създава; ти ги четеш в раздел „Данни“.
  • Лични данни (бележки, здравни дневници, финанси): изисквай вход и винаги прави заявки с mine: true.

Едно основно правило: всичко във фронтенд кода на приложението ти е видимо за посетителите, а списъците без mine: true може да чете всеки, който има линка към приложението. Ако данните са лични, сложи ги зад вход и mine. Ако цялото приложение е само за теб или екипа ти, включи Лично приложение в Настройки.

Разделът „Данни“

В редактора разделът Данни ти позволява да разглеждаш всяка колекция, да редактираш или изтриваш записи, да виждаш потребителите на приложението си и да преглеждаш качените файлове. Това е най-бързият начин да поправиш правописна грешка в съдържанието, да изчистиш тестови записи или да провериш дали дадена форма записва това, което очакваш.

Същите данни от Flutter и други клиенти

Уеб SDK е тънък слой върху REST API, което използват и Flutter експортите. Това означава, че всеки клиент може да чете и пише в едни и същи колекции:

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)

Токените на потребителите на приложението са ограничени до един проект, така че токен от едно приложение не може да се използва в друго. Четенето и записът в базата данни не харчат кредити — създай приложение с толкова данни, колкото искаш.

Промптове за данни

Можеш да управляваш всичко това с обикновен език: „съхранявай разходи със сума, категория и дата; всеки потребител вижда само своите“ или „добави поле за статус към резервациите и филтър за чакащите“. AI познава SDK, така че обикновено е достатъчно да опишеш модела на данните.

Готов ли си да го създадеш?

Опиши идеята си и получи първа работеща версия за около минута. Започваш безплатно, без кредитна карта.