ফায়ারবেস ডেটা কানেক্ট দিয়ে তৈরি করুন (iOS/Swift)

1. সংক্ষিপ্ত বিবরণ

এই কোডল্যাবটি আপনাকে SwiftUI ব্যবহার করে iOS এর জন্য একটি মুভি রিভিউ অ্যাপ তৈরি করতে Firebase Data Connect কে ক্লাউড SQL ডাটাবেসের সাথে একীভূত করার প্রক্রিয়ার মধ্য দিয়ে পরিচালিত করবে।

আপনি শিখবেন কিভাবে Firebase Data Connect ব্যবহার করে আপনার iOS অ্যাপ্লিকেশনটিকে ক্লাউড SQL ডাটাবেসের সাথে সংযুক্ত করবেন, যা সিনেমা পর্যালোচনার জন্য নির্বিঘ্নে ডেটা সিঙ্ক্রোনাইজেশন সক্ষম করবে।

এই কোডল্যাবের শেষে, আপনার কাছে একটি কার্যকরী iOS অ্যাপ থাকবে যা ব্যবহারকারীদের সিনেমা ব্রাউজ করতে এবং সিনেমাগুলিকে পছন্দসই হিসেবে চিহ্নিত করতে দেয়, যার সবকটিই Firebase Data Connect এর শক্তি ব্যবহার করে একটি ক্লাউড SQL ডাটাবেস দ্বারা সমর্থিত।

তুমি কি শিখবে

এই কোডল্যাব আপনাকে শেখাবে কিভাবে:

  • দ্রুত কাজ শেষ করার জন্য Firebase Emulator স্যুট ব্যবহার করে Firebase Data Connect সেট আপ করুন
  • Data Connect এবং GraphQL ব্যবহার করে একটি ডাটাবেস স্কিমা ডিজাইন করুন
  • আপনার ডাটাবেস স্কিমা থেকে একটি টাইপসেফ সুইফট SDK তৈরি করুন এবং এটি একটি সুইফট অ্যাপ্লিকেশনে যুক্ত করুন।
  • আপনার ব্যবহারকারীর ডেটা সুরক্ষিত করতে ব্যবহারকারীর প্রমাণীকরণ বাস্তবায়ন করুন এবং এটি Firebase Data Connect এর সাথে একীভূত করুন।
  • GraphQL দ্বারা চালিত কোয়েরি এবং মিউটেশন ব্যবহার করে ক্লাউড SQL-এ ডেটা পুনরুদ্ধার, আপডেট, মুছে ফেলা এবং পরিচালনা করুন।
  • (ঐচ্ছিকভাবে) উৎপাদনে একটি ডেটা কানেক্ট পরিষেবা স্থাপন করুন

পূর্বশর্ত

  • এক্সকোডের সর্বশেষ সংস্করণ
  • কোডল্যাবের নমুনা কোড। কোডল্যাবের প্রথম ধাপগুলির একটিতে আপনি নমুনা কোডটি ডাউনলোড করবেন।

২. নমুনা প্রকল্পটি সেট আপ করুন

একটি ফায়ারবেস প্রকল্প তৈরি করুন

  1. আপনার গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেস কনসোলে সাইন ইন করুন।
  2. একটি নতুন প্রকল্প তৈরি করতে বোতামটি ক্লিক করুন, এবং তারপর একটি প্রকল্পের নাম লিখুন (উদাহরণস্বরূপ, Friendly Flix )।
  3. চালিয়ে যান ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, তাহলে Firebase শর্তাবলী পর্যালোচনা করুন এবং গ্রহণ করুন, এবং তারপর Continue এ ক্লিক করুন।
  5. (ঐচ্ছিক) Firebase কনসোলে ("Gemini in Firebase" নামে পরিচিত) AI সহায়তা সক্ষম করুন।
  6. এই কোডল্যাবের জন্য, আপনার গুগল অ্যানালিটিক্সের প্রয়োজন নেই , তাই গুগল অ্যানালিটিক্স বিকল্পটি টগল করে বন্ধ করে দিন
  7. Create project এ ক্লিক করুন, আপনার province করার জন্য অপেক্ষা করুন, এবং তারপর Continue এ ক্লিক করুন।

কোডটি ডাউনলোড করুন

এই কোডল্যাবের জন্য নমুনা কোড ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান। এটি আপনার মেশিনে codelab-dataconnect-ios নামে একটি ডিরেক্টরি তৈরি করবে:

git clone https://github.com/FirebaseExtended/codelab-dataconnect-ios`

যদি আপনার মেশিনে গিট না থাকে, তাহলে আপনি সরাসরি গিটহাব থেকে কোডটি ডাউনলোড করতে পারেন।

Firebase কনফিগারেশন যোগ করুন

Firebase SDK আপনার Firebase প্রকল্পের সাথে সংযোগ স্থাপনের জন্য একটি কনফিগারেশন ফাইল ব্যবহার করে। Apple প্ল্যাটফর্মগুলিতে, এই ফাইলটিকে GoogleServices-Info.plist বলা হয়। এই ধাপে, আপনি কনফিগারেশন ফাইলটি ডাউনলোড করবেন এবং এটি আপনার Xcode প্রকল্পে যুক্ত করবেন।

  1. ফায়ারবেস কনসোলে , বাম নেভিগে প্রজেক্ট ওভারভিউ নির্বাচন করুন।
  2. প্ল্যাটফর্মটি নির্বাচন করতে iOS+ বোতামে ক্লিক করুন। অ্যাপল বান্ডেল আইডি চাওয়া হলে, com.google.firebase.samples.FriendlyFlix ব্যবহার করুন।
  3. Register app-এ ক্লিক করুন এবং GoogleServices-Info.plist ফাইলটি ডাউনলোড করতে নির্দেশাবলী অনুসরণ করুন।
  4. ডাউনলোড করা ফাইলটি আপনার ডাউনলোড করা কোডের start/FriendlyFlix/app/FriendlyFlix/FriendlyFlix/ ডিরেক্টরিতে স্থানান্তর করুন, বিদ্যমান GoogleServices-Info.plist ফাইলটি প্রতিস্থাপন করুন
  5. তারপর Firebase কনসোলে সেটআপ প্রজেক্টটি সম্পূর্ণ করতে কয়েকবার Next এ ক্লিক করুন (আপনাকে অ্যাপে SDK যোগ করার দরকার নেই, কারণ এটি ইতিমধ্যেই স্টার্টার প্রজেক্টে আপনার জন্য যত্ন নেওয়া হয়েছে)।
  6. অবশেষে, সেটআপ প্রক্রিয়াটি সম্পূর্ণ করতে Continue to console এ ক্লিক করুন।

৩. ডেটা কানেক্ট সেট আপ করুন

স্থাপন

স্বয়ংক্রিয় ইনস্টলেশন

codelab-dataconnect-ios/FriendlyFlix ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান:

curl -sL https://firebase.tools/dataconnect | bash

