Firebase Data Connect দিয়ে শুরু করুন

এই কুইকস্টার্টটি আপনাকে Firebase Data Connect ব্যবহার করে আপনার ওয়েব এবং মোবাইল অ্যাপগুলিকে একটি পোস্টগ্রেসকিউএল (PostgreSQL) ডেটাবেসের সাথে সংযুক্ত করতে সাহায্য করবে। আপনি যা শিখবেন:

  • VS Code এবং Firebase CLI ব্যবহার করে আপনার স্থানীয় Firebase Data Connect প্রোজেক্ট ডিরেক্টরি সেট আপ করুন।
  • আপনার অ্যাপের ধারণার ওপর ভিত্তি করে স্বাভাবিক ভাষায় Data Connect স্কিমা, কোয়েরি এবং মিউটেশন তৈরি করুন।
  • আপনার অ্যাপে Data Connect কোয়েরি এবং মিউটেশন চালানোর জন্য স্ট্রংলি-টাইপড এসডিকে ব্যবহার করুন।
  • একটি Cloud SQL for PostgreSQL ইনস্ট্যান্স, একটি Data Connect স্কিমা, কোয়েরি এবং মিউটেশন প্রস্তুত করুন।

স্থানীয় প্রকল্প ডিরেক্টরি সেট আপ করুন

আপনি দুইভাবে Data Connect এর জন্য স্থানীয় ডেভেলপমেন্ট টুলস ইনস্টল করতে পারেন।

  1. প্রজেক্ট ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান।

    এই স্ক্রিপ্টটি Firebase CLI এবং Data Connect VS Code এক্সটেনশন ইনস্টল করে, এবং আপনার প্রজেক্ট সেট আপ করার জন্য firebase init dataconnect ধাপে ধাপে অনুসরণ করতে নির্দেশনা দেয়। যদি আপনার VS Code ডেস্কটপ ইনস্টল করা না থাকে, তবে স্ক্রিপ্টটি এটি একটি ব্রাউজারে খোলে।

    curl -sL https://firebase.tools/init/dataconnect | editor=true bash
  2. ভিজ্যুয়াল স্টুডিও কোডের বাম প্যানেলে থাকা ফায়ারবেস আইকনে ক্লিক করে ডেটা কানেক্ট ভিএস কোড এক্সটেনশন স্ক্রিনটি খুলুন।

  3. স্থানীয় PGlite ডেটাবেস সহ এমুলেটরটি চালাতে 'স্টার্ট এমুলেটরস'- এ ক্লিক করুন।

স্কিমা পর্যালোচনা করুন

Firebase Data Connect আপনার ডেটা মডেল নির্ধারণ করতে GraphQL ব্যবহার করে। @table ডিরেক্টিভটি একটি GraphQL টাইপকে একটি PostgreSQL টেবিলের সাথে ম্যাপ করে। টাইপের ফিল্ডগুলো PostgreSQL কলামের সাথে ম্যাপ করা হয়। আপনি অন্যান্য @table টাইপকে রেফারেন্স করে এমন ফিল্ড ব্যবহার করে টেবিলগুলোর মধ্যে সম্পর্ক নির্ধারণ করতে পারেন, যার মধ্যে কম্পোজিট প্রাইমারি কী সহ জয়েন টেবিল ব্যবহার করে মেনি-টু-মেনি সম্পর্কও অন্তর্ভুক্ত।

ডিফল্ট সেটআপে, আপনি Data Connect স্কিমা ফাইলগুলো dataconnect/schema/ ডিরেক্টরিতে খুঁজে পাবেন। এখানে মুভি টেমপ্লেট স্কিমা থেকে দুটি উদাহরণ টেবিল দেওয়া হলো। আপনি যদি Gemini ব্যবহার করে এটি তৈরি করে থাকেন, তবে আপনার স্কিমাটি ভিন্ন হতে পারে।

type Movie @table {
  # Every table has an implicit primary key field that looks something like:
  #  id: UUID! @default(expr: "uuidV4()")
  title: String!
  imageUrl: String!
  genre: String
}

type Review @table(key: ["movie", "user"]) {
  user: User!
  movie: Movie!
  rating: Int
  reviewText: String
  reviewDate: Date! @default(expr: "request.time")
}

Data Connect স্কিমা সম্পর্কে আরও জানুন

কোয়েরি এবং মিউটেশন তৈরি করুন

