๐Ÿ”ฅํŒŒ์ด์–ด๋ฒ ์ด์Šค ๐Ÿ’Œ๋ฉ”์„ธ์ง€ ์ฃผ๊ณ  ๋ฐ›๊ธฐ

sangheeยท2021๋…„ 8์›” 5์ผ
0

๐Ÿ”ฅFirebase

๋ชฉ๋ก ๋ณด๊ธฐ
2/5
post-thumbnail

๐Ÿ’Œ๋ฉ”์„ธ์ง€ ์ฃผ๊ณ  ๋ฐ›๊ธฐ?

๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ ค๋ฉด ์ผ๋‹จ ๋ฉ”์„ธ์ง€๋ฅผ ๊ตฌ๋ณ„ํ•œ ๊ณ ์œ ํ•œ id๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณด๋‚ธ ์‚ฌ๋žŒ๊ณผ ๋ฐ›๋Š” ์‚ฌ๋žŒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์ฝ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์™€ ์‹ค์ œ ๋ฉ”์„ธ์ง€ ํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ์นดํ†ก์„ ๋ณด๋ฉด ์–ด๋–ค ์ •๋ณด๋“ค์ด ํ•„์š”ํ•œ ์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค!

๋ฉ”์„ธ์ง€ ๋ชจ๋ธ

MVVM ํŒจํ„ด์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. ๋ฉ”์„ธ์ง€ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•œ๋‹ค. ํŒŒ์ด์–ด๋ฒ ์ด์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” @DocumentID์™€ Timestamp๋ฅผ ์ด์šฉํ•ด id์™€ timestamp๋ฅผ ์ •์˜ํ•œ๋‹ค. fromId๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ์˜ id์ด๊ณ , toId๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๋Š” ์‚ฌ๋žŒ์˜ id์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  read๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ฝ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolํƒ€์ž…์ด๊ณ  text๋Š” ๋ฉ”์„ธ์ง€ ํ…์ŠคํŠธ์ด๋‹ค.

import FirebaseFirestoreSwift
import Firebase

struct Message: Identifiable, Decodable {
    @DocumentID var id: String?
    let timestamp: Timestamp
    let fromId: String
    let toId: String
    let read: Bool
    let text: String
}

๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ํŒŒ์ด์–ด์Šคํ† ์–ด์—์„œ messages ์ปฌ๋ ‰์…˜์— ์•„๋ž˜์˜ ๊ฒฝ๋กœ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ €์žฅ์„ ํ•  ๊ณ„ํš์ด๋‹ค. ๋ฐ›๋Š” ์‚ฌ๋žŒ ํด๋”์™€ ๋ณด๋‚ธ ์‚ฌ๋žŒ ํด๋”์—, ์ด ๋‘๋ฒˆ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

  • messages ์ปฌ๋ ‰์…˜ โ†’ ๋ฐ›๋Š” ์‚ฌ๋žŒ id ๋ฌธ์„œ โ†’ ๋ณด๋‚ธ ์‚ฌ๋žŒ id ์ปฌ๋ ‰์…˜ โ†’ ๋ฉ”์„ธ์ง€ id ๋ฌธ์„œ
  • messages ์ปฌ๋ ‰์…˜ โ†’ ๋ณด๋‚ธ ์‚ฌ๋žŒ id ๋ฌธ์„œ โ†’ ๋ฐ›๋Š” ์‚ฌ๋žŒ id ์ปฌ๋ ‰์…˜ โ†’ ๋ฉ”์„ธ์ง€ id ๋ฌธ์„œ

๋ฉ”์„ธ์ง€ ์ปฌ๋ ‰์…˜ ์ €์žฅํ•˜๊ธฐ

๋ฉ”์„ธ์ง€ ์ปฌ๋ ‰์…˜ ๊ฒฝ๋กœ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ค‘๋ณต๋˜๋ฏ€๋กœ Constants ํŒŒ์ผ์— ์ €์žฅํ•˜์˜€๋‹ค.

let COLLECTION_MESSAGES = Firestore.firestore().collection("messages")

๋ฌธ์„œ ๊ฒฝ๋กœ ์ •์˜ํ•˜๊ธฐ

๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜์—์„œ ๋จผ์ € ๋ฌธ์„œ์˜ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•œ๋‹ค. currentUserId๋Š” ํ˜„์žฌ ์œ ์ €์˜ id์ด๊ณ , chatPartnerId๋Š” ์ฑ„ํŒ… ์ƒ๋Œ€์˜ id์ด๋‹ค. ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•œ๋‹ค. chatPartnerId์— .document()๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š”, currentUserRef์— ์ €์žฅ๋˜๋Š” ๋ฌธ์„œ์˜ id๊ฐ’๊ณผ ๋™์ผํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

let currentUserRef = COLLECTION_MESSAGES.document(currentUserId).collection(chatPartnerId).document()
let chatPartnerRef = COLLECTION_MESSAGES.document(chatPartnerId).collection(currentUserId)

๋‘ ๋ฌธ์„œ์˜ id ๋™์ผํ•˜๊ฒŒ ํ•˜๊ธฐ

์ตœ์ข… ๊ฒฝ๋กœ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด, ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ setData() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š”๋ฐ, ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์€ [String: Any]์—ฌ์•ผ ํ•œ๋‹ค. messageId์€ currentUserRef์˜ ๋ฌธ์„œ id๊ฐ’์ด๋‹ค. chatPartnerRef์— currentUserRef์™€ ๋ฌธ์„œ id๊ฐ’์ด ๋™์ผํ•˜๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•œ ์ดํ›„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค.

let data: [String: Any] = ["timestamp": Timestamp(date: Date()),
                           "fromId": currentUserId,
                           "toId": chatPartnerId,
                           "read": false,
                           "text": messageText]

let messageId = currentUserRef.documentID
        
currentUserRef.setData(data)
chatPartnerRef.document(messageId).setData(data)

๋ฉ”์„ธ์ง€ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์„ฑ๊ณต!

๊นƒํ—ˆ๋ธŒ ์ปค๋ฐ‹ ์ฃผ์†Œ

GitHub - Commit

profile
๐Ÿ‘ฉโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€