এই স্ক্রিপ্টটি আপনার জন্য ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার এবং একটি ব্রাউজার-ভিত্তিক IDE চালু করার চেষ্টা করে। এই IDE আপনার স্কিমা পরিচালনা করতে এবং আপনার অ্যাপ্লিকেশনে ব্যবহৃত কোয়েরি এবং মিউটেশনগুলি সংজ্ঞায়িত করতে এবং দৃঢ়ভাবে টাইপ করা SDK তৈরি করতে সহায়তা করার জন্য একটি প্রি-বান্ডেলড VS কোড এক্সটেনশন সহ টুলিং সরবরাহ করে।

স্ক্রিপ্টটি চালানোর পরে, VS কোড স্বয়ংক্রিয়ভাবে খুলবে।

একবার এটি করার পরে, আপনি স্থানীয় ডিরেক্টরিতে VS Code চালিয়ে VS Code শুরু করতে পারেন:

code .

ম্যানুয়াল ইনস্টলেশন

  1. ভিজ্যুয়াল স্টুডিও কোড ইনস্টল করুন
  2. Node.js ইনস্টল করুন
  3. VS কোডে, codelab-dataconnect-ios/FriendlyFlix ডিরেক্টরিটি খুলুন।
  4. ভিজ্যুয়াল স্টুডিও কোড মার্কেটপ্লেস থেকে ফায়ারবেস ডেটা কানেক্ট এক্সটেনশনটি ইনস্টল করুন।

প্রকল্পে ডেটা কানেক্ট শুরু করুন

বাম দিকের প্যানেলে, Data Connect VS Code এক্সটেনশন UI খুলতে Firebase আইকনে ক্লিক করুন।

  1. "Google দিয়ে সাইন ইন করুন" বোতামে ক্লিক করুন। একটি ব্রাউজার উইন্ডো খুলবে; আপনার Google অ্যাকাউন্ট দিয়ে এক্সটেনশনে সাইন ইন করতে নির্দেশাবলী অনুসরণ করুন।
  2. Connect a Firebase project বোতামে ক্লিক করুন এবং কনসোলে আপনার আগে তৈরি করা প্রকল্পটি নির্বাচন করুন।
  3. Run firebase init বাটনে ক্লিক করুন এবং ইন্টিগ্রেটেড টার্মিনালে ধাপগুলি অনুসরণ করুন।

SDK জেনারেশন কনফিগার করুন

একবার আপনি "Run firebase init" বোতামে ক্লিক করলে, Firebase Data Connect এক্সটেনশনটি আপনার জন্য একটি dataconnect ডিরেক্টরি শুরু করবে।

VS কোডে, dataconnect/connector/connector.yaml ফাইলটি খুলুন এবং আপনি ডিফল্ট কনফিগারেশনটি পাবেন।

অনুগ্রহ করে কনফিগারেশন আপডেট করুন এবং নিম্নলিখিত সেটিংস ব্যবহার করে নিশ্চিত করুন যে জেনারেট করা কোডটি এই কোডল্যাবের সাথে কাজ করে। বিশেষ করে, নিশ্চিত করুন যে connectorId friendly-flix এ সেট করা আছে, এবং Swift প্যাকেজটি FriendlyFlixSDK এ সেট করা আছে।

connectorId: "friendly-flix"
generate:
  swiftSdk:
    outputDir: "../../app"
    package: "FriendlyFlixSDK"
    observablePublisher: observableMacro

এই সেটিংসের অর্থ এখানে দেওয়া হল:

  • connectorId - এই সংযোগকারীর জন্য একটি অনন্য নাম।
  • outputDir - সেই পথ যেখানে জেনারেট করা ডেটা কানেক্ট SDK সংরক্ষণ করা হবে। এই পথটি connector.yaml ফাইল ধারণকারী ডিরেক্টরির সাথে সম্পর্কিত।
  • package - তৈরি করা সুইফট প্যাকেজের জন্য ব্যবহৃত প্যাকেজের নাম।

এই ফাইলটি সংরক্ষণ করার পর, Firebase Data Connect আপনার জন্য FriendlyFlixSDK নামে একটি Swift প্যাকেজ তৈরি করবে এবং এটি FriendlyFlix প্রজেক্ট ফোল্ডারের পাশে রাখবে।

ফায়ারবেস এমুলেটরগুলি শুরু করুন

ভিএস কোডে, ফায়ারবেস ভিউতে স্যুইচ করুন, এবং তারপর স্টার্ট এমুলেটর বোতামে ক্লিক করুন।

এটি ইন্টিগ্রেটেড টার্মিনালে ফায়ারবেস এমুলেটর শুরু করবে। আউটপুটটি এরকম দেখাবে:

npx -y firebase-tools@latest emulators:start --project <your-project-id>

আপনার সুইফট অ্যাপে তৈরি প্যাকেজটি যোগ করুন

  1. Xcode-এ FriendlyFlix/app/FriendlyFlix/FriendlyFlix.xcodeproj খুলুন
  2. ফাইল > প্যাকেজ নির্ভরতা যোগ করুন নির্বাচন করুন...
  3. Add Local... এ ক্লিক করুন, তারপর FriendlyFlix/app ফোল্ডার থেকে FriendlyFlixSDK প্যাকেজটি যোগ করুন।
  4. প্যাকেজ নির্ভরতা সমাধানের জন্য Xcode এর জন্য অপেক্ষা করুন।
  5. FriendlyFlixSDK এর জন্য প্যাকেজ পণ্য নির্বাচন করুন ডায়ালগে, লক্ষ্য হিসেবে FriendlyFlix নির্বাচন করুন এবং প্যাকেজ যোগ করুন এ ক্লিক করুন।

স্থানীয় এমুলেটর ব্যবহার করার জন্য iOS অ্যাপটি কনফিগার করুন

  1. FriendlyFlixApp.swift খুলুন। (আপনি CMD + Shift + O টিপে Quick Open ডায়ালগ খুলতে পারেন, এবং তারপর দ্রুত ফাইলটি খুঁজে পেতে "FriendlyFlixApp" টাইপ করতে পারেন)
  2. আপনার স্কিমার জন্য Firebase, Firebase Auth, Firebase Data Connect এবং জেনারেট করা SDK আমদানি করুন
  3. ইনিশিয়ালাইজারে, ফায়ারবেস কনফিগার করুন।
  4. নিশ্চিত করুন যে DataConnect এবং Firebase Auth স্থানীয় এমুলেটর ব্যবহার করে।
import SwiftUI
import os
import Firebase
import FirebaseAuth
import FriendlyFlixSDK
import FirebaseDataConnect

@main
struct FriendlyFlixApp: App {
  ...

  init() {
    FirebaseApp.configure()
    if useEmulator {
      DataConnect.friendlyFlixConnector.useEmulator(port: 9399)
      Auth.auth().useEmulator(withHost: "localhost", port: 9099)
    }

    authenticationService = AuthenticationService()
  }

  ...

}
  1. গন্তব্য ড্রপডাউন থেকে একটি iOS সিমুলেটর নির্বাচন করুন।
  2. সিমুলেটরে অ্যাপটি চালাতে Xcode-এ CMD+R টিপুন (অথবা Run বোতামে ক্লিক করুন)।