Firebase Data Connect কোয়েরি এবং মিউটেশনের জন্য গ্রাফকিউএল (GraphQL) ব্যবহার করে। আপনি এগুলো .gql ফাইলে সংজ্ঞায়িত করেন এবং আপনার অ্যাপ থেকে নাম ধরে কল করেন। গ্রাফকিউএল সিনট্যাক্স স্ট্রংলি-টাইপড এসডিকে এবং একটি নমনীয় এপিআই প্রদান করে, যার মাধ্যমে আপনার অ্যাপের প্রয়োজনীয় সঠিক ডেটা ফেচ করা যায়।

আপনার ডাটাবেসে বীজ ডেটা

এমুলেটরটি চালু থাকা অবস্থায়, আপনি এতে প্রাথমিক ডেটা দিয়ে সিড করতে পারেন। আপনি প্রদত্ত dataconnect/seed_data.gql ফাইলটি ব্যবহার করতে পারেন অথবা নিজের মিউটেশন লিখতে পারেন।

মিউটেশনগুলো কার্যকর করতে এবং আপনার স্থানীয় PGlite ডেটাবেসটি পূরণ করতে VS Code-এর Run (local) Code Lens বাটনটি ব্যবহার করুন।

ফায়ারবেস ডেটার জন্য কোডলেন্স রান বাটন সংযোগ করুন

কোয়েরি এবং মিউটেশন পর্যালোচনা করুন

ডিফল্ট সেটআপে, আপনি Data Connect কোয়েরি এবং মিউটেশনগুলো dataconnect/example/ ডিরেক্টরিতে খুঁজে পাবেন।

নেস্টেড কোয়েরির মাধ্যমে আপনি রিলেশনাল ডেটা নির্ভুলভাবে কোয়েরি করতে পারেন।

query ListMovies @auth(level: PUBLIC, insecureReason: "Anyone can list all movies and their reviews.") {
  movies {
    title imageUrl genre
    reviews_on_movie {
      rating reviewDate
      user { username }
    }
  }
}

Data Connect আপনাকে ফায়ারবেস অথেন্টিকেশন (Firebase Auth) ব্যবহার করে সুরক্ষিত কোয়েরি এবং মিউটেশন তৈরি করতে সাহায্য করে।

আপনার অ্যাপ সুরক্ষিত রাখতে, ওয়েব এবং মোবাইল অ্যাপগুলো শুধুমাত্র @auth নির্দেশিকা ব্যবহার করে Data Connect কোয়েরি এবং মিউটেশন অ্যাক্সেস করতে পারে। কোয়েরি এবং মিউটেশনগুলো {field}_expr: "auth.uid" এর মতো একটি এক্সপ্রেশন ব্যবহার করে নিরাপদে ফায়ারবেস অথ ইউআইডি (Firebase Auth UID) অ্যাক্সেস করতে পারে।

mutation AddReview($movieId: UUID!, $rating: Int!, $reviewText: String!) @auth(level: USER) {
  review_upsert(
    data: {
      userId_expr: "auth.uid"
      movieId: $movieId
      rating: $rating
      reviewText: $reviewText
    }
  )
}

Data Connect কোয়েরি সম্পর্কে আরও জানুন Data Connect মিউটেশন সম্পর্কে আরও জানুন Data Connect অথেন্টিকেশন সম্পর্কে আরও জানুন

কোয়েরি এবং মিউটেশন তৈরি করুন

Data Connect কার্যকরভাবে ব্যবহার করার জন্য আপনাকে গ্রাফকিউএল (GraphQL) বিশেষজ্ঞ হতে হবে না। আপনি স্বাভাবিক ভাষার বর্ণনা থেকে Data Connect কোয়েরি এবং মিউটেশন তৈরি করতে পারেন।

যেকোনো .gql ফাইলে, একটি মন্তব্য শুরু করতে এবং একটি কোয়েরি বা মিউটেশন বর্ণনা করতে # টাইপ করুন। তারপর, GraphQL অপারেশনটি তৈরি করতে Generate/Refine Operation Code Lens বাটনটি ব্যবহার করুন।

ফায়ারবেস ডেটার জন্য কোডলেন্স জেনারেট বাটন সংযোগ করুন

আপনার অ্যাপে তৈরি করা SDK ব্যবহার করুন

