ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Flutter] ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค(Firestore์‚ฌ์šฉ)
    Flutter ํ…Œํฌ 2022. 7. 22. 02:14
    • ๊ตฌํ˜„ ๋‚ด์šฉ
    • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

    ๊ตฌํ˜„ ๋‚ด์šฉ

    ๊ฒŒ์‹œ๊ธ€ ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

    1. ๊ธ€ ์ž‘์„ฑ

    2. ๊ธ€ ์ˆ˜์ •

    3. ๊ธ€ ์‚ญ์ œ

    4. ์ข‹์•„์š” ๋ฐ ์‹ซ์–ด์š”

     


    ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

    ๊ธ€ ์ž‘์„ฑ

      // docId๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ : UID๋ฅผ docId๋กœ ์“ฐ๊ฑฐ๋‚˜ ๋ฌธ์„œID๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ๊ด€๋ฆฌํ•˜๊ณ  ์‹๋ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
      setDocId() {
        FirebaseFirestore.instance
            .collection('collection name')
            .doc('docId')
            .set(DataToJson()
            .toJsonMethod());
      }
    
      // docId๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
      addPostToCollection() {
        FirebaseFirestore.instance
            .collection('collection name')
            .add(DataToJson()
            .toJsonMethod());
      }
      
      // DataToJson()ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” set๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ผ์ผ์ด ๊ฐ’๋“ค์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๊ณ ์ •๋œ ๊ฐ’๋“ค์€ ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    class DataToJson {
      Map<String, dynamic> toJsonMethod() => {
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
      };
    }

     

    ๊ธ€ ์ˆ˜์ •

      // ์—…๋ฐ์ดํŠธ ๋ฉ”์„œ๋“œ
      updatePostMethod() {
        FirebaseFirestore.instance
            .collection('collection name')
            .doc('docId')
            .update(DataToJson()
            .toJsonMethod());
      }
      
      // DataToJson()ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” set๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ผ์ผ์ด ๊ฐ’๋“ค์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๊ณ ์ •๋œ ๊ฐ’๋“ค์€ ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    class DataToJson {
      Map<String, dynamic> toJsonMethod() => {
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
      };
    }

     

    ๊ธ€ ์‚ญ์ œ

      // ์‚ญ์ œ ๋ฉ”์„œ๋“œ
      deletePostMethod() {
        FirebaseFirestore.instance
            .collection('collection name')
            .doc('docId')
            .delete();
      }
      
      // DataToJson()ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” set๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ผ์ผ์ด ๊ฐ’๋“ค์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๊ณ ์ •๋œ ๊ฐ’๋“ค์€ ๋ฏธ๋ฆฌ ์ฑ„์›Œ๋‘๊ณ  ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    class DataToJson {
      Map<String, dynamic> toJsonMethod() => {
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
        'firestore์˜ ๋ฌธ์„œ์— ์ถ”๊ฐ€๋  ํ•„๋“œ ์ด๋ฆ„': '๊ฐ’',
      };
    }

     

    ์ข‹์•„์š” ๋ฐ ์‹ซ์–ด์š”

    // ์ข‹์•„์š”๊ฐ™์€ ๊ธฐ๋Šฅ์—๋Š” Transaction์ด๋ผ๋Š” ์˜ค๋ฅ˜๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค, ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅผ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์˜ค๋ฅ˜๋ฅผ ๋ง‰์•„์ฃผ๋Š”๊ฒŒ Transaction์ด๋‹ค.
    // Transaction์€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์“ธ๋ชจ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    void runTransaction() {
      // ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์€ ๋ฌธ์„œ
      DocumentReference doc =
      FirebaseFirestore.instance.collection('collectionName').doc('docId');
    
      FirebaseFirestore.instance.runTransaction((transaction) async {
        DocumentSnapshot snapshot = await transaction.get(doc);
        if (!snapshot.exists) {
          throw Exception('Does not exist');
        }
        var postMap = snapshot.data()! as Map;
        // firestore์— ์ข‹์•„์š” ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ํ•„๋“œ์˜ ์ด๋ฆ„์„ likeNum์ด๋ผ๊ณ  ๊ฐ€์ •
        // ์ข‹์•„์š” ์ˆซ์ž๋ฅผ + 1
        int postLikeNum = postMap['likeNum'] + 1;
        transaction.update(doc, {'likeNum': postLikeNum});
      });
    }

    ๋Œ“๊ธ€

Designed by Tistory.