৪. স্কিমা নির্ধারণ করুন এবং ডাটাবেসটি আগে থেকে পূরণ করুন

এই বিভাগে, আপনি একটি স্কিমায় মুভি অ্যাপ্লিকেশনের মূল সত্তাগুলির মধ্যে কাঠামো এবং সম্পর্ক সংজ্ঞায়িত করবেন। Movie , MovieMetaData এবং অন্যান্য সত্তাগুলিকে ডাটাবেস টেবিলে ম্যাপ করা হয়, ফায়ারবেস ডেটা কানেক্ট এবং গ্রাফকিউএল স্কিমা নির্দেশিকা ব্যবহার করে সম্পর্ক স্থাপন করা হয়।

মূল সত্তা এবং সম্পর্ক

এই মুভি ট্র্যাকার অ্যাপের ডেটা মডেলটিতে বেশ কয়েকটি সত্তা রয়েছে যা আপনি এই কোডল্যাব চলাকালীন তৈরি করবেন। আপনি প্রথমে মূল সত্তা তৈরি করবেন, এবং - আপনি যত বেশি বৈশিষ্ট্য প্রয়োগ করবেন - আপনি সেই বৈশিষ্ট্যগুলির জন্য প্রয়োজনীয় সত্তাগুলি যুক্ত করবেন।

এই ধাপে, আপনি Movie এবং MovieMetadata টাইপ তৈরি করবেন।

সিনেমা

Movie টাইপ একটি মুভি সত্তার মূল কাঠামো নির্ধারণ করে, যার মধ্যে রয়েছে title , genre , releaseYear এবং rating এর মতো ক্ষেত্র।

VS কোডে, dataconnect/schema/schema.gqlMovie টাইপের সংজ্ঞা যোগ করুন:

type Movie @table {
  id: UUID! @default(expr: "uuidV4()")
  title: String!
  imageUrl: String!
  releaseYear: Int
  genre: String
  rating: Float
  description: String
  tags: [String]
}

মুভিমেটাডেটা

MovieMetadata টাইপ Movie টাইপের সাথে এক-এক সম্পর্ক স্থাপন করে। এতে সিনেমার পরিচালকের মতো অতিরিক্ত ডেটা অন্তর্ভুক্ত থাকে।

dataconnect/schema/schema.gql ফাইলে MovieMetadata টেবিলের সংজ্ঞা যোগ করুন:

type MovieMetadata @table {
  movie: Movie! @ref
  director: String
}

স্বয়ংক্রিয়ভাবে তৈরি ক্ষেত্র এবং ডিফল্ট

স্কিমাটি @default(expr: "uuidV4()") এর মতো এক্সপ্রেশন ব্যবহার করে স্বয়ংক্রিয়ভাবে অনন্য আইডি এবং টাইমস্ট্যাম্প তৈরি করে। উদাহরণস্বরূপ, যখন একটি নতুন রেকর্ড তৈরি করা হয় তখন Movie টাইপের id ফিল্ডটি স্বয়ংক্রিয়ভাবে একটি UUID দিয়ে পূর্ণ হয়।

সিনেমা এবং সিনেমার মেটাডেটার জন্য মক ডেটা সন্নিবেশ করান

স্কিমা সংজ্ঞায়িত করার মাধ্যমে, আপনি এখন পরীক্ষার জন্য ডাটাবেসকে মক ডেটা দিয়ে প্রি-পপুলেট করতে পারেন।

  1. Finder-এ, finish/FriendlyFlix/dataconnect/moviedata_insert.gql ফাইলটি start/FriendlyFlix/dataconnect ফোল্ডারে কপি করুন।
  2. VS কোডে, dataconnect/moviedata_insert.gql খুলুন।
  3. Firebase Data Connect এক্সটেনশনের এমুলেটরগুলি চালু আছে কিনা তা নিশ্চিত করুন।
  4. ফাইলের উপরে আপনি একটি Run (local) বোতাম দেখতে পাবেন। আপনার ডাটাবেসে মক মুভি ডেটা সন্নিবেশ করতে এটিতে ক্লিক করুন।
  5. ডেটা সফলভাবে যোগ করা হয়েছে কিনা তা নিশ্চিত করতে ডেটা কানেক্ট এক্সিকিউশন টার্মিনালটি পরীক্ষা করুন।

ডেটা তৈরি করার পর, ডেটা কানেক্টে কীভাবে কোয়েরি তৈরি করতে হয় তা শিখতে পরবর্তী ধাপে যান।

৫. সিনেমাগুলি উদ্ধার করুন এবং প্রদর্শন করুন

এই বিভাগে, আপনি সিনেমার তালিকা প্রদর্শনের জন্য একটি বৈশিষ্ট্য বাস্তবায়ন করবেন।

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

ListMovies কোয়েরি সংজ্ঞায়িত করুন

Firebase Data Connect-এর কোয়েরিগুলি GraphQL-এ লেখা হয়, যা আপনাকে কোন ক্ষেত্রগুলি আনতে হবে তা নির্দিষ্ট করতে দেয়। FriendlyFlix-এ, সিনেমাগুলি প্রদর্শনকারী স্ক্রিনগুলিতে নিম্নলিখিত ক্ষেত্রগুলি প্রয়োজন: title , description , releaseYear , rating , এবং imageUrl । এছাড়াও, যেহেতু এটি একটি SwiftUI অ্যাপ, তাই SwiftUI ভিউ আইডেন্টিটি সম্পর্কে সাহায্য করার জন্য আপনার id প্রয়োজন হবে।

VS কোডে, dataconnect/connector/queries.gql ফাইলটি খুলুন এবং ListMovies কোয়েরিটি যোগ করুন:

query ListMovies @auth(level: PUBLIC) {
  movies {
    id
    title
    imageUrl
    releaseYear
    genre
    rating
    tags
    description
  }
}

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

ListMovies কোয়েরিটি অ্যাপের হোম স্ক্রিনে সংযুক্ত করুন।

এখন যেহেতু আপনি ডেটা কানেক্ট এমুলেটরে কোয়েরিটি পরীক্ষা করেছেন, আপনি আপনার অ্যাপের ভিতর থেকে কোয়েরিটি কল করতে পারেন।

যখন আপনি queries.gql সংরক্ষণ করেন, তখন Firebase Data Connect FriendlyFlixSDK প্যাকেজে ListMovies কোয়েরির সাথে সম্পর্কিত কোড তৈরি করে।

Xcode-এ, Movie+DataConnect.swift খুলুন এবং ListMoviesQuery.Data.Movie থেকে Movie তে ম্যাপে নিম্নলিখিত কোডটি যোগ করুন:

import FirebaseDataConnect
import FriendlyFlixSDK

extension Movie {
  init(from: ListMoviesQuery.Data.Movie) {
    id = from.id
    title = from.title
    description = from.description ?? ""
    releaseYear = from.releaseYear
    rating = from.rating
    imageUrl = from.imageUrl
  }
}