firebase init dataconnect আপনার প্রোজেক্টের অ্যাপগুলির জন্য স্বয়ংক্রিয়ভাবে টাইপ-সেফ SDK সেট আপ করে। প্রয়োজনে, আপনি Data Connect VS Code এক্সটেনশনে থাকা `Add SDK to app` বোতামটি ব্যবহার করে অথবা firebase init dataconnect:sdk চালিয়ে ম্যানুয়ালি SDK যোগ করতে পারেন।

ওয়েব

  1. আপনার ওয়েব অ্যাপে ফায়ারবেস যুক্ত করুন।
  2. আপনার React অ্যাপের প্রধান ফাইলে:

    • আপনার তৈরি করা SDK ইম্পোর্ট করুন:
    // Update as needed with the path to your generated SDK.
    import { listMovies, ListMoviesData } from '@dataconnect/generated';
    
    • Data Connect এমুলেটরের সাথে সংযোগ করার জন্য আপনার অ্যাপটিকে প্রস্তুত করুন:
    import { connectDataConnectEmulator } from 'firebase/data-connect';
    
    const dataConnect = getDataConnect(connectorConfig);
    connectDataConnectEmulator(dataConnect, 'localhost', 9399);
    
    • Data Connect মেথডগুলো কল করুন।
    function App() {
      const [movies, setMovies] = useState<ListMoviesData['movies']>([]);
      useEffect(() => {
        listMovies.then(res => setMovies(res.data));
      }, []);
      return (
        movies.map(movie => <h1>{movie.title}</h1>);
      );
    }
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    root.render(<App />);
    

সুইফট

  1. আপনার iOS অ্যাপে Firebase যোগ করুন।
  2. জেনারেট করা SDK ব্যবহার করতে, এটিকে Xcode-এ একটি ডিপেন্ডেন্সি হিসেবে কনফিগার করুন।

    Xcode-এর টপ নেভিগেশন বারে, File > Add Package Dependencies > Add Local নির্বাচন করুন এবং তৈরি হওয়া Package.swift ফাইলটি যে ফোল্ডারে রয়েছে, সেটি বেছে নিন।

  3. আপনার অ্যাপের প্রধান ডেলিগেটে:

    • Data Connect এসডিকে এবং আপনার তৈরি করা এসডিকে ইম্পোর্ট করুন:

      import FirebaseDataConnect
      // Generated queries.
      // Update as needed with the package name of your generated SDK.
      import <CONNECTOR-PACKAGE-NAME>
      
      let connector = DataConnect.moviesConnector
      
    • Data Connect এমুলেটরের সাথে সংযোগ করার জন্য আপনার অ্যাপটিকে প্রস্তুত করুন:

      // Connect to the emulator on "127.0.0.1:9399"
      connector.useEmulator()
      
      // (alternatively) if you're running your emulator on non-default port:
      // connector.useEmulator(port: 9999)
      
    • কল Data Connect পদ্ধতি:

      struct ListMovieView: View {
          @StateObject private var queryRef = connector.listMovies.ref()
      
          var body: some View {
              VStack {
                  Button {
                      Task {
                          do {
                              try await refresh()
                          } catch {
                              print("Failed to refresh: \(error)")
                          }
                      }
                  } label: {
                      Text("Refresh")
                  }
      
                  // use the query results in a view
                  ForEach(queryRef.data?.movies ?? []) { movie in
                      Text(movie.title)
                  }
                  
              }
          }
      }
      
      @MainActor
      func refresh() async throws {
          _ = try await queryRef.execute()
      }
      
      struct ContentView_Previews: PreviewProvider {
          static var previews: some View {
              ListMovieView()
          }
      }
      

