Utiliser la base de données m77 : collections, filtres et données par utilisateur
Chaque application builder77 est livrée avec une base de données intégrée. Voici comment fonctionnent les collections, les filtres, le tri et les données par utilisateur — et comment garder privées les données privées.
La plupart du temps, vous ne toucherez jamais directement à la base de données : vous décrivez votre application, et builder77 écrit le code qui stocke et lit les données. Mais comprendre son fonctionnement aide à écrire de meilleurs prompts, à déboguer plus vite et à faire de bons choix en matière de confidentialité. Voici une visite de m77.db.
Collections et enregistrements
Les données vivent dans des collections — des groupes nommés d'enregistrements comme tasks, bookings ou posts. Aucun schéma à définir : une collection est créée la première fois que vous y écrivez, et chaque enregistrement est un simple objet avec les champs que vous lui donnez.
const task = await m77.db.create('tasks', { title: 'Write launch post', done: false });
// -> { id, title, done, createdAt, updatedAt, ownerId }builder77 ajoute automatiquement id, createdAt, updatedAt et ownerId. ownerId prend la valeur de l'utilisateur connecté à l'application s'il y en a un, ce qui devient important pour les permissions, plus bas.
Lire les données : list, get et 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 compare les champs à l'identique, ce qui couvre la plupart des besoins : filtres par statut, catégories, ID parent pour les enregistrements liés. Pour une recherche instantanée sur une liste de taille raisonnable, on charge généralement les enregistrements et on filtre dans le navigateur.
Modifier et supprimer
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);update fusionne les champs transmis dans l'enregistrement existant : il suffit d'envoyer ce qui a changé.
Données par utilisateur avec mine: true
Pour les applications où chacun a ses propres données — journaux, budgets, suivis d'habitudes —, combinez m77.auth avec l'option mine. Quand un utilisateur est connecté, mine: true ne renvoie que les enregistrements qu'il a créés.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Une seconde couche de protection est intégrée : un enregistrement créé par un utilisateur connecté ne peut être modifié ou supprimé que par ce même utilisateur. Même si quelqu'un forge une requête à la main, l'API refuse les modifications d'enregistrements qui ne lui appartiennent pas.
Données publiques ou privées : le guide express
- Contenu public (cartes de restaurant, articles de blog, fiches produits) : aucune connexion nécessaire pour les lire. Demandez à builder77 de les pré-remplir ou d'ajouter un écran d'administration pour les gérer, et modifiez-les à tout moment dans l'onglet Données.
- Envois (formulaires de contact, listes d'attente, réservations) : tout le monde peut en créer ; vous les consultez dans l'onglet Données.
- Données personnelles (notes, suivis de santé, finances) : exigez la connexion et interrogez toujours avec
mine: true.
Une règle simple : tout ce qui se trouve dans le code front-end de votre application est visible par les visiteurs, et les listes sans mine: true peuvent être lues par toute personne qui a le lien de l'application. Si les données sont personnelles, placez-les derrière la connexion et mine. Si l'application entière est réservée à vous ou à votre équipe, activez Application privée dans les Réglages.
L'onglet Données
Dans l'outil de création, l'onglet Données vous permet de parcourir toutes les collections, de modifier ou supprimer des enregistrements, de voir les utilisateurs de votre application et de consulter les fichiers envoyés. C'est le moyen le plus rapide de corriger une coquille dans un contenu, de nettoyer des entrées de test ou de vérifier qu'un formulaire enregistre bien ce que vous attendez.
Les mêmes données depuis Flutter et d'autres clients
Le SDK web est une fine couche autour d'une API REST, celle-là même qu'utilisent les exports Flutter. N'importe quel client peut donc lire et écrire dans les mêmes collections :
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)Les jetons des utilisateurs d'une application sont limités à un seul projet : un jeton d'une application ne peut pas être utilisé sur une autre. Les lectures et écritures en base de données ne consomment pas de crédits — créez une application aussi gourmande en données que vous le souhaitez.
Parler de données dans vos prompts
Vous pouvez piloter tout cela en langage courant : « stocke les dépenses avec montant, catégorie et date ; chaque utilisateur ne voit que les siennes », ou « ajoute un champ statut aux réservations et un filtre pour celles en attente ». L'IA connaît le SDK : décrire le modèle de données suffit généralement.