জেনারেট করা ফ্লাটার SDK ব্যবহার করুন

Firebase SQL Connect ক্লায়েন্ট এসডিকে আপনাকে সরাসরি একটি ফায়ারবেস অ্যাপ থেকে আপনার সার্ভার-সাইড কোয়েরি এবং মিউটেশন কল করার সুযোগ দেয়। আপনি আপনার SQL Connect সার্ভিসে যে স্কিমা, কোয়েরি এবং মিউটেশনগুলো ডেপ্লয় করবেন, সেগুলোর ডিজাইন করার পাশাপাশি একটি কাস্টম ক্লায়েন্ট এসডিকে তৈরি করেন। তারপর, এই এসডিকে-র মেথডগুলো আপনার ক্লায়েন্ট লজিকে ইন্টিগ্রেট করেন।

আমরা অন্যত্র যেমন উল্লেখ করেছি, এটা মনে রাখা গুরুত্বপূর্ণ যে SQL Connect কোয়েরি এবং মিউটেশনগুলো ক্লায়েন্ট কোড দ্বারা সাবমিট করা হয় না এবং সার্ভারে এক্সিকিউট করা হয় না। পরিবর্তে, ডেপ্লয় করার সময়, SQL Connect অপারেশনগুলো ক্লাউড ফাংশনের মতো সার্ভারে সংরক্ষিত হয়। এর মানে হলো, বিদ্যমান ব্যবহারকারীদের (উদাহরণস্বরূপ, অ্যাপের পুরোনো সংস্করণগুলোতে) সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তনগুলো ডেপ্লয় করতে হবে।

এই কারণেই SQL Connect আপনাকে এমন একটি ডেভেলপার পরিবেশ এবং টুলিং প্রদান করে, যা দিয়ে আপনি আপনার সার্ভারে ডেপ্লয় করা স্কিমা, কোয়েরি এবং মিউটেশনগুলোর প্রোটোটাইপ তৈরি করতে পারেন। এছাড়াও, আপনি প্রোটোটাইপ করার সময় এটি স্বয়ংক্রিয়ভাবে ক্লায়েন্ট-সাইড SDK তৈরি করে দেয়।

যখন আপনি আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপগুলিতে আপডেটগুলি পুনরাবৃত্তি করবেন, তখন সার্ভার- এবং ক্লায়েন্ট-সাইড উভয় আপডেটই স্থাপনের জন্য প্রস্তুত হয়ে যাবে।

ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?

আপনি যদি ' Get started' অংশটি অনুসরণ করে থাকেন, তাহলে আপনাকে SQL Connect এর সামগ্রিক ডেভেলপমেন্ট ফ্লো-এর সাথে পরিচয় করিয়ে দেওয়া হয়েছে। এই গাইডে, আপনি আপনার স্কিমা থেকে ফ্লাটার SDK তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার বিষয়ে আরও বিস্তারিত তথ্য পাবেন।

সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে তৈরি করা ফ্লাটার এসডিকে ব্যবহার করার জন্য, আপনাকে এই পূর্বশর্ত ধাপগুলো অনুসরণ করতে হবে:

  1. আপনার ফ্লাটার অ্যাপে ফায়ারবেস যুক্ত করুন।
  2. flutterfire CLI ইনস্টল করুন: dart pub global activate flutterfire_cli .
  3. flutterfire configure চালান।

তারপর:

  1. আপনার অ্যাপের স্কিমা তৈরি করুন।
  2. SDK জেনারেশন সেট আপ করুন:

  3. আপনার ক্লায়েন্ট কোড শুরু করুন এবং লাইব্রেরিগুলো ইম্পোর্ট করুন

  4. কোয়েরি এবং মিউটেশন কলগুলো বাস্তবায়ন করুন।

  5. SQL Connect এমুলেটরটি সেট আপ করে ব্যবহার করুন এবং পুনরাবৃত্তি করুন।

আপনার ফ্লাটার এসডিকে তৈরি করুন

আপনার অ্যাপগুলিতে SQL Connect দ্বারা তৈরি SDK সেট আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডটি বর্তমান ফোল্ডারের সমস্ত অ্যাপ সনাক্ত করবে এবং তৈরি করা SDK-গুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।

