ক্লাউড ফায়ারস্টোর ট্রিগার করে

ক্লাউড ফাংশনগুলির সাহায্যে, আপনি ক্লাউড ফায়ারস্টোরে ক্লায়েন্ট কোড আপডেট করার প্রয়োজন ছাড়াই ইভেন্টগুলি পরিচালনা করতে পারেন৷ আপনি DocumentSnapshot ইন্টারফেসের মাধ্যমে অথবা Admin SDK- এর মাধ্যমে Cloud Firestore পরিবর্তন করতে পারেন।

একটি সাধারণ জীবনচক্রে, একটি ক্লাউড ফায়ারস্টোর ফাংশন নিম্নলিখিতগুলি করে:

  1. একটি নির্দিষ্ট নথিতে পরিবর্তনের জন্য অপেক্ষা করে।
  2. কোনো ইভেন্ট ঘটলে এবং তার কার্য সম্পাদন করলে ট্রিগার করে ( ক্লাউড ফাংশনগুলির সাথে আমি কী করতে পারি? ব্যবহারের ক্ষেত্রে উদাহরণের জন্য দেখুন)।
  3. নির্দিষ্ট নথিতে সংরক্ষিত ডেটার একটি স্ন্যাপশট ধারণ করে এমন একটি ডেটা অবজেক্ট গ্রহণ করে। onWrite বা onUpdate ইভেন্টের জন্য, ডেটা অবজেক্টে দুটি স্ন্যাপশট থাকে যা ট্রিগারিং ইভেন্টের আগে এবং পরে ডেটার অবস্থাকে উপস্থাপন করে।

ফায়ারস্টোর ইনস্ট্যান্সের অবস্থান এবং ফাংশনের অবস্থানের মধ্যে দূরত্ব উল্লেখযোগ্য নেটওয়ার্ক লেটেন্সি তৈরি করতে পারে। কর্মক্ষমতা অপ্টিমাইজ করতে, যেখানে প্রযোজ্য সেখানে ফাংশন অবস্থান নির্দিষ্ট করার বিবেচনা করুন।

ক্লাউড ফায়ারস্টোর ফাংশন ট্রিগার করে

Firebase SDK-এর জন্য ক্লাউড ফাংশন একটি functions.firestore অবজেক্ট রপ্তানি করে যা আপনাকে নির্দিষ্ট ক্লাউড ফায়ারস্টোর ইভেন্টের সাথে আবদ্ধ হ্যান্ডলার তৈরি করতে দেয়।

ইভেন্টের ধরণ ট্রিগার
onCreate ট্রিগার হয় যখন একটি নথিতে প্রথমবার লেখা হয়।
onUpdate ট্রিগার হয় যখন একটি ডকুমেন্ট ইতিমধ্যেই বিদ্যমান থাকে এবং কোনো মান পরিবর্তিত হয়।
onDelete ডেটা সহ একটি নথি মুছে গেলে ট্রিগার হয়৷
onWrite যখন onUpdate onCreate onDelete ট্রিগার হয় তখন ট্রিগার হয়।

আপনার যদি এখনও Firebase-এর জন্য ক্লাউড ফাংশনগুলির জন্য কোনও প্রকল্প সক্রিয় না থাকে, তাহলে পড়ুন শুরু করুন: Firebase প্রকল্পের জন্য আপনার ক্লাউড ফাংশনগুলি কনফিগার এবং সেট আপ করতে আপনার প্রথম ফাংশনগুলি লিখুন এবং স্থাপন করুন

ক্লাউড ফায়ারস্টোর-ট্রিগার করা ফাংশন লেখা

একটি ফাংশন ট্রিগার সংজ্ঞায়িত করুন

একটি ক্লাউড ফায়ারস্টোর ট্রিগার সংজ্ঞায়িত করতে, একটি নথির পথ এবং একটি ইভেন্টের ধরন নির্দিষ্ট করুন:

Node.js

const functions = require('firebase-functions');

exports.myFunction = functions.firestore
  .document('my-collection/{docId}')
  .onWrite((change, context) => { /* ... */ });

নথির পথগুলি একটি নির্দিষ্ট নথি বা একটি ওয়াইল্ডকার্ড প্যাটার্ন উল্লেখ করতে পারে।

একটি একক নথি উল্লেখ করুন

আপনি যদি একটি নির্দিষ্ট নথিতে কোনও পরিবর্তনের জন্য একটি ইভেন্ট ট্রিগার করতে চান তবে আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন।

Node.js

// Listen for any change on document `marie` in collection `users`
exports.myFunctionName = functions.firestore
    .document('users/marie').onWrite((change, context) => {
      // ... Your code here
    });

ওয়াইল্ডকার্ড ব্যবহার করে নথির একটি গ্রুপ নির্দিষ্ট করুন

আপনি যদি নথির একটি গোষ্ঠীতে একটি ট্রিগার সংযুক্ত করতে চান, যেমন একটি নির্দিষ্ট সংগ্রহে থাকা কোনো নথি, তাহলে নথি আইডির জায়গায় একটি {wildcard} ব্যবহার করুন:

