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

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

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

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

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

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

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

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

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

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

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

ডিফল্ট সেটআপে, আপনি SQL 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")
}

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

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

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

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

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

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

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

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

ডিফল্ট সেটআপে, আপনি SQL 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 }
    }
  }
}

SQL Connect আপনাকে Firebase Auth-এর সাহায্যে সুরক্ষিত কোয়েরি এবং মিউটেশন তৈরি করতে সাহায্য করে।

আপনার অ্যাপ সুরক্ষিত রাখতে, ওয়েব এবং মোবাইল অ্যাপগুলো শুধুমাত্র @auth নির্দেশিকা ব্যবহার করে SQL 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
    }
  )
}

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

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

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

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

ফায়ারবেস SQL এর জন্য কোডলেন্স জেনারেট বাটন কানেক্ট

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

firebase init dataconnect আপনার প্রোজেক্টের অ্যাপগুলির জন্য স্বয়ংক্রিয়ভাবে টাইপ-সেফ SDK সেট আপ করে। প্রয়োজনে, আপনি SQL 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';
    
    • আপনার অ্যাপটিকে SQL Connect এমুলেটরের সাথে সংযোগ করার জন্য প্রস্তুত করুন:
    import { connectDataConnectEmulator } from 'firebase/data-connect';
    
    const dataConnect = getDataConnect(connectorConfig);
    connectDataConnectEmulator(dataConnect, 'localhost', 9399);
    
    • SQL 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. আপনার অ্যাপের প্রধান ডেলিগেটে:

    • SQL Connect SDK এবং আপনার তৈরি করা SDK ইম্পোর্ট করুন:

      import FirebaseDataConnect
      // Generated queries.
      // Update as needed with the package name of your generated SDK.
      import <CONNECTOR-PACKAGE-NAME>
      
      let connector = DataConnect.moviesConnector
      
    • আপনার অ্যাপটিকে SQL 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)
      
    • SQL 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-এ SQL 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
    
    • আপনার অ্যাপটিকে SQL 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)
      }
    
    • SQL 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';
    
    • আপনার অ্যাপটিকে SQL 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());
    }
    
    • SQL 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 SQL Connect ট্রায়াল অপশনগুলোর কোনো একটির জন্য যোগ্য হতে পারে।

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

    firebase deploy --only dataconnect
    

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

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

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

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