Όλα τα άρθρα
Για developers·7 λεπτά ανάγνωσης

Βάση δεδομένων m77: συλλογές, φίλτρα, δεδομένα ανά χρήστη

Κάθε εφαρμογή builder77 έχει ενσωματωμένη βάση δεδομένων. Δες πώς λειτουργούν οι συλλογές, τα φίλτρα, η ταξινόμηση και οι εγγραφές ανά χρήστη — και πώς τα ιδιωτικά δεδομένα μένουν ιδιωτικά.

77
Η ομάδα του builder77
builder77.com

Τις περισσότερες φορές δεν θα αγγίξεις καθόλου τη βάση δεδομένων απευθείας — περιγράφεις την εφαρμογή σου και το builder77 γράφει τον κώδικα που αποθηκεύει και διαβάζει δεδομένα. Αν όμως ξέρεις πώς λειτουργεί, γράφεις καλύτερα prompts, κάνεις debugging πιο γρήγορα και παίρνεις σωστές αποφάσεις για το απόρρητο. Ορίστε μια περιήγηση στο 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 για σχετικές εγγραφές. Για αναζήτηση την ώρα που πληκτρολογείς σε μια μικρή λίστα, συνηθίζεται να φορτώνεις τις εγγραφές και να τις φιλτράρεις στον browser.

Ενημέρωση και διαγραφή

js
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 επιστρέφει μόνο τις εγγραφές που δημιούργησε ο ίδιος.

js
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 μπορεί να διαβάζει και να γράφει στις ίδιες συλλογές:

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)

Τα tokens των χρηστών της εφαρμογής περιορίζονται σε ένα μόνο project, οπότε ένα token από μία εφαρμογή δεν μπορεί να χρησιμοποιηθεί σε άλλη. Οι αναγνώσεις και οι εγγραφές στη βάση δεδομένων δεν καταναλώνουν credits — φτιάξε μια εφαρμογή με όσα δεδομένα θέλεις.

Prompts για τα δεδομένα

Μπορείς να τα κατευθύνεις όλα αυτά με απλά λόγια: «αποθήκευσε έξοδα με ποσό, κατηγορία και ημερομηνία· κάθε χρήστης βλέπει μόνο τα δικά του» ή «πρόσθεσε ένα πεδίο κατάστασης στις κρατήσεις και ένα φίλτρο για τις εκκρεμείς». Το AI ξέρει το SDK, οπότε συνήθως αρκεί να περιγράψεις το μοντέλο δεδομένων.

Έτοιμος να το φτιάξεις;

Περίγραψε την ιδέα σου και πάρε μια πρώτη λειτουργική έκδοση σε περίπου ένα λεπτό. Ξεκινάς δωρεάν, χωρίς πιστωτική κάρτα.