HomeScreen.swift ফাইলটি খুলুন এবং নিম্নলিখিত কোড স্নিপেট ব্যবহার করে এটি আপডেট করুন।

import SwiftUI
import FirebaseDataConnect
import FriendlyFlixSDK

struct HomeScreen: View {
  ...

  private var connector = DataConnect.friendlyFlixConnector
  let heroMoviesRef: QueryRefObservation<ListMoviesQuery.Data, ListMoviesQuery.Variables>

  init() {
    heroMoviesRef = connector.listMoviesQuery.ref()
  }
}

extension HomeScreen {
  ...

  private var heroMovies: [Movie] {
    heroMoviesRef.data?.movies.map(Movie.init) ?? []
  }

 private var topMovies: [Movie] {
    heroMoviesRef.data?.movies.map(Movie.init) ?? []
  }

  private var watchList: [Movie] {
    heroMoviesRef.data?.movies.map(Movie.init) ?? []
  }

  ...
}

queries.gql সংরক্ষণ করার সময় Data Connect দ্বারা listMoviesQuery() কোয়েরিটি তৈরি করা হয়েছিল। এর Swift বাস্তবায়ন দেখতে, FriendlyFlixSDK প্যাকেজের FriendlyFlixOperations.swift ফাইলটি দেখুন।

অ্যাপটি চালান

Xcode-এ, iOS Simulator-এ অ্যাপটি চালু করতে Run বোতামে ক্লিক করুন।

অ্যাপটি চালু হয়ে গেলে, আপনার একটি স্ক্রিন দেখতে হবে যা দেখতে এরকম হবে:

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

৬. নায়ক এবং সেরা সিনেমা প্রদর্শন করুন

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

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

ListMovies কোয়েরি উন্নত করুন

অর্ডার এবং লিমিটিংয়ের জন্য সাপোর্ট যোগ করতে queries.gql খুলুন এবং ListMovies আপডেট করুন:

query ListMovies(
  $orderByRating: OrderDirection
  $orderByReleaseYear: OrderDirection
  $limit: Int
) @auth(level: PUBLIC) {
  movies(
    orderBy: [{ rating: $orderByRating }, { releaseYear: $orderByReleaseYear }]
    limit: $limit
  ) {
    id
    title
    description
    releaseYear
    rating
    imageUrl
  }
}

এটি আপনাকে কোয়েরিটি কতগুলি সিনেমা ফেরত দেবে তার সংখ্যা সীমিত করতে এবং রেটিং এবং মুক্তির বছর উভয়ের ভিত্তিতে ফলাফল সেট করার অনুমতি দেবে।

এই ফাইলটি সংরক্ষণ করার পর, Firebase Data Connect স্বয়ংক্রিয়ভাবে FriendlyFlixSDK এর মধ্যে কোডটি পুনরায় তৈরি করবে। পরবর্তী ধাপে, আপনি এই অতিরিক্ত বৈশিষ্ট্যগুলি ব্যবহার করতে HomeScreen.swift এ কোডটি আপডেট করতে পারেন।

UI-তে উন্নত কোয়েরি ব্যবহার করুন

HomeScreen.swift এ প্রয়োজনীয় পরিবর্তন করতে Xcode এ ফিরে যান।

প্রথমে, heroMoviesRef আপডেট করুন এবং সম্প্রতি মুক্তিপ্রাপ্ত ৩টি সিনেমা আনুন:

struct HomeScreen {
  ...

  init() {
    heroMoviesRef = connector.listMoviesQuery
      .ref { optionalVars in
        optionalVars.limit = 3
        optionalVars.orderByReleaseYear = .DESC
      }

  }
}

এরপর, সেরা সিনেমাগুলির জন্য আরেকটি কোয়েরি রেফারেন্স সেট আপ করুন, এবং ফিল্টারটি ৫টি সর্বোচ্চ রেটিংপ্রাপ্ত সিনেমাতে সেট করুন:

struct HomeScreen {
  ...

  let topMoviesRef: QueryRefObservation<ListMoviesQuery.Data, ListMoviesQuery.Variables>

  init() {
    heroMoviesRef = ...

    topMoviesRef = connector.listMoviesQuery
      .ref { optionalVars in
        optionalVars.limit = 5
        optionalVars.orderByRating = .DESC
      }
  }
}

অবশেষে, এই কোয়েরির ফলাফলকে UI এর সাথে সংযুক্ত করে এমন কম্পিউটেড প্রোপার্টি আপডেট করুন:

extension HomeScreen {
  ...

  private var topMovies: [Movie] {
    topMoviesRef.data?.movies.map(Movie.init) ?? []
  }

}

এটিকে কাজে দেখুন

হিরো বিভাগে সর্বশেষ ৩টি সিনেমা এবং শীর্ষ সিনেমা বিভাগে সর্বোচ্চ রেটিংপ্রাপ্ত ৫টি সিনেমা দেখতে অ্যাপটি আবার চালান:

৭. সিনেমা এবং অভিনেতার বিবরণ প্রদর্শন করুন

ব্যবহারকারী এখন সিনেমা ব্রাউজ করতে পারবেন। সিনেমার কার্ডে ট্যাপ করার সময়, তাদের সিনেমা সম্পর্কে কিছু বিবরণ দেখানো হবে, কিন্তু আপনি হয়তো লক্ষ্য করেছেন যে বিবরণে একটি নির্দিষ্ট পরিমাণ, ঠিক আছে... বিস্তারিত নেই!

এর কারণ হল, আমরা প্রতিটি সিনেমা সম্পর্কে যতটা তথ্য প্রয়োজন ছিল, ততটাই সংগ্রহ করেছি, যাতে সিনেমার হিরো বিভাগ এবং সেরা সিনেমা বিভাগ রেন্ডার করা যায়: সিনেমার শিরোনাম, একটি সংক্ষিপ্ত বিবরণ এবং ছবির URL।

সিনেমার বিবরণ পৃষ্ঠায়, আমরা সিনেমা সম্পর্কে আরও তথ্য দেখাতে চাই। এই বিভাগে, আপনি অ্যাপটিকে আরও উন্নত করবেন যাতে এটি সিনেমার অভিনেতাদের এবং বিস্তারিত পৃষ্ঠায় যেকোনো পর্যালোচনা দেখাতে পারে।

এর জন্য, আপনাকে কয়েকটি জিনিস করতে হবে:

  • চলচ্চিত্র অভিনেতা এবং পর্যালোচনাগুলিকে সমর্থন করার জন্য স্কিমা উন্নত করুন
  • একটি প্রদত্ত সিনেমা সম্পর্কে বিশদ তথ্য সংগ্রহের জন্য Firebase Data Connect কোয়েরি লিখুন
  • সিনেমার বিবরণ স্ক্রিনে ফলাফল দেখানো হচ্ছে

স্কিমা উন্নত করুন

VS কোডে, dataconnect/schema/schema.gql খুলুন এবং Actor এবং MovieActor জন্য স্কিমা সংজ্ঞা যোগ করুন।

