Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- UIKit
- 면접을 위한 CS 전공 지식 노트 Tree
- 테이블뷰 나누기
- UserDefaults
- ReferceCycle
- NavigationSearchBar
- 롤케이크 자르기
- coremotion
- class struct
- SWIFT
- firebase
- retain cycle
- 프로그래머스
- wil
- CarouselCollectionview
- til
- 면접을 위한 CS전공 지식 노트
- Carousel CollectionView
- TableView
- tableview section별 다른 cell적용
- Input Output
- Value Type Reference Type
- Reference Cycle
- Array vs Linked List
- TableView Section
- 양궁대회
- @escaping
- 자료구조
- 강한 참조 순환
- CoreData
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[협업시 어떻게 해야 할까?],[FirebaseDB CRU 구현하기] 본문
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")
}
}
}
}
}