Node.js

// Listen for changes in all documents in the 'users' collection
exports.useWildcard = functions.firestore
    .document('users/{userId}')
    .onWrite((change, context) => {
      // If we set `/users/marie` to {name: "Marie"} then
      // context.params.userId == "marie"
      // ... and ...
      // change.after.data() == {name: "Marie"}
    });

এই উদাহরণে, যখন users কোনো নথির কোনো ক্ষেত্র পরিবর্তন করা হয়, তখন এটি userId নামক ওয়াইল্ডকার্ডের সাথে মেলে।

users মধ্যে একটি নথিতে যদি উপসংগ্রহ থাকে, এবং সেই উপ-সংগ্রহের নথিগুলির একটিতে একটি ক্ষেত্র পরিবর্তন করা হয়, তাহলে userId ওয়াইল্ডকার্ডটি ট্রিগার হয় না

ওয়াইল্ডকার্ড ম্যাচগুলি নথির পথ থেকে বের করা হয় এবং context.params এ সংরক্ষণ করা হয়। আপনি সুস্পষ্ট সংগ্রহ বা নথি আইডি প্রতিস্থাপন করতে চাইলে যতগুলি ওয়াইল্ডকার্ড সংজ্ঞায়িত করতে পারেন, উদাহরণস্বরূপ:

Node.js

// Listen for changes in all documents in the 'users' collection and all subcollections
exports.useMultipleWildcards = functions.firestore
    .document('users/{userId}/{messageCollectionId}/{messageId}')
    .onWrite((change, context) => {
      // If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
      // context.params.userId == "marie";
      // context.params.messageCollectionId == "incoming_messages";
      // context.params.messageId == "134";
      // ... and ...
      // change.after.data() == {body: "Hello"}
    });

ইভেন্ট ট্রিগার

একটি নতুন নথি তৈরি করা হলে একটি ফাংশন ট্রিগার করুন

একটি ওয়াইল্ডকার্ড সহ একটি onCreate() হ্যান্ডলার ব্যবহার করে সংগ্রহে একটি নতুন নথি তৈরি করা হলে আপনি যে কোনো সময় ফায়ার করার জন্য একটি ফাংশন ট্রিগার করতে পারেন। এই উদাহরণ ফাংশন প্রত্যেকবার একটি নতুন ব্যবহারকারী প্রোফাইল যোগ করা createUser কল করে:

Node.js

exports.createUser = functions.firestore
    .document('users/{userId}')
    .onCreate((snap, context) => {
      // Get an object representing the document
      // e.g. {'name': 'Marie', 'age': 66}
      const newValue = snap.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    });

একটি নথি আপডেট করা হলে একটি ফাংশন ট্রিগার করুন

একটি ওয়াইল্ডকার্ড সহ onUpdate() ফাংশন ব্যবহার করে একটি নথি আপডেট করা হলে আপনি ফায়ার করার জন্য একটি ফাংশন ট্রিগার করতে পারেন। এই উদাহরণ ফাংশন updateUser ব্যবহারকারীকে কল করে যদি একজন ব্যবহারকারী তাদের প্রোফাইল পরিবর্তন করে:

Node.js

exports.updateUser = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Get an object representing the document
      // e.g. {'name': 'Marie', 'age': 66}
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    });

একটি নথি মুছে ফেলা হলে একটি ফাংশন ট্রিগার

একটি ওয়াইল্ডকার্ড সহ onDelete() ফাংশন ব্যবহার করে একটি নথি মুছে ফেলা হলে আপনি একটি ফাংশন ট্রিগার করতে পারেন। এই উদাহরণ ফাংশনটি deleteUser কল করে যখন একজন ব্যবহারকারী তাদের ব্যবহারকারীর প্রোফাইল মুছে দেয়:

Node.js

exports.deleteUser = functions.firestore
    .document('users/{userID}')
    .onDelete((snap, context) => {
      // Get an object representing the document prior to deletion
      // e.g. {'name': 'Marie', 'age': 66}
      const deletedValue = snap.data();

      // perform desired operations ...
    });

একটি নথিতে সমস্ত পরিবর্তনের জন্য একটি ফাংশন ট্রিগার করুন

আপনি যদি ইভেন্টের ধরণ সম্পর্কে চিন্তা না করেন, তাহলে আপনি একটি ওয়াইল্ডকার্ড সহ onWrite() ফাংশন ব্যবহার করে একটি Cloud Firestore নথিতে সমস্ত পরিবর্তন শুনতে পারেন৷ এই উদাহরণ ফাংশনটি modifyUser কে কল করে যদি একজন ব্যবহারকারী তৈরি করা হয়, আপডেট করা হয় বা মুছে ফেলা হয়:

Node.js

exports.modifyUser = functions.firestore
    .document('users/{userID}')
    .onWrite((change, context) => {
      // Get an object with the current document value.
      // If the document does not exist, it has been deleted.
      const document = change.after.exists ? change.after.data() : null;

      // Get an object with the previous document value (for update or delete)
      const oldDocument = change.before.data();

      // perform desired operations ...
    });