firebase init dataconnect:sdk

প্রোটোটাইপিং করার সময় SDK আপডেট করুন।

আপনার যদি SQL Connect VS Code এক্সটেনশনটি ইনস্টল করা থাকে, তাহলে এটি তৈরি করা SDK-গুলোকে সর্বদা হালনাগাদ রাখবে।

আপনি যদি SQL Connect VS Code এক্সটেনশন ব্যবহার না করেন, তাহলে তৈরি করা SDK-গুলো হালনাগাদ রাখতে Firebase CLI ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate --watch

বিল্ড পাইপলাইনে SDK তৈরি করুন

আপনি CI/CD বিল্ড প্রসেসে SQL Connect SDK তৈরি করতে Firebase CLI ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate

ক্লায়েন্ট কোড সেট আপ করুন

আপনার SQL Connect অ্যাপটি চালু করুন

প্রথমে, ফায়ারবেসের সাধারণ সেটআপ নির্দেশাবলী অনুসরণ করে আপনার অ্যাপটি চালু করুন।

তারপর, SQL Connect প্লাগইনটি ইনস্টল করুন:

flutter pub add firebase_data_connect

SQL Connect Flutter SDK শুরু করুন

SQL Connect সেট আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছিলেন, তা দিয়ে আপনার SQL SQL Connect ইনস্ট্যান্সটি চালু করুন (এই সমস্ত তথ্য Firebase কনসোলের SQL Connect ট্যাবে পাওয়া যাবে)।

লাইব্রেরি আমদানি করুন

আপনার ক্লায়েন্ট কোড ইনিশিয়ালাইজ করার জন্য দুই ধরনের ইম্পোর্ট প্রয়োজন: সাধারণ SQL Connect ইম্পোর্ট এবং নির্দিষ্ট, জেনারেটেড SDK ইম্পোর্ট।

// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';

// generated queries and mutations from SDK
import 'generated/movies.dart';

ক্লায়েন্ট সাইডে কোয়েরি ব্যবহার করুন

জেনারেট করা কোডটিতে আগে থেকেই পূর্বনির্ধারিত কোয়েরি রেফ (Query Refs) থাকবে। আপনাকে শুধু সেগুলো ইম্পোর্ট করে এক্সিকিউট execute কল করতে হবে।

import 'generated/movies.dart';

await MoviesConnector.instance.listMovies().execute();

SDK কোয়েরি পদ্ধতি কল করুন

এই অ্যাকশন শর্টকাট ফাংশনগুলো ব্যবহার করে একটি উদাহরণ নিচে দেওয়া হলো:

import 'generated/movies.dart';

function onBtnClick() {
  // This will call the generated Dart from the CLI and then make an HTTP request to the server.
  MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}

ঐচ্ছিক ক্ষেত্র

কিছু কোয়েরিতে ঐচ্ছিক ফিল্ড থাকতে পারে। এইসব ক্ষেত্রে, ফ্লাটার এসডিকে একটি বিল্ডার মেথড প্রদান করে, এবং সেটি আলাদাভাবে সেট করতে হবে।

উদাহরণস্বরূপ, createMovie কল করার সময় rating ফিল্ডটি ঐচ্ছিক, তাই আপনাকে এটি বিল্ডার ফাংশনে প্রদান করতে হবে।

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();

পরিবর্তনগুলি সাবস্ক্রাইব করুন

আপনি পরিবর্তনগুলির জন্য সাবস্ক্রাইব করতে পারেন (যা আপনার প্রতিটি কোয়েরি চালানোর সাথে সাথে আপডেট হবে)।

QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();

// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
  updateUIWithMovies(data.movies);
});

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`

গণনা ক্ষেত্রগুলির পরিবর্তনগুলি পরিচালনা করুন

একটি অ্যাপের স্কিমাতে এনুমারেশন থাকতে পারে, যেগুলো আপনার GraphQL কোয়েরি দ্বারা অ্যাক্সেস করা যায়।

অ্যাপের ডিজাইন পরিবর্তনের সাথে সাথে, আপনি enum-সমর্থিত নতুন ভ্যালু যোগ করতে পারেন। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার অ্যাপ্লিকেশনের লাইফসাইকেলের পরবর্তী পর্যায়ে আপনি AspectRatio enum-এ একটি FULLSCREEN ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।

SQL Connect ওয়ার্কফ্লোতে, আপনি আপনার কোয়েরি এবং SDK আপডেট করার জন্য স্থানীয় ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারেন।

তবে, আপনার ক্লায়েন্টদের একটি আপডেট করা সংস্করণ প্রকাশ করার আগে, পুরোনো ক্লায়েন্টগুলো অকার্যকর হয়ে যেতে পারে।

স্থিতিস্থাপক বাস্তবায়নের উদাহরণ

তৈরি করা SDK অজানা মানগুলি পরিচালনা করতে বাধ্য করে। অর্থাৎ, ক্লায়েন্ট কোডকে অবশ্যই EnumValue অবজেক্টটিকে Known বা Unknown যেকোনো একটিতে আনর‍্যাপ করতে হবে।

final result = await MoviesConnector.instance.listMovies().execute();

if (result.data != null && result.data!.isNotEmpty) {
  handleEnumValue(result.data![0].aspectratio);
}

void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
  if (aspectValue.value != null) {
    switch(aspectValue.value!) {
      case AspectRatio.ACADEMY:
        print("This movie is in Academy aspect");
        break;
      case AspectRatio.WIDESCREEN:
        print("This movie is in Widescreen aspect");
        break;
      case AspectRatio.ANAMORPHIC:
        print("This movie is in Anamorphic aspect");
        break;
      case AspectRatio.IMAX:
        print("This movie is in IMAX aspect");
    }
  } else {
    print("Unknown aspect ratio detected: ${aspectValue.stringValue}");
  }
}

ক্লায়েন্ট-সাইড ক্যাশিং সক্রিয় করুন

SQL Connect একটি ঐচ্ছিক ক্লায়েন্ট-সাইড ক্যাশিং বৈশিষ্ট্য রয়েছে, যা আপনি connector.yaml ফাইলটি সম্পাদনা করে সক্রিয় করতে পারেন। যখন এই বৈশিষ্ট্যটি সক্রিয় করা হয়, তখন তৈরি হওয়া ক্লায়েন্ট SDK-গুলো স্থানীয়ভাবে কোয়েরির প্রতিক্রিয়া ক্যাশ করে রাখে, যা আপনার অ্যাপের ডাটাবেস অনুরোধের সংখ্যা কমাতে পারে এবং নেটওয়ার্কের সংযোগ বিচ্ছিন্ন হলেও আপনার অ্যাপের ডাটাবেস-নির্ভর অংশগুলোকে কাজ করতে সক্ষম করে।

ক্লায়েন্ট-সাইড ক্যাশিং সক্রিয় করতে, আপনার কানেক্টর কনফিগারেশনে একটি ক্লায়েন্ট ক্যাশিং কনফিগারেশন যোগ করুন:

generate:
  javascriptSdk:
    outputDir: ../dart/
    package: "dataconnect_generated"
    clientCache:
      maxAge: 5s
      storage: memory

এই কনফিগারেশনটির দুটি প্যারামিটার রয়েছে, উভয়ই ঐচ্ছিক:

  • maxAge : ক্লায়েন্ট SDK নতুন মান আনার আগে একটি ক্যাশ করা প্রতিক্রিয়ার সর্বোচ্চ বয়স। উদাহরণ: "0", "30s", "1h30m"।

    maxAge এর ডিফল্ট মান হলো 0 , যার অর্থ হলো রেসপন্সগুলো ক্যাশ করা থাকে, কিন্তু ক্লায়েন্ট SDK সর্বদা নতুন মান ফেচ করবে। ক্যাশ করা মানগুলো শুধুমাত্র তখনই ব্যবহৃত হবে যখন execute() ফাংশনে CACHE_ONLY নির্দিষ্ট করা থাকে এবং subscribe() থেকে প্রাথমিক ফলাফল ফেরত আসে।

  • storage : ক্লায়েন্ট SDK-কে রেসপন্সগুলো persistent স্টোরেজ অথবা memory ক্যাশ করার জন্য কনফিগার করা যেতে পারে। persistent স্টোরেজে ক্যাশ করা ফলাফল অ্যাপ পুনরায় চালু করার পরেও অক্ষুণ্ণ থাকবে। অ্যান্ড্রয়েড বা আইওএস-কে টার্গেট করার ক্ষেত্রে, ডিফল্ট হলো persistent । ওয়েব ব্রাউজারকে টার্গেট করার ক্ষেত্রে, শুধুমাত্র memory স্টোরেজ সমর্থিত।

আপনার কানেক্টরের ক্যাশিং কনফিগারেশন আপডেট করার পর, আপনার ক্লায়েন্ট SDK-গুলো পুনরায় তৈরি করুন এবং আপনার অ্যাপটি রি-বিল্ড করুন। এটি করার পরে, execute() এবং subscribe() ফাংশনগুলো রেসপন্স ক্যাশ করবে এবং আপনার কনফিগার করা পলিসি অনুযায়ী ক্যাশ করা ভ্যালুগুলো ব্যবহার করবে। এটি সাধারণত আপনার কোনো অতিরিক্ত পদক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে ঘটে; তবে, নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:

  • execute() ফাংশনের ডিফল্ট আচরণ উপরে বর্ণিত হয়েছে: যদি কোনো কোয়েরির জন্য একটি ফলাফল ক্যাশ করা থাকে এবং ক্যাশ করা মানটি maxAge চেয়ে পুরোনো না হয়, তাহলে সেই ক্যাশ করা মানটিই ব্যবহার করা হয়। এই ডিফল্ট আচরণকে PREFER_CACHE পলিসি বলা হয়।

    আপনি execute() ফাংশনের প্রতিটি কলে নির্দিষ্ট করে দিতে পারেন যে, এটি শুধুমাত্র ক্যাশ করা মান পরিবেশন করবে ( CACHE_ONLY ) অথবা শর্তহীনভাবে সার্ভার থেকে নতুন মান নিয়ে আসবে ( SERVER_ONLY )।

    await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);
    
    await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);
    
  • যখন আপনি subscribe() কল করেন, তখন maxAge সেটিং নির্বিশেষে, ক্যাশ করা কন্টেন্ট বিদ্যমান থাকলে তা সর্বদা তাৎক্ষণিকভাবে ফেরত দেবে। execute() এর পরবর্তী কলগুলো কনফিগার করা maxAge অনুযায়ী লিসেনারদের অবহিত করবে।

ক্লায়েন্ট সাইডে মিউটেশন ব্যবহার করুন

কোয়েরির মতোই মিউটেশনগুলোও অ্যাক্সেস করা যায়।

await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();

আপনার ফ্লাটার অ্যাপগুলির প্রোটোটাইপ তৈরি করুন এবং পরীক্ষা করুন

স্থানীয় এমুলেটর ব্যবহার করার জন্য ক্লায়েন্টদের নির্দেশ দিন।

আপনি SQL Connect VS Code এক্সটেনশন অথবা CLI থেকে SQL Connect এমুলেটরটি ব্যবহার করতে পারেন।

উভয় ক্ষেত্রেই এমুলেটরের সাথে সংযোগ করার জন্য অ্যাপটিকে প্রস্তুত করার পদ্ধতি একই।

import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';

MoviesConnector.instance.dataConnect
          .useDataConnectEmulator('127.0.0.1', 9399);

// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();

প্রোডাকশন রিসোর্সে স্যুইচ করতে, এমুলেটরের সাথে সংযোগ করার লাইনগুলো কমেন্ট আউট করুন।

ডার্ট এসডিকে-তে ডেটা টাইপ

SQL Connect সার্ভারটি প্রচলিত GraphQL ডেটা টাইপগুলো উপস্থাপন করে। SDK-তে এগুলো নিম্নরূপে প্রদর্শিত হয়।

SQL Connect ধরণ ডার্ট
টাইমস্ট্যাম্প firebase_data_connect.Timestamp
পূর্ণসংখ্যা (৩২-বিট) int
তারিখ তারিখ ও সময়
UUID স্ট্রিং
Int64 int
ভাসা দ্বিগুণ
বুলিয়ান বুল
যেকোনো firebase_data_connect.AnyValue