ক্লাউড ফাংশনের সাথে ডেটা সংযোগ প্রসারিত করুন

Cloud Functions for Firebase সাহায্যে, আপনি Firebase Data Connect এ ইভেন্টগুলি পরিচালনা করতে পারবেন। Cloud Functions আপনাকে ইভেন্টগুলির প্রতিক্রিয়ায় সার্ভার-সাইড কোড চালাতে দেয়, যেমন আপনার Data Connect পরিষেবাতে একটি মিউটেশন কার্যকর করা। এটি আপনাকে আপনার নিজস্ব সার্ভার স্থাপন না করেই কাস্টম লজিক যোগ করতে দেয়।

সাধারণ ব্যবহারের ক্ষেত্রে

  • ডেটা সিঙ্ক্রোনাইজেশন: মিউটেশন হওয়ার পরে অন্যান্য সিস্টেমের (যেমন Cloud Firestore , বিগকুয়েরি, বা বহিরাগত API) সাথে ডেটা প্রতিলিপি বা সিঙ্ক্রোনাইজ করুন।

  • অ্যাসিঙ্ক্রোনাস ওয়ার্কফ্লো: ডাটাবেস পরিবর্তনের পরে চিত্র প্রক্রিয়াকরণ বা ডেটা একত্রিতকরণের মতো দীর্ঘমেয়াদী প্রক্রিয়াগুলি শুরু করুন।

  • ব্যবহারকারীর সম্পৃক্ততা: আপনার অ্যাপ্লিকেশনে কোনও নির্দিষ্ট মিউটেশন ইভেন্টের পরে, যেমন অ্যাকাউন্ট তৈরির পরে ব্যবহারকারীদের ইমেল বা Cloud Messaging বিজ্ঞপ্তি পাঠান।

Data Connect মিউটেশনে একটি ফাংশন ট্রিগার করুন

onMutationExecuted ইভেন্ট হ্যান্ডলার ব্যবহার করে যখনই Data Connect মিউটেশন কার্যকর করা হয়, তখন আপনি একটি ফাংশন ট্রিগার করতে পারেন। এই ট্রিগারটি একটি মিউটেশন কার্যকর করার সময় ঘটে।

একটি মৌলিক মিউটেশন ইভেন্ট ফাংশন

নিম্নলিখিত মৌলিক উদাহরণটি হল একটি ফাংশন যা আপনার Data Connect পরিষেবাতে সম্পাদিত যেকোনো মিউটেশনের বিবরণ লগ করে:

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";
import { logger } from "firebase-functions";

export const logMutation = onMutationExecuted(
  {
    /* Trigger on all mutations, spanning all services and connectors
       in us-central1 */
  },
  (event) => {
    logger.info("A mutation was executed!", {
      data: event.data,
    });
  }
);

পাইথন

from firebase_functions import dataconnect_fn, logger

@dataconnect_fn.on_mutation_executed()
def log_mutation(event: dataconnect_fn.Event):
  logger.info("A mutation was executed!", event.data)

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

ফাংশনের অবস্থান সেট করুন

ইভেন্টগুলি ফাংশনটি ট্রিগার করার জন্য ফাংশনের অবস্থানটি Data Connect পরিষেবা অবস্থানের সাথে মিলতে হবে। ডিফল্টরূপে, ফাংশন অঞ্চলটি হল us-central1

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";

export const onMutationRegionOption = onMutationExecuted(
  {
    region: "europe-west1"  // Set if Data Connect service location is not us-central1
  },
  (event) => { /* ... */ }
);

পাইথন

@dataconnect_fn.on_mutation_executed(
  region="europe-west1"  # Set if Data Connect service location is not us-central1
)
def mutation_executed_handler_region_option(event: dataconnect_fn.Event):
  pass

ইভেন্ট ফিল্টার করুন

onMutationExecuted হ্যান্ডলারটি নির্দিষ্ট বৈশিষ্ট্যের উপর ভিত্তি করে ইভেন্ট ফিল্টার করার বিকল্পগুলির সাথে কনফিগার করা যেতে পারে। এটি তখন কার্যকর যখন আপনি শুধুমাত্র নির্দিষ্ট মিউটেশনের জন্য আপনার ফাংশনটি ট্রিগার করতে চান।

আপনি service , connector এবং operation অনুসারে ফিল্টার করতে পারেন:

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";
import { logger } from "firebase-functions";

// Trigger this function only for the CreateUser mutation
// in the users connector of the myAppService service.
export const onUserCreate = onMutationExecuted(
  {
    service: "myAppService",
    connector: "users",
    operation: "CreateUser",
  },
  (event) => {
    logger.info("A new user was created!", event.data);
    // Add logic here: for example, sending a welcome email.
  }
);

পাইথন

from firebase_functions import dataconnect_fn, logger

@dataconnect_fn.on_mutation_executed(
  service="myAppService",
  connector="users",
  operation="CreateUser"
):
def on_user_create(event: dataconnect_fn.Event):
  logger.info("A new user was created!", event.data)

