[Flutter] Flutter 앱에서 도서정보 업데이트 화면 구현하기 : AdminScreen 클래스

StudipU·2024년 3월 10일
0

이번에는 관리자 화면의 코드를 자세히 살펴보겠습니다. 이 코드는 Flutter로 작성되었으며, 관리자가 애플리케이션의 도서 정보를 업데이트하고 카테고리를 관리하는 화면을 구성합니다.

AdminScreen 클래스 소개 ✨

이 화면은 애플리케이션의 관리자 기능을 제공합니다. 여기에서는 Kakao APIAladin API, Firestore를 사용하여 도서 정보를 업데이트하고 카테고리를 분류할 수 있습니다.

주요 기능과 코드 분석 🎭

1. 알라딘 도서 정보 업데이트 기능

아래 코드는 알라딘 업데이트 버튼을 클릭했을 때 동작하는 코드입니다. Aladin API를 사용하여 도서 정보를 가져와 Firestore에 저장합니다. 사용자가 해당 기능을 선택하면 Firestore에서 JinJoongBookList collection의 모든 도서 목록을 가져와 각 도서의 정보를 Firestore의 AladinBooks collection에 저장합니다.

onTap: () async {
  // Firestore에서 도서 목록을 가져옵니다.
  QuerySnapshot<Map<String, dynamic>> querySnapshot =
      await FirebaseFirestore.instance
          .collection('JinJoongBookList')
          .get();

  // 도서 목록을 분기별로 저장합니다.
  Map<String, Map<String, dynamic>> quarterlyBookList = {};
  querySnapshot.docs.forEach((doc) {
    String quarter = doc.id;
    quarterlyBookList[quarter] = doc.data();
  });

  // 분기별 도서 목록을 순회하며 각 도서 정보를 업데이트합니다.
  for (String year in quarterlyBookList.keys) {
    for (String qt in quarterlyBookList[year]!.keys) {
      List<dynamic> qtBooks = quarterlyBookList[year]![qt];

      try {
        // Kakao API를 사용하여 도서 정보를 업데이트합니다.
        await getAladinBookData(qtBooks);
      } catch (e) {
        print("Kakao API Error in $qtBooks");
      }
    }
  }
},

2. 알라딘 도서 정보 업데이트 기능

도서 아래 코드는 카카오 업데이트 버튼을 클릭했을 때 동작하는 코드입니다. Kakao API를 사용하여 도서 정보를 가져와 Firestore에 저장합니다. 사용자가 해당 기능을 선택하면 Firestore에서 JinJoongBookList collection의 모든 도서 목록을 가져와 각 도서의 정보를 Firestore의 bookInfos collection에 저장합니다.

onTap: () async {
  // Firestore에서 도서 목록을 가져옵니다.
  QuerySnapshot<Map<String, dynamic>> querySnapshot =
      await FirebaseFirestore.instance
          .collection('JinJoongBookList')
          .get();

  // 도서 목록을 분기별로 저장합니다.
  Map<String, Map<String, dynamic>> quarterlyBookList = {};
  querySnapshot.docs.forEach((doc) {
    String quarter = doc.id;
    quarterlyBookList[quarter] = doc.data();
  });

  // 분기별 도서 목록을 순회하며 각 도서 정보를 업데이트합니다.
  for (String year in quarterlyBookList.keys) {
    for (String qt in quarterlyBookList[year]!.keys) {
      List<dynamic> qtBooks = quarterlyBookList[year]![qt];

      try {
        // Kakao API를 사용하여 도서 정보를 업데이트합니다.
        await getBookData(qtBooks);
      } catch (e) {
        print("Kakao API Error in $qtBooks");
      }
    }
  }
},

3. 카테고리 분류 기능

카테고리 분류 기능은 Firestore에 저장된 도서 정보를 기반으로 도서를 카테고리에 따라 분류합니다. 사용자가 해당 기능을 선택하면 Firestore에서 JinJoongBookList collection의 모든 도서 목록을 가져와 각 도서의 정보를 Firestore의 category collection에 저장합니다.

onTap: () async {
  // Firestore에서 도서 목록을 가져옵니다.
  QuerySnapshot<Map<String, dynamic>> querySnapshot =
      await FirebaseFirestore.instance
          .collection('JinJoongBookList')
          .get();

  // 도서 목록을 분기별로 저장합니다.
  Map<String, Map<String, dynamic>> quarterlyBookList = {};
  querySnapshot.docs.forEach((doc) {
    String quarter = doc.id;
    quarterlyBookList[quarter] = doc.data();
  });

  // 분기별 도서 목록을 순회하며 각 도서의 카테고리를 분류합니다.
  for (String year in quarterlyBookList.keys) {
    for (String qt in quarterlyBookList[year]!.keys) {
      List<dynamic> qtBooks = quarterlyBookList[year]![qt];

      // 각 도서의 카테고리를 분류합니다.
      for (var element in qtBooks) {
        DocumentSnapshot<Map<String, dynamic>> docSnapshot = await FirebaseFirestore
            .instance
            .collection('aladinBooks')
            .doc(element)
            .get();

        // 도서의 카테고리 정보를 가져옵니다.
        String? category = docSnapshot.data()?["categoryName"];
        if (category != null) {
          // 카테고리 정보를 가공하여 Firestore의 'category' 컬렉션에 저장합니다.
          // ...
        }
      }
    }
  }
},

이와 같이 관리자 화면은 애플리케이션의 도서 정보를 관리하고 업데이트하는 중요한 역할을 합니다. 관리자는 이 화면을 통해 도서 정보를 최신 상태로 유지하고 카테고리를 체계적으로 관리할 수 있습니다.

profile
컴공 대학생이 군대에서 작성하는 앱 개발 블로그

0개의 댓글