ডেটা পড়া এবং লেখা

যখন একটি ফাংশন ট্রিগার হয়, এটি ইভেন্ট সম্পর্কিত ডেটার একটি স্ন্যাপশট প্রদান করে। আপনি এই স্ন্যাপশটটি ইভেন্টটি ট্রিগারকারী ডকুমেন্ট থেকে পড়তে বা লিখতে বা আপনার ডাটাবেসের অন্যান্য অংশ অ্যাক্সেস করতে Firebase অ্যাডমিন SDK ব্যবহার করতে পারেন।

ইভেন্ট ডেটা

ডেটা পড়া

যখন একটি ফাংশন ট্রিগার করা হয়, আপনি আপডেট হওয়া একটি নথি থেকে ডেটা পেতে বা আপডেট করার আগে ডেটা পেতে চাইতে পারেন। আপনি change.before.data() ব্যবহার করে আগের ডেটা পেতে পারেন, যাতে আপডেটের আগে ডকুমেন্টের স্ন্যাপশট থাকে। একইভাবে, change.after.data() আপডেটের পরে ডকুমেন্ট স্ন্যাপশট স্থিতি ধারণ করে।

Node.js

exports.updateUser2 = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Get an object representing the current document
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();
    });

আপনি অন্য কোনো বস্তুর মত বৈশিষ্ট্য অ্যাক্সেস করতে পারেন। বিকল্পভাবে, আপনি নির্দিষ্ট ক্ষেত্র অ্যাক্সেস করতে get ফাংশন ব্যবহার করতে পারেন:

Node.js

// Fetch data using standard accessors
const age = snap.data().age;
const name = snap.data()['name'];

// Fetch data using built in accessor
const experience = snap.get('experience');

ডেটা লেখা

প্রতিটি ফাংশন আমন্ত্রণ আপনার ক্লাউড ফায়ারস্টোর ডাটাবেসের একটি নির্দিষ্ট নথির সাথে যুক্ত। আপনি আপনার ফাংশনে ফিরে আসা স্ন্যাপশটের ref সম্পত্তিতে একটি DocumentReference রেফারেন্স হিসাবে সেই নথিটি অ্যাক্সেস করতে পারেন।

এই DocumentReference রেফারেন্সটি Cloud Firestore Node.js SDK থেকে এসেছে এবং এতে update() , set() , এবং remove() এর মত পদ্ধতি রয়েছে যাতে আপনি সহজেই ফাংশনটি ট্রিগারকারী ডকুমেন্টটি পরিবর্তন করতে পারেন৷

Node.js

// Listen for updates to any `user` document.
exports.countNameChanges = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Retrieve the current and previous value
      const data = change.after.data();
      const previousData = change.before.data();

      // We'll only update if the name has changed.
      // This is crucial to prevent infinite loops.
      if (data.name == previousData.name) {
        return null;
      }

      // Retrieve the current count of name changes
      let count = data.name_change_count;
      if (!count) {
        count = 0;
      }

      // Then return a promise of a set operation to update the count
      return change.after.ref.set({
        name_change_count: count + 1
      }, {merge: true});
    });

ট্রিগার ইভেন্টের বাইরের ডেটা

ক্লাউড ফাংশনগুলি একটি বিশ্বস্ত পরিবেশে সঞ্চালিত হয়, যার অর্থ তারা আপনার প্রকল্পে একটি পরিষেবা অ্যাকাউন্ট হিসাবে অনুমোদিত৷ আপনি Firebase অ্যাডমিন SDK ব্যবহার করে রিড এবং রাইট করতে পারেন:

Node.js

const admin = require('firebase-admin');
admin.initializeApp();

const db = admin.firestore();

exports.writeToFirestore = functions.firestore
  .document('some/doc')
  .onWrite((change, context) => {
    db.doc('some/otherdoc').set({ ... });
  });

সীমাবদ্ধতা

ক্লাউড ফাংশনগুলির জন্য ক্লাউড ফায়ারস্টোর ট্রিগারগুলির জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি নোট করুন:

  • অর্ডার নিশ্চিত করা হয় না. দ্রুত পরিবর্তনগুলি একটি অপ্রত্যাশিত ক্রমে ফাংশন আহ্বানকে ট্রিগার করতে পারে।
  • ইভেন্টগুলি অন্তত একবার বিতরণ করা হয়, কিন্তু একটি একক ইভেন্ট একাধিক ফাংশন আহ্বানের ফলে হতে পারে। ঠিক-একবার মেকানিক্সের উপর নির্ভর করে এড়িয়ে চলুন এবং অদম্য ফাংশন লিখুন।
  • ক্লাউড ফাংশনের জন্য ক্লাউড ফায়ারস্টোর ট্রিগার শুধুমাত্র নেটিভ মোডে ক্লাউড ফায়ারস্টোরের জন্য উপলব্ধ। এটি ডেটাস্টোর মোডে ক্লাউড ফায়ারস্টোরের জন্য উপলব্ধ নয়।