ওয়াইল্ডকার্ড এবং ক্যাপচার গ্রুপ

একাধিক মানের উপর আপনার ট্রিগার ফিল্টার করার জন্য আপনি ওয়াইল্ডকার্ড এবং ক্যাপচার গ্রুপ ব্যবহার করতে পারেন। ক্যাপচার করা যেকোনো গ্রুপ event.params এ ব্যবহারের জন্য উপলব্ধ। আরও তথ্যের জন্য Understand path patterns দেখুন।

উদাহরণ:

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";

// Trigger on all operations that match the pattern `User*`, on any service and
// connector.
export const onMutationWildcards = onMutationExecuted(
  {
    operation: "User*",
  },
  (event) => {}
);

// Trigger on all operations that match the pattern `User*`, on any service and
// connector. Capture the operation name in the variable `op`.
export const onMutationCaptureWildcards = onMutationExecuted(
  {
    operation: "{op=User*}",
  },
  (event) => {
    // `event.params.op` contains the operation name.
  }
);

// Trigger on all operations on the service `myAppService`. Capture the
// operation name in the variable `operation`.
export const onMutationCaptures = onMutationExecuted(
  {
    service: "myAppService",
    operation: "{operation}",
  },
  (event) => {
    // `event.params.operation` contains the operation name.
  }
);

পাইথন

from firebase_functions import dataconnect_fn

# Trigger on all operations that match the pattern `User*`, on any service and
# connector.
@dataconnect_fn.on_mutation_executed(
  operation="User*"
)
def on_mutation_wildcards(event: dataconnect_fn.Event):
  pass

# Trigger on all operations that match the pattern `User*`, on any service and
# connector. Capture the operation name in the variable `op`.
@dataconnect_fn.on_mutation_executed(
  operation="{op=User*}"
)
def on_mutation_capture_wildcards(event: dataconnect_fn.Event):
  # `event.params["op"]` contains the operation name.
  pass

# Trigger on all operations on the service `myAppService`. Capture the
# operation name in the variable `operation`.
@dataconnect_fn.on_mutation_executed(
  service="myAppService",
  operation="{operation}"
)
def on_mutation_captures(event: dataconnect_fn.Event):
  # `event.params["operation"]` contains the operation name.
  pass

ব্যবহারকারীর প্রমাণীকরণ তথ্য অ্যাক্সেস করুন

আপনি ইভেন্টটি ট্রিগারকারী প্রধান ব্যক্তি সম্পর্কে ব্যবহারকারী প্রমাণীকরণ তথ্য অ্যাক্সেস করতে পারেন। প্রমাণীকরণ প্রসঙ্গে উপলব্ধ ডেটা সম্পর্কে আরও তথ্যের জন্য, প্রমাণীকরণ প্রসঙ্গ দেখুন।

নিম্নলিখিত উদাহরণটি প্রমাণীকরণ তথ্য কীভাবে পুনরুদ্ধার করতে হয় তা দেখায়:

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";

export const onMutation = onMutationExecuted(
  { operation: "MyMutation" },
  (event) => {
    // mutationExecuted event provides authType and authId:
    // event.authType
    // event.authId
  }
);

পাইথন

from firebase_functions import dataconnect_fn

@dataconnect_fn.on_mutation_executed(operation="MyMutation")
def mutation_executed_handler(event: dataconnect_fn.Event):
  # mutationExecuted event provides auth_type and auth_id, which are accessed as follows
  # event.auth_type
  # event.auth_id
  pass

auth টাইপ এবং auth ID এইভাবে পূরণ করা হবে:

মিউটেশন শুরু করেছেন অনুমোদনের ধরণ অথীদ
প্রমাণিত শেষ ব্যবহারকারী app_user ফায়ারবেস অথেন্টিকেশন টোকেন ইউআইডি
অননুমোদিত শেষ ব্যবহারকারী unauthenticated খালি
অ্যাডমিন SDK একজন শেষ ব্যবহারকারীর ছদ্মবেশ ধারণ করছে app_user ছদ্মবেশী ব্যবহারকারীর Firebase Auth টোকেন UID
অ্যাডমিন SDK একটি অননুমোদিত অনুরোধের ছদ্মবেশ ধারণ করছে unauthenticated খালি
সম্পূর্ণ অনুমতি সহ অ্যাডমিন SDK admin খালি

ইভেন্ট ডেটা অ্যাক্সেস করুন

আপনার ফাংশনে যে CloudEvent অবজেক্টটি পাঠানো হয়েছে তাতে সেই ইভেন্ট সম্পর্কে তথ্য রয়েছে যা এটিকে ট্রিগার করেছিল।

ইভেন্টের বৈশিষ্ট্য

বৈশিষ্ট্য আদর্শ বিবরণ
id string ইভেন্টের জন্য একটি অনন্য শনাক্তকারী।
source string যে সংযোগকারী সংস্থানটি ইভেন্টটি তৈরি করেছিল (উদাহরণস্বরূপ, //firebasedataconnect.googleapis.com/projects/*/locations/*/services/*/connectors/* )।
specversion string CloudEvents স্পেসিফিকেশন সংস্করণ (যেমন, "1.0")।
type string ইভেন্টের ধরণ: google.firebase.dataconnect.connector.v1.mutationExecuted .
time string ইভেন্টটি কখন তৈরি করা হয়েছিল তার টাইমস্ট্যাম্প (ISO 8601 ফর্ম্যাট)।
subject string ঐচ্ছিক। ইভেন্টের প্রেক্ষাপট সম্পর্কে অতিরিক্ত তথ্য, যেমন অপারেশনের নাম।
params object ক্যাপচার করা পথের ধরণগুলির একটি মানচিত্র।
authType string একটি enum যা ইভেন্টটি ট্রিগারকারী প্রিন্সিপালের ধরণকে প্রতিনিধিত্ব করে।
authId string ঘটনাটি ঘটানো অধ্যক্ষের একটি অনন্য শনাক্তকারী।
data MutationEventData Data Connect ইভেন্টের পেলোড। পরবর্তী বিভাগটি দেখুন।

ডেটা পেলোড

MutationEventData অবজেক্টে Data Connect ইভেন্টের পেলোড থাকে:

{
  // ...
  "authType": // ...
  "data": {
    "payload": {
      "variables": {
        "userId": "user123",
        "updateData": {
          "displayName": "New Name"
        }
      },
      "data": {
        "updateUser": {
          "id": "user123",
          "displayName": "New Name",
          "email": "user@example.com"
        }
      },
      "errors": []
    }
  }
}
  • payload.variables : মিউটেশনে প্রেরিত ভেরিয়েবল ধারণকারী একটি বস্তু।
  • payload.data : মিউটেশন দ্বারা ফেরত পাঠানো ডেটা ধারণকারী একটি বস্তু।
  • payload.errors : মিউটেশন কার্যকর করার সময় ঘটে যাওয়া যেকোনো ত্রুটির একটি অ্যারে। যদি মিউটেশন সফল হয়, তাহলে এই অ্যারেটি খালি থাকবে।

উদাহরণ

মিউটেশন ভেরিয়েবল এবং ফিরে আসা ডেটা কীভাবে অ্যাক্সেস করবেন তা এখানে দেওয়া হল:

নোড.জেএস

import { onMutationExecuted } from "firebase-functions/dataconnect";
import { logger } from "firebase-functions";

export const processNewUserData = onMutationExecuted(
  {
    "service": "myAppService",
    "connector": "users",
    "operation": "CreateUser",
  },
  (event) => {
    // The variables passed to the mutation
    const mutationVariables = event.data.payload.variables;

    // The data returned by the mutation
    const returnedData = event.data.payload.data;

    logger.info("Processing mutation with variables:", mutationVariables);
    logger.info("Mutation returned:", returnedData);

    // ... your custom logic here
  }
);

পাইথন

from firebase_functions import dataconnect_fn, logger

@dataconnect_fn.on_mutation_executed(
  service="myAppService",
  connector="users",
  operation="CreateUser"
):
def process_new_user_data(event: dataconnect_fn.Event):
  # The variables passed to the mutation
  mutation_vars = event.data.payload.variables
  # The data returned by the mutation
  returned_data = event.data.payload.data

  logger.info("Processing mutation with variables:", mutationVariables)
  logger.info("Mutation returned", returnedData)

  # ... your custom logic here

মনে রাখবেন যে Cloud Firestore বা Realtime Database মতো অন্যান্য কিছু ডাটাবেস ট্রিগারের বিপরীতে, Data Connect ইভেন্ট ডেটার "পূর্ববর্তী" স্ন্যাপশট প্রদান করে না। যেহেতু Data Connect প্রক্সিগুলি অন্তর্নিহিত ডাটাবেসের অনুরোধ করে, তাই ডেটার "পূর্ববর্তী" স্ন্যাপশট লেনদেনের মাধ্যমে পাওয়া যাবে না। পরিবর্তে, আপনার মিউটেশনে প্রেরিত আর্গুমেন্ট এবং এটি দ্বারা ফেরত পাঠানো ডেটাতে অ্যাক্সেস থাকবে।

এর একটি পরিণতি হল যে আপনি "আগে" এবং "পরে" স্ন্যাপশট তুলনা করার কৌশল ব্যবহার করে অসীম লুপ এড়াতে পারবেন না, যেখানে একটি ইভেন্ট ট্রিগার একই ইভেন্টকে ট্রিগার করে। যদি আপনাকে একটি মিউটেশন ইভেন্ট দ্বারা ট্রিগার করা একটি ফাংশন থেকে একটি মিউটেশন সম্পাদন করতে হয়, তাহলে ইভেন্ট ফিল্টার ব্যবহার করুন এবং নিশ্চিত করুন যে কোনও মিউটেশন কখনও নিজেই ট্রিগার করতে না পারে, এমনকি পরোক্ষভাবেও।