কোটলিন অ্যান্ড্রয়েড

  1. আপনার অ্যান্ড্রয়েড অ্যাপে ফায়ারবেস যুক্ত করুন।
  2. জেনারেট করা SDK ব্যবহার করতে, Gradle-এ Data Connect একটি ডিপেন্ডেন্সি হিসেবে কনফিগার করুন।

    আপনার app/build.gradle.kts ফাইলে plugins এবং dependencies আপডেট করুন।

    plugins {
      // Use whichever versions of these dependencies suit your application.
      // The versions shown here were the latest as of March 14, 2025.
      // Note, however, that the version of kotlin("plugin.serialization") must,
      // in general, match the version of kotlin("android").
      id("com.android.application") version "8.9.0"
      id("com.google.gms.google-services") version "4.4.2"
      val kotlinVersion = "2.1.10"
      kotlin("android") version kotlinVersion
      kotlin("plugin.serialization") version kotlinVersion
    }
    
    dependencies {
      // Use whichever versions of these dependencies suit your application.
      // The versions shown here were the latest versions as of March 14, 2025.
      implementation("com.google.firebase:firebase-dataconnect:16.0.0-beta04")
      implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
      implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3")
    
      // These dependencies are not strictly required, but will very likely be used
      // when writing modern Android applications.
      implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
      implementation("androidx.appcompat:appcompat:1.7.0")
      implementation("androidx.activity:activity-ktx:1.10.1")
      implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7")
      implementation("com.google.android.material:material:1.12.0")
    }
    
  3. আপনার অ্যাপের প্রধান অ্যাক্টিভিটিতে:

    • আপনার তৈরি করা SDK থেকে একটি কানেক্টর ইনস্ট্যান্স নিন:
    private val connector = com.myapplication.MoviesConnector.instance
    
    • Data Connect এমুলেটরের সাথে সংযোগ করার জন্য আপনার অ্যাপটিকে প্রস্তুত করুন:
    private val connector = com.myapplication.MoviesConnector.instance
      .apply {
        // Connect to the emulator on "10.0.2.2:9399" (default port)
        dataConnect.useEmulator()
    
        // (alternatively) if you're running your emulator on non-default port:
        // dataConnect.useEmulator(port = 9999)
      }
    
    • Data Connect মেথডগুলো কল করুন।
    class MainActivity : AppCompatActivity() {
    
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val textView: TextView = findViewById(R.id.text_view)
    
        lifecycleScope.launch {
          lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
            
            val result = connector.listMovies.runCatching { execute { } }
            
            val newTextViewText = result.fold(
              onSuccess = {
                val titles = it.data.movies.map { it.title }
                "${titles.size} movies: " + titles.joinToString(", ")
              },
              onFailure = { "ERROR: ${it.message}" }
            )
            textView.text = newTextViewText
          }
        }
      }
    }
    

ফ্লাটার

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

    • আপনার তৈরি করা SDK ইম্পোর্ট করুন:
    // Generated queries.
    // Update as needed with the path to your generated SDK
    
    import 'movies_connector/movies.dart';
    
    • Data Connect এমুলেটরের সাথে সংযোগ করার জন্য আপনার অ্যাপটিকে প্রস্তুত করুন:
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await Firebase.initializeApp(
        options: DefaultFirebaseOptions.currentPlatform,
      );
      
      MoviesConnector.instance.dataConnect
          .useDataConnectEmulator(Uri.base.host, 443, isSecure: true);
      
      runApp(const MyApp());
    }
    
    • Data Connect মেথডগুলো কল করুন।
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
            home: Scaffold(
                body: Column(children: [
          ConstrainedBox(
            constraints: const BoxConstraints(maxHeight: 200),
            child: FutureBuilder(
                future: MoviesConnector.instance.listMovies().execute(),
                builder: (context, snapshot) {
                  if (snapshot.connectionState == ConnectionState.done) {
                    return ListView.builder(
                      scrollDirection: Axis.vertical,
                      itemBuilder: (context, index) => Card(
                          child: Text(
                        snapshot.data!.data.movies[index].title,
                      )),
                      itemCount: snapshot.data!.data.movies.length,
                    );
                  }
                  return const CircularProgressIndicator();
                }),
          )
        ])));
      }
    }
    

প্রোডাকশনে স্থাপন করুন

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

  1. প্রাইসিং পেজে মূল্য এবং বিনামূল্যের ট্রায়ালের তথ্য পর্যালোচনা করুন। আপনার প্রজেক্টটি Firebase Data Connect ট্রায়াল অপশনগুলোর কোনো একটির জন্য যোগ্য হতে পারে।

  2. Data Connect VS Code এক্সটেনশনে থাকা 'Deploy to production' বোতামটিতে ক্লিক করুন অথবা টার্মিনালে চালান:

    firebase deploy --only dataconnect
    

    ডিপ্লয় করার পরে, আপনার স্কিমা দেখতে এবং কোয়েরি ও মিউটেশন চালানোর জন্য Firebase কনসোলে যান।

dataconnect.yaml সম্পর্কে আরও জানুন। ক্লাউড SQL-এর সাথে Data Connect কীভাবে কাজ করে সে সম্পর্কে আরও জানুন।

পরবর্তী পদক্ষেপ

এখন যেহেতু আপনি কুইকস্টার্টটি সম্পন্ন করেছেন, এখানে কিছু পরবর্তী পদক্ষেপ দেওয়া হলো: