Усі статті
Розробникам·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)

Токени користувачів додатка прив’язані до одного проєкту, тож токен одного додатка не можна використати в іншому. Читання й запис у базу даних не витрачають кредити — створюй додатки з будь-яким обсягом даних.

Запити про дані

Усім цим можна керувати звичайною мовою: «зберігай витрати із сумою, категорією й датою; кожен користувач бачить лише свої» або «додай поле статусу до записів і фільтр для тих, що очікують». ШІ знає SDK, тож зазвичай достатньо описати модель даних.

Готовий створити?

Опиши ідею й отримай робочу першу версію приблизно за хвилину. Почати можна безкоштовно, банківська картка не потрібна.