Βάση δεδομένων m77: συλλογές, φίλτρα, δεδομένα ανά χρήστη
Κάθε εφαρμογή builder77 έχει ενσωματωμένη βάση δεδομένων. Δες πώς λειτουργούν οι συλλογές, τα φίλτρα, η ταξινόμηση και οι εγγραφές ανά χρήστη — και πώς τα ιδιωτικά δεδομένα μένουν ιδιωτικά.
Τις περισσότερες φορές δεν θα αγγίξεις καθόλου τη βάση δεδομένων απευθείας — περιγράφεις την εφαρμογή σου και το builder77 γράφει τον κώδικα που αποθηκεύει και διαβάζει δεδομένα. Αν όμως ξέρεις πώς λειτουργεί, γράφεις καλύτερα prompts, κάνεις debugging πιο γρήγορα και παίρνεις σωστές αποφάσεις για το απόρρητο. Ορίστε μια περιήγηση στο m77.db.
Συλλογές και εγγραφές
Τα δεδομένα ζουν σε συλλογές — ονομασμένες ομάδες εγγραφών όπως tasks, bookings ή posts. Δεν χρειάζεται να ορίσεις σχήμα: μια συλλογή δημιουργείται την πρώτη φορά που γράφεις σε αυτήν, και κάθε εγγραφή είναι ένα απλό αντικείμενο με όποια πεδία του δώσεις.
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
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 για σχετικές εγγραφές. Για αναζήτηση την ώρα που πληκτρολογείς σε μια μικρή λίστα, συνηθίζεται να φορτώνεις τις εγγραφές και να τις φιλτράρεις στον browser.
Ενημέρωση και διαγραφή
await m77.db.update('tasks', id, { done: true }); // shallow merge
await m77.db.remove('tasks', id);Το update συγχωνεύει τα πεδία που περνάς στην υπάρχουσα εγγραφή, οπότε στέλνεις μόνο ό,τι άλλαξε.
Δεδομένα ανά χρήστη με mine: true
Για εφαρμογές όπου κάθε άτομο έχει τα δικά του δεδομένα — ημερολόγια, προϋπολογισμούς, trackers συνηθειών — συνδύασε το m77.auth με την επιλογή mine. Όταν ένας χρήστης είναι συνδεδεμένος, το mine: true επιστρέφει μόνο τις εγγραφές που δημιούργησε ο ίδιος.
await m77.auth.signIn({ email, password });
const myEntries = await m77.db.list('entries', { mine: true, sort: '-createdAt' });Υπάρχει και ένα δεύτερο ενσωματωμένο επίπεδο προστασίας: μια εγγραφή που δημιουργήθηκε από συνδεδεμένο χρήστη μπορεί να ενημερωθεί ή να διαγραφεί μόνο από τον ίδιο χρήστη. Ακόμα κι αν κάποιος στήσει ένα αίτημα με το χέρι, το API απορρίπτει αλλαγές σε εγγραφές που δεν του ανήκουν.
Δημόσια και ιδιωτικά δεδομένα: ένας σύντομος οδηγός
- Δημόσιο περιεχόμενο (στοιχεία μενού, άρθρα blog, καταχωρίσεις προϊόντων): δεν χρειάζεται σύνδεση για ανάγνωση. Ζήτα από το builder77 να τα προσυμπληρώσει ή να προσθέσει μια οθόνη διαχείρισης και επεξεργάσου τα όποτε θέλεις στην καρτέλα Δεδομένα.
- Υποβολές (φόρμες επικοινωνίας, λίστες αναμονής, κρατήσεις): οποιοσδήποτε μπορεί να τις δημιουργήσει· εσύ τις διαβάζεις στην καρτέλα Δεδομένα.
- Προσωπικά δεδομένα (σημειώσεις, ημερολόγια υγείας, οικονομικά): απαίτησε σύνδεση και κάνε πάντα ερωτήματα με
mine: true.
Ένας εμπειρικός κανόνας: ό,τι υπάρχει στον front-end κώδικα της εφαρμογής σου είναι ορατό στους επισκέπτες, και οι λίστες χωρίς mine: true μπορούν να διαβαστούν από οποιονδήποτε έχει τον σύνδεσμο της εφαρμογής. Αν τα δεδομένα είναι προσωπικά, βάλε τα πίσω από σύνδεση και mine. Αν όλη η εφαρμογή είναι μόνο για σένα ή την ομάδα σου, ενεργοποίησε την Ιδιωτική εφαρμογή στις Ρυθμίσεις.
Η καρτέλα Δεδομένα
Στον builder, η καρτέλα Δεδομένα σού επιτρέπει να περιηγηθείς σε κάθε συλλογή, να επεξεργαστείς ή να διαγράψεις εγγραφές, να δεις τους χρήστες της εφαρμογής σου και να ελέγξεις τα αρχεία που ανέβηκαν. Είναι ο πιο γρήγορος τρόπος να διορθώσεις ένα τυπογραφικό στο περιεχόμενο, να καθαρίσεις δοκιμαστικές καταχωρίσεις ή να ελέγξεις ότι μια φόρμα αποθηκεύει αυτό που περιμένεις.
Τα ίδια δεδομένα από Flutter και άλλους clients
Το web SDK είναι ένα λεπτό στρώμα πάνω από ένα REST API, το οποίο χρησιμοποιούν και οι εξαγωγές Flutter. Αυτό σημαίνει ότι οποιοσδήποτε client μπορεί να διαβάζει και να γράφει στις ίδιες συλλογές:
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)Τα tokens των χρηστών της εφαρμογής περιορίζονται σε ένα μόνο project, οπότε ένα token από μία εφαρμογή δεν μπορεί να χρησιμοποιηθεί σε άλλη. Οι αναγνώσεις και οι εγγραφές στη βάση δεδομένων δεν καταναλώνουν credits — φτιάξε μια εφαρμογή με όσα δεδομένα θέλεις.
Prompts για τα δεδομένα
Μπορείς να τα κατευθύνεις όλα αυτά με απλά λόγια: «αποθήκευσε έξοδα με ποσό, κατηγορία και ημερομηνία· κάθε χρήστης βλέπει μόνο τα δικά του» ή «πρόσθεσε ένα πεδίο κατάστασης στις κρατήσεις και ένα φίλτρο για τις εκκρεμείς». Το AI ξέρει το SDK, οπότε συνήθως αρκεί να περιγράψεις το μοντέλο δεδομένων.