## Actors
## An actor can participate in multiple movies; movies can have multiple actors
## Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String!
  name: String! @col(name: "name", dataType: "varchar(30)")
}

## Join table for many-to-many relationship for movies and actors
## The 'key' param signifies the primary key(s) of this table
## In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  ## @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  ## In this case, @ref(fields: "id") is implied
  movie: Movie!
  ## movieId: UUID! <- this is created by the implied @ref, see: implicit.gql

  actor: Actor!
  ## actorId: UUID! <- this is created by the implied  @ref, see: implicit.gql

  role: String! ## "main" or "supporting"
}

অভিনেতাদের জন্য মক ডেটা যোগ করুন

স্কিমা আপডেট করার সাথে সাথে, আপনি এখন পরীক্ষার জন্য আরও মক ডেটা দিয়ে ডাটাবেস পূরণ করতে পারবেন।

  1. Finder-এ, finish/FriendlyFlix/dataconnect/moviededetails_insert.gql কপি করে start/FriendlyFlix/dataconnect ফোল্ডারে পাঠান।
  2. VS কোডে, dataconnect/moviededetails_insert.gql খুলুন।
  3. Firebase Data Connect এক্সটেনশনের এমুলেটরগুলি চালু আছে কিনা তা নিশ্চিত করুন।
  4. ফাইলের উপরে আপনি একটি Run (local) বোতাম দেখতে পাবেন। আপনার ডাটাবেসে মক মুভি ডেটা সন্নিবেশ করতে এটিতে ক্লিক করুন।
  5. ডেটা সফলভাবে যোগ করা হয়েছে কিনা তা নিশ্চিত করতে ডেটা কানেক্ট এক্সিকিউশন টার্মিনালটি পরীক্ষা করুন।

তথ্য সংগ্রহের পর, সিনেমার বিবরণ আনার জন্য কোয়েরিটি সংজ্ঞায়িত করতে পরবর্তী ধাপে যান।

GetMovieById কোয়েরি সংজ্ঞায়িত করুন

VS কোডে, dataconnect/connector/queries.gql ফাইলটি খুলুন এবং GetMovieById কোয়েরিটি যোগ করুন:

## Get movie by id
query GetMovieById($id: UUID!) @auth(level: PUBLIC) {
  movie(id: $id) {
    id
    title
    imageUrl
    releaseYear
    genre
    rating
    description
    tags
    metadata: movieMetadatas_on_movie {
      director
    }
    mainActors: actors_via_MovieActor(where: { role: { eq: "main" } }) {
      id
      name
      imageUrl
    }
    supportingActors: actors_via_MovieActor(
      where: { role: { eq: "supporting" } }
    ) {
      id
      name
      imageUrl
    }
  }
}

GetMovieById কোয়েরিটি MovieDetailsView এর সাথে সংযুক্ত করুন।

Xcode-এ, MovieDetailsView.swift ফাইলটি খুলুন এবং নিম্নলিখিত কোডের সাথে মেলানোর জন্য movieDetails কম্পিউটেড প্রোপার্টি আপডেট করুন:

import NukeUI
import SwiftUI
import FirebaseDataConnect
import FriendlyFlixSDK

@MainActor
struct MovieDetailsView: View {
  private var movie: Movie

  private var movieDetails: MovieDetails? {
    DataConnect.friendlyFlixConnector
      .getMovieByIdQuery
      .ref(id: movie.id)
      .data?.movie.map { movieDetails in
        MovieDetails(
          title: movieDetails.title,
          description: movieDetails.description ?? "",
          releaseYear: movieDetails.releaseYear,
          rating: movieDetails.rating ?? 0,
          imageUrl: movieDetails.imageUrl,
          mainActors: movieDetails.mainActors.map { mainActor in
            MovieActor(id: mainActor.id,
                       name: mainActor.name,
                       imageUrl: mainActor.imageUrl)
          },
          supportingActors: movieDetails.supportingActors.map{ supportingActor in
            MovieActor(id: supportingActor.id,
                       name: supportingActor.name,
                       imageUrl: supportingActor.imageUrl)
          },
          reviews: []
        )
      }
  }

  public init(movie: Movie) {
    self.movie = movie
  }
}

অ্যাপটি চালান

Xcode-এ, iOS সিমুলেটরে অ্যাপটি চালু করতে Run বোতামে ক্লিক করুন।

অ্যাপটি চালু হয়ে গেলে, সিনেমার বিবরণ প্রদর্শনের জন্য একটি সিনেমা কার্ডে ট্যাপ করুন। এটি দেখতে এরকম হওয়া উচিত:

৮. ব্যবহারকারী প্রমাণীকরণ বাস্তবায়ন করুন

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

ওয়াচলিস্ট বৈশিষ্ট্যটি বাস্তবায়নের আগে, আপনাকে প্রথমে ব্যবহারকারীর পরিচয় স্থাপন করতে হবে। এটি সক্ষম করতে, আপনাকে Firebase প্রমাণীকরণকে একীভূত করতে হবে, যার ফলে ব্যবহারকারীরা অ্যাপে সাইন ইন করতে পারবেন।

আপনি হয়তো ইতিমধ্যেই হোম স্ক্রিনের উপরের ডানদিকে ব্যবহারকারীর অবতার বোতামটি দেখেছেন। এটিতে ট্যাপ করলে আপনি এমন একটি স্ক্রিনে চলে যাবেন যেখানে ব্যবহারকারীরা তাদের ইমেল এবং পাসওয়ার্ড ব্যবহার করে সাইন আপ বা সাইন ইন করতে পারবেন।

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

ফায়ারবেস প্রমাণীকরণ সক্ষম করুন

আপনার প্রকল্পের Firebase কনসোলে, প্রমাণীকরণ বিভাগে যান এবং Firebase প্রমাণীকরণ সক্ষম করুন। তারপর, ইমেল/পাসওয়ার্ড প্রমাণীকরণ প্রদানকারী সক্ষম করুন।

আপনার স্থানীয় প্রজেক্ট ফোল্ডারে, firebase.json খুঁজুন এবং Firebase Authentication এমুলেটর সক্ষম করতে এটি নিম্নরূপ আপডেট করুন।

{
  "emulators": {
    "dataconnect": {
    },
    "auth": {
    }
  },
  "dataconnect": {
    "source": "dataconnect"
  }
}

এর পরে, পরিবর্তনটি কার্যকর হওয়ার জন্য আপনাকে ফায়ারবেস এমুলেটরটি বন্ধ করে পুনরায় চালু করতে হবে।

একটি প্রমাণীকরণ হ্যান্ডলার বাস্তবায়ন করুন

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

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

Xcode-এ, AuthenticationService.swift ফাইলটি খুলুন এবং নিম্নলিখিত কোডটি যোগ করুন:

import Foundation
import Observation
import os
import FirebaseAuth

enum AuthenticationState {
  case unauthenticated
  case authenticating
  case authenticated
}

@Observable
class AuthenticationService {
  private let logger = Logger(subsystem: "FriendlyFlix", category: "auth")

  var presentingAuthenticationDialog = false
  var presentingAccountDialog = false

  var authenticationState: AuthenticationState = .unauthenticated
  var user: User?
  private var authenticationListener: AuthStateDidChangeListenerHandle?

  init() {
    authenticationListener = Auth.auth().addStateDidChangeListener { auth, user in
      if let user {
        self.authenticationState = .authenticated
        self.user = user
      } else {
        self.authenticationState = .unauthenticated
      }
    }
  }

  private var onSignUp: ((User) -> Void)?
  public func onSignUp(_ action: @escaping (User) -> Void) {
    onSignUp = action
  }

  func signInWithEmailPassword(email: String, password: String) async throws {
    try await Auth.auth().signIn(withEmail: email, password: password)
    authenticationState = .authenticated
  }

  func signUpWithEmailPassword(email: String, password: String) async throws {
    try await Auth.auth().createUser(withEmail: email, password: password)

    if let onSignUp, let user = Auth.auth().currentUser {
      logger
        .debug(
          "User signed in \(user.displayName ?? "(no fullname)") with email \(user.email ?? "(no email)")"
        )
      onSignUp(user)
    }

    authenticationState = .authenticated
  }

  func signOut() throws {
    try Auth.auth().signOut()
    authenticationState = .unauthenticated
  }
}

এটি একটি জেনেরিক প্রমাণীকরণ হ্যান্ডলার যা আপনাকে onSignUp ব্যবহার করে একটি ক্লোজার নিবন্ধন করতে দেয় যা ব্যবহারকারী সাইন ইন করার পরে কল করা হবে।

এই ক্লোজারটির ভেতরে, আপনি ডাটাবেসে একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি করতে পারবেন। কিন্তু এটি করার আগে, আপনাকে একটি মিউটেশন তৈরি করতে হবে যা আপনাকে ডাটাবেসে নতুন ব্যবহারকারী তৈরি বা আপডেট করতে দেবে।

স্কিমায় একটি ব্যবহারকারী সত্তা যোগ করুন

User ধরণ একটি ব্যবহারকারী সত্তাকে সংজ্ঞায়িত করে। ব্যবহারকারীরা পর্যালোচনা রেখে বা সিনেমা পছন্দ করে সিনেমার সাথে ইন্টারঅ্যাক্ট করতে পারেন।

VS কোডে, dataconnect/schema/schema.gql ফাইলটি খুলুন এবং নিম্নলিখিত User টেবিলের সংজ্ঞা যোগ করুন:

## Users
## A user can leave reviews for movies
## user-reviews is a one to many relationship, movie-reviews is a one to many relationship, movie:user is a many to many relationship
type User @table {
  id: String! @col(name: "user_auth")
  username: String! @col(name: "username", dataType: "varchar(50)")
}

ব্যবহারকারী সন্নিবেশ করানো বা আপডেট করার জন্য একটি মিউটেশন সংজ্ঞায়িত করুন

VS কোডে, dataconnect/connector/mutations.gql ফাইলটি খুলুন এবং UpsertUser মিউটেশনটি যোগ করুন:

mutation UpsertUser($username: String!) @auth(level: USER) {
  user_upsert(
    data: {
      id_expr: "auth.uid"
      username: $username
    }
  )
}

সফলভাবে লগ ইন করার পরে একটি নতুন ব্যবহারকারী তৈরি করুন

Xcode-এ, FriendlyFlixApp.swift খুলুন এবং initializer-এ নিম্নলিখিত কোডটি যোগ করুন:

@main
struct FriendlyFlixApp: App {

  ...

  init() {
    ...
    authenticationService = AuthenticationService()
    authenticationService?.onSignUp { user in
      let userName = String(user.email?.split(separator: "@").first ?? "(unknown)")
      Task {
        try await DataConnect.friendlyFlixConnector
          .upsertUserMutation.execute(username: userName)
      }
    }
  }

  var body: some Scene {
    ...
  }
}

এই কোডটি upsertUserMutation Firebase Data Connect ব্যবহার করে তৈরি করা হয় যাতে আপনি যখনই Firebase Authentication ব্যবহার করে সফলভাবে সাইন আপ করেন তখন নতুন ব্যবহারকারী সন্নিবেশ করাতে পারেন (অথবা একই আইডি সহ বিদ্যমান ব্যবহারকারীকে আপডেট করতে পারেন)।

এটিকে কাজে দেখুন

এটি কাজ করে কিনা তা যাচাই করতে, প্রথমে iOS অ্যাপে সাইন আপ করুন:

  • যদি না করে থাকেন, তাহলে Firebase Authentication Emulator চালু আছে কিনা তা নিশ্চিত করতে Firebase Emulator বন্ধ করে পুনরায় চালু করুন।
  • Xcode-এ, iOS সিমুলেটরে অ্যাপটি চালু করতে Run বোতামে ক্লিক করুন।
  • স্ক্রিনের উপরের ডানদিকে কোণায় অবতার আইকনে ক্লিক করুন।
  • সাইন আপ ফ্লোতে স্যুইচ করুন এবং অ্যাপে সাইন আপ করুন।

তারপর, অ্যাপটি ব্যবহারকারীর জন্য একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি করেছে কিনা তা যাচাই করার জন্য ডাটাবেসটি জিজ্ঞাসা করুন:

  • VS কোডে, dataconnect/schema/schema.gql খুলুন এবং User entity-তে Read data-তে ক্লিক করুন।
  • এটি User_read.gql নামে একটি নতুন কোয়েরি ফাইল তৈরি করবে।
  • ব্যবহারকারীদের টেবিলের সকল ব্যবহারকারী দেখতে Run local এ ক্লিক করুন।
  • ডেটা কানেক্ট এক্সিকিউশন প্যানে, আপনি এখন যে ব্যবহারকারীর সাথে সাইন আপ করেছেন তার একটি অ্যাকাউন্ট দেখতে পাবেন।

৯. প্রিয় সিনেমা পরিচালনা করুন

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

পছন্দসই সমর্থন করার জন্য স্কিমা উন্নত করুন

FavoriteMovie টাইপ হল একটি জয়েন টেবিল যা ব্যবহারকারী এবং তাদের প্রিয় সিনেমার মধ্যে বহু-থেকে-বহু সম্পর্ক পরিচালনা করে। প্রতিটি টেবিল একজন User একটি Movie এর সাথে লিঙ্ক করে।

কোড স্নিপেটটি কপি করে আপনার dataconnect/schema/schema.gql ফাইলে পেস্ট করুন:

type FavoriteMovie
  @table(name: "FavoriteMovies", singular: "favorite_movie", plural: "favorite_movies", key: ["user", "movie"]) {
  ## @ref is implicit
  user: User!
  movie: Movie!
}

পছন্দসই যোগ এবং অপসারণের জন্য মিউটেশনগুলি সংজ্ঞায়িত করুন

অ্যাপটি ব্যবহারকারীর পছন্দের সিনেমাগুলি প্রদর্শন করার আগে, ব্যবহারকারীকে তাদের পছন্দের সিনেমাগুলি নির্দেশ করতে হবে। এটি অর্জনের জন্য, আপনাকে প্রথমে দুটি মিউটেশন যুক্ত করতে হবে যাতে একটি সিনেমা ব্যবহারকারীর পছন্দের তালিকায় স্থান পায়, অথবা যথাক্রমে তাদের পছন্দের তালিকা থেকে এটিকে আবার বাদ দিতে হয়।

  1. VS কোডে, dataconnect/connector/mutations.gqlmutations.gql খুলুন।
  2. পছন্দের সিনেমাগুলি পরিচালনা করতে নিম্নলিখিত মিউটেশনগুলি যোগ করুন :
## Add a movie to the user's favorites list
mutation AddFavoritedMovie($movieId: UUID!) @auth(level: USER) {
  favorite_movie_upsert(data: { userId_expr: "auth.uid", movieId: $movieId })
}

## Remove a movie from the user's favorites list
mutation DeleteFavoritedMovie($movieId: UUID!) @auth(level: USER) {
  favorite_movie_delete(key: { userId_expr: "auth.uid", movieId: $movieId })
}

আপনার অ্যাপের UI-তে মিউটেশনগুলি সংযুক্ত করুন।

ব্যবহারকারীরা সিনেমার বিবরণ স্ক্রিনে হার্ট আইকনে ক্লিক করে একটি সিনেমাকে পছন্দের হিসেবে চিহ্নিত করতে পারেন।

আপনার তৈরি করা মিউটেশনগুলি অ্যাপের UI-তে সংযুক্ত করতে, MovieCardView এ নিম্নলিখিত পরিবর্তনগুলি করুন:

  1. FriendlyFlixSDK আমদানি করুন এবং সংযোগকারী সেট আপ করুন
import NukeUI
import os
import SwiftUI
import FirebaseDataConnect
import FriendlyFlixSDK

struct MovieCardView: View {
  private let logger = Logger(subsystem: "FriendlyFlix", category: "moviecard")
  @Environment(\.dismiss) private var dismiss
  private var connector = DataConnect.friendlyFlixConnector

  ...
}
  1. toggleFavourite পদ্ধতিটি প্রয়োগ করুন। ব্যবহারকারী যখনই MovieCardView এ হার্ট আইকনে ট্যাপ করবেন তখনই এটি কল করা হবে:
struct MovieCardView {

  ...

  private func toggleFavourite() {
    Task {
      if isFavourite {
        let _ = try await connector.deleteFavoritedMovieMutation.execute(movieId: movie.id)
      } else {
        let _ = try await connector.addFavoritedMovieMutation.execute(movieId: movie.id)
      }
    }
  }
}

এটি ডাটাবেসে বর্তমান সিনেমার প্রিয় অবস্থা আপডেট করবে। একটি শেষ ধাপ যা অনুপস্থিত তা হল UI অবস্থাটি সেই অনুযায়ী প্রতিফলিত হচ্ছে তা নিশ্চিত করা।

কোনও সিনেমা প্রিয় হিসেবে চিহ্নিত কিনা তা নির্ধারণের জন্য একটি কোয়েরি সংজ্ঞায়িত করুন

  1. VS কোডে, dataconnect/connectorqueries.gql খুলুন।
  2. কোনও সিনেমা প্রিয় হিসেবে চিহ্নিত হয়েছে কিনা তা পরীক্ষা করতে নিম্নলিখিত কোয়েরিটি যোগ করুন:
query GetIfFavoritedMovie($movieId: UUID!) @auth(level: USER) {
  favorite_movie(key: { userId_expr: "auth.uid", movieId: $movieId }) {
    movieId
  }
}
  1. Xcode-এ, GetIfFavoritedMovie কোয়েরির একটি রেফারেন্স ইনস্ট্যান্টিয়েট করুন এবং কম্পিউটেড প্রোপার্টি বাস্তবায়ন করুন যা নির্ধারণ করে যে এই MovieCardView এ দেখানো সিনেমাটি বর্তমান ব্যবহারকারীর জন্য প্রিয় হিসেবে চিহ্নিত কিনা।
struct MovieCardView: View {

  ...

  public init(showDetails: Bool, movie: Movie) {
    self.showDetails = showDetails
    self.movie = movie

    isFavouriteRef = connector.getIfFavoritedMovieQuery.ref(movieId: movie.id)
  }

  // MARK: - Favourite handling

  private let isFavouriteRef: QueryRefObservation<
    GetIfFavoritedMovieQuery.Data,
    GetIfFavoritedMovieQuery.Variables
  >
  private var isFavourite: Bool {
    isFavouriteRef.data?.favorite_movie?.movieId != nil
  }

  ...

}
  1. ব্যবহারকারী যখনই বোতামটি ট্যাপ করবেন তখনই কোয়েরিটি কার্যকর করার জন্য toggleFavourite এ কোডটি আপডেট করুন। এটি নিশ্চিত করে যে isFavourite কম্পিউটেড প্রোপার্টি সর্বদা সঠিক মান প্রদান করে।
  private func toggleFavourite() {
    Task {
      if isFavourite {
        ...
      }

      let _ = try await isFavouriteRef.execute()
    }
  }

পছন্দের সিনেমাগুলি আনুন

এই বৈশিষ্ট্যের চূড়ান্ত পদক্ষেপ হিসেবে, আপনি ব্যবহারকারীর পছন্দের সিনেমাগুলি আনার কাজ বাস্তবায়ন করবেন যাতে তারা তাদের ওয়াচ লিস্টে সেগুলি দেখতে পারে।

  1. VS কোডে, dataconnect/connector/queries.gqlqueries.gql খুলুন এবং নিম্নলিখিত কোয়েরিটি পেস্ট করুন:
## Get favorite movies by user ID
query GetUserFavoriteMovies @auth(level: USER) {
  user(id_expr: "auth.uid") {
    favoriteMovies: favorite_movies_on_user {
      movie {
        id
        title
        genre
        imageUrl
        releaseYear
        rating
        description
      }
    }
  }
}

ব্যবহারকারীর পছন্দের সিনেমার তালিকা LibraryScreen এ প্রদর্শিত হয়। ব্যবহারকারী সাইন ইন করলেই কেবল এই স্ক্রিনে ডেটা প্রদর্শিত হবে, তাই আপনাকে প্রথমে স্ক্রিনের প্রমাণীকরণ অবস্থা অ্যাপের AuthenticationService এর সাথে সংযুক্ত করতে হবে।

  1. একটি FavoriteMovieFavoriteMovies থেকে একটি Movie মানচিত্রে কোড যোগ করুন Movie+DataConnect.swift :
import FirebaseDataConnect
import FriendlyFlixSDK

extension Movie {

  ...

  init(from: GetUserFavoriteMoviesQuery.Data.User.FavoriteMovieFavoriteMovies) {
    id = from.movie.id
    title = from.movie.title
    description = from.movie.description ?? ""
    releaseYear = from.movie.releaseYear
    rating = from.movie.rating
    imageUrl = from.movie.imageUrl
  }
}
  1. Xcode-এ, LibraryScreen খুলুন, তারপর update isSignedIn নিম্নরূপ:
struct LibraryScreen: View {
  ...

  private var isSignedIn: Bool {
    authenticationService.user != nil
  }

}
  1. তারপর, Firebase Data Connect এবং FriendlyFlixSDK আমদানি করুন, এবং GetUserFavoriteMovies কোয়েরির একটি রেফারেন্স পান:
import SwiftUI
import FirebaseDataConnect
import FriendlyFlixSDK

struct LibraryScreen {

 ...

  private var connector = DataConnect.friendlyFlixConnector

  ...

  init() {
    watchListRef = connector.getUserFavoriteMoviesQuery.ref()
  }

  private let watchListRef: QueryRefObservation<
    GetUserFavoriteMoviesQuery.Data,
    GetUserFavoriteMoviesQuery.Variables
  >
  private var watchList: [Movie] {
    watchListRef.data?.user?.favoriteMovies.map(Movie.init) ?? []
  }

  ...

}


  1. ভিউটি প্রদর্শিত হলে watchListRef কোয়েরিটি কার্যকর করা হয়েছে কিনা তা নিশ্চিত করুন:
extension LibraryScreen: View {
  var body: some View {
    ...
            MovieListSection(namespace: namespace, title: "Watch List", movies: watchList)
              .onAppear {
                Task {
                  try await watchListRef.execute()
                }
  ...

এটিকে কাজে দেখুন

এখন আপনি অ্যাপটি চালাতে পারেন এবং আপনার প্রয়োগ করা পছন্দের বৈশিষ্ট্যটি চেষ্টা করে দেখতে পারেন। মনে রাখার জন্য কয়েকটি বিষয়:

  • নিশ্চিত করুন যে Firebase এমুলেটরটি চলছে।
  • নিশ্চিত করুন যে আপনি সিনেমা এবং সিনেমার বিবরণের জন্য মক ডেটা যোগ করেছেন।
  • নিশ্চিত করুন যে আপনি একজন ব্যবহারকারী হিসেবে সাইন আপ করেছেন।
  1. Xcode-এ, iOS সিমুলেটরে অ্যাপটি চালু করতে Run বোতামে ক্লিক করুন।
  2. অ্যাপটি চালু হয়ে গেলে, সিনেমার বিবরণ প্রদর্শনের জন্য একটি সিনেমা কার্ডে ট্যাপ করুন।
  3. সিনেমাটিকে পছন্দের হিসেবে চিহ্নিত করতে হার্ট আইকনে ট্যাপ করুন। হার্টটি শক্ত হয়ে উঠবে।
  4. কয়েকটি সিনেমার জন্য এটি পুনরাবৃত্তি করুন।
  5. লাইব্রেরি ট্যাবে যান। এখন আপনার পছন্দের হিসেবে চিহ্নিত সমস্ত সিনেমার একটি তালিকা দেখতে পাবেন।

১০. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে একটি iOS অ্যাপে Firebase Data Connect যোগ করেছেন! এখন আপনি Data Connect সেট আপ, কোয়েরি এবং মিউটেশন তৈরি এবং ব্যবহারকারীর প্রমাণীকরণ পরিচালনা করার জন্য প্রয়োজনীয় মূল পদক্ষেপগুলি জানেন।

ঐচ্ছিক: উৎপাদনে স্থাপন করুন

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

১১. (ঐচ্ছিক) আপনার অ্যাপটি স্থাপন করুন

এখন পর্যন্ত এই অ্যাপটি সম্পূর্ণ স্থানীয়, সমস্ত ডেটা Firebase এমুলেটর স্যুটে রয়েছে। এই বিভাগে আপনি শিখবেন কিভাবে আপনার Firebase প্রকল্পটি কনফিগার করবেন যাতে এই অ্যাপটি উৎপাদনে কাজ করতে পারে।

ফায়ারবেস প্রমাণীকরণ সক্ষম করুন

  1. Firebase কনসোলে, Authentication বিভাগে যান এবং Get started এ ক্লিক করুন।
  2. সাইন-ইন পদ্ধতি ট্যাবে নেভিগেট করুন।
  3. নেটিভ প্রোভাইডার বিভাগ থেকে ইমেল/পাসওয়ার্ড বিকল্পটি নির্বাচন করুন,
  4. ইমেল/পাসওয়ার্ড প্রদানকারী সক্ষম করুন, তারপর সংরক্ষণ করুন এ ক্লিক করুন।

Firebase ডেটা কানেক্ট সক্ষম করুন

গুরুত্বপূর্ণ: যদি আপনি প্রথমবারের মতো আপনার প্রোজেক্টে স্কিমা স্থাপন করেন, তাহলে এই প্রক্রিয়াটি একটি ক্লাউড SQL PostgreSQL ইনস্ট্যান্স তৈরি করবে, যা প্রায় 15 মিনিট সময় নিতে পারে। ক্লাউড SQL ইনস্ট্যান্স প্রস্তুত না হওয়া এবং Firebase Data Connect এর সাথে ইন্টিগ্রেটেড না হওয়া পর্যন্ত আপনি এটি স্থাপন করতে পারবেন না।

১. Firebase Data Connect VS Code এক্সটেনশন UI-তে, Deploy to production এ ক্লিক করুন। ২. আপনাকে স্কিমা পরিবর্তনগুলি পর্যালোচনা করতে এবং সম্ভাব্য ধ্বংসাত্মক পরিবর্তনগুলি অনুমোদন করতে হতে পারে। আপনাকে নিম্নলিখিতগুলি করতে বলা হবে: - firebase dataconnect:sql:diff ব্যবহার করে স্কিমা পরিবর্তনগুলি পর্যালোচনা করুন - যখন আপনি পরিবর্তনগুলিতে সন্তুষ্ট হন, তখন firebase dataconnect:sql:migrate দ্বারা শুরু হওয়া প্রবাহ ব্যবহার করে সেগুলি প্রয়োগ করুন।

আপনার ক্লাউড SQL for PostgreSQL ইনস্ট্যান্স চূড়ান্ত ডিপ্লয় করা স্কিমা এবং ডেটা সহ আপডেট করা হবে। আপনি Firebase কনসোলে স্থিতি পর্যবেক্ষণ করতে পারেন।

এখন আপনি Firebase Data Connect প্যানেলে Run (Production) এ ক্লিক করতে পারেন, ঠিক যেমনটি আপনি স্থানীয় এমুলেটরগুলির সাথে করেছিলেন, উৎপাদন পরিবেশে ডেটা যোগ করতে।

iOS অ্যাপটি আবার চালানোর আগে, নিশ্চিত করুন যে এটি আপনার প্রকল্পের প্রোডাকশন ইনস্ট্যান্সের সাথে সংযুক্ত আছে:

  1. পণ্য > স্কিম > স্কিম সম্পাদনা করুন... মেনু খুলুন।
  2. রান বিভাগে, -useEmulator YES launch আর্গুমেন্টটি আনচেক করুন।