개발하는 동글 :]

[TIL],[협업시 어떻게 해야 할까?],[FirebaseDB CRU 구현하기] 본문

카테고리 없음

[TIL],[협업시 어떻게 해야 할까?],[FirebaseDB CRU 구현하기]

동글하다 2023. 10. 18. 23:08

1. 오늘의 회고

오늘 팀회의로 이슈 관리를 어떻게 할 것인가, 코드리뷰를 어떠한 방식으로 진행할 것인가,에 대한 방안을 회의하였다. 다양한 의견들이 있었고 나의 의견은 이슈관리는 깃허브의 이슈를 사용하는 것과 코드리뷰는 단순히 매일 밤 회의에서 화면 공유를 하는 방식으로 하자고 제안하였다. 그 후 회의의 결과로는 이슈관리는 깃허브 이슈관리를 사용, 코드리뷰는 매일 5시까지 pr을 올린 후 회의시간 전까지 각자 질문 및 코드를 설명하는 것으로 결정하였다. 이 회의를 통해 느끼게 된 것은 어떻게 협업을 할 것인가를 이유 없이 선정하게 된다면 팀원 모두가 힘든 시간을 가지게 된다. 만약 코드리뷰를 매일 밤 회의에서 진행하였다면 회의가 길어지고 팀원들 모두가 지치고 부담을 가지고 작업을 할 것 같다. 이렇듯 이유 없는 선택은 좋지 않은 결과를 가져온다는 것을 체감하였다. 하지만 반대로 팀원들이 있었기에 보다 좋은 방안으로 코드리뷰를 할 수 있었던 것을 생각해 보면 이게 협업이 가져다주는 장점이 아닐까 생각한다. 의견에 이유를 요구하고 그것이 올바른지 따져보는 시간을 가질 수 있기에 모두가 정확한 방향으로 나아갈 수 있는 게 아닐까?

2. 오늘의 작업

오늘은 프로젝트에 사용되는 Firebase의 manager를 구현하였다. 아직은 어떠한 방식으로 데이터가 저장되고 요청할지 모르기에 수정하기 쉬우며, 간단한 테스트는 할 수 있도록 manager를 구현해 보았다.
//
//  FirebaseManager.swift
//  FinalTodo
//
//  Created by SeoJunYoung on 10/17/23.
//
import FirebaseCore
import FirebaseFirestore
import FirebaseFirestoreSwift
import FirebaseDatabase

struct FirebaseManager {
    // TODO: - CRUD 
    let db = Firestore.firestore()
    let users = "Users"
    
    func updateUserData(email: String, completion: @escaping () -> Void) {
        
        let userData = Users(
            id: email,
            nickName: "testNick2",
            folders: [Folders(id: "hihi", name: "hihi", color: "yellow")], 
            memoDatas: [
                Memos(Fileid: "test1", title: "test1", date: "tset1", content: "test1", isPin: false, locationNotifySetting: "test1", timeNotifySetting: "test1"),
                Memos(Fileid: "test", title: "test", date: "tset", content: "test", isPin: false, locationNotifySetting: "test", timeNotifySetting: "test")
            ],
            rewardPoint: 0,
            settingValue: SettingValues(color: "yellow", font: "testFont")
        )
        
        do {
            let data = try Firestore.Encoder().encode(userData)
            db.collection(users).document(email).setData(data)
        } catch {
            print("@@@ Fail")
        }
    }
    
    func fetchUserData(email: String, completion: @escaping (Users) -> Void) {
        db.collection(users).document(email).getDocument { data, error in
            if error != nil {
                print("[FirebaseManager][\(#function)]: \(String(describing: error?.localizedDescription))")
            } else {
                guard let data = data?.data() else { return }
                do {
                    var safeData = try Firestore.Decoder().decode(Users.self, from: data)
                    completion(safeData)
                } catch {
                    print("[FirebaseManager][\(#function)]: DecodingFail")
                }
            }
        }
    }
}