๊ณ ๋ฏผ๊ณ ๋ฏผ ...
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์งฑํฌ๋ค .. ์งฑํฌ๋๊น ๋ญ๊ฐ ์งฑ๋ง๋ค..๐ซ
์ข์์๊ธฐ๋ฅ, ์ ์ฅ๊ธฐ๋ฅ, ํ๋ก์๊ธฐ๋ฅ, ๊ฒ์๋ฌผ ์ฌ๋ฆฌ๊ธฐ, ์์ ํ๊ธฐ …
์ด ๋ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค๋ฉด ํ์์ ์ผ๋ก update ๋ฉ์๋๊ฐ ํ์ํ๋ค.
์๋ฅผ ๋ค์ด, ์ ์ ๊ฐ ์ข์์๋ฅผ ๋๋ ์๋ ์ ์ ๊ฐ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒ์๋ฌผ ๋ฆฌ์คํธ์
๋ฐฉ๊ธ ์ข์์๋ฅผ ๋๋ฅธ ๊ฒ์๋ฌผ๋ ์ ๋ฐ์ดํธ (append) ํด์ฃผ์ด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ ์ ๋ณด์์ ์ข์์ ์ ๋ฐ์ดํธ, ์ ์ฅ ์ ๋ฐ์ดํธ ๊ฐ๊ฐ์ ๋ฉ์๋๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ผํ ๊น?
์ฝ๊ฐ updateUserLikeMagazine , updateUserBookmarkedMagazine … ์ด๋ ๊ฒ
์ด๋ป๊ฒ ํด์ผ ๋ด๊ฐ ๋ฉ์๋๋ฅผ ๋ง๋ค์์๋ ํ์๋ค์ด ์ฝ๊ฒ ๋ทฐ๋จ์์ ์์๋ฑ ์ฌ์ฉํ ์ ์์์ง ๊ณ ๋ฏผํด๋ณด์๋ค. ๐ค
๋ด๊ฐ ์๊ฐํ ๋ฐฉ์์ ์ด๋ฌํ๋ค.
var likedMagazineID: UserArrayKey
var id: UserStringValue
var myLens, myFilm, postedCommunityID: UserArrayKey
var nickName: UserStringValue
var introduce: UserStringValue
var following: UserArrayKey
var profileImage: UserStringValue
var recentSearch, bookmarkedCommunityID, follower, lastSearched: UserArrayKey
var email: UserStringValue
var postedMagazineID, myCamera, bookmarkedMagazineID, fcmToken: UserArrayKey
var name: UserStringValue
var blocking, blocked: UserArrayKey
์ผ๋จ ์ฐ๋ฆฌ์ UserDTO ๋ฅผ ๋ณด๋ฉด ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ด String ์๋๋ฉด Array ์ด๋ค.
๊ทธ๋์ String ํ์ ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ (์๋ฅผ ๋ค์ด ์ ์ ์ id , ํน์ ๋๋ค์ .. )
String ํ์ ์ ์ํ ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ
Array ํ์ ์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ (ex. ์ ์ ๊ฐ ์ฌ๋ฆฐ ๋ฉ๊ฑฐ์ง ID, ์ ์ฅํ ๋ฉ๊ฑฐ์ง ID … )
Array ํ์ ์ ์ํ ์ ๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ๋๋ฉด ?
UserRouter ์์
[endPoint]
case let .patchArr(_,_, docID):
return "/" + "\(queryItemString)" + "/" + "\(docID)"
case let .patchString(_,_, docID):
return "/" + "\(queryItemString)" + "/" + "\(docID)"
[parameter]
case let .patchArr(type, _, _):
let params: [URLQueryItem] = [URLQueryItem(name: "updateMask.fieldPaths", value: type)]
return params
case let .patchString(type, _, _):
let params: [URLQueryItem] = [URLQueryItem(name: "updateMask.fieldPaths", value: type)]
return params
[data]
case let .patchArr(type, arr, _):
return UserQuery.updateUserArray(type: type, arr: arr)
case let .patchString(type, string, _):
return UserQuery.updateUserString(type: type, string: string)
structuredQuery ์์
static func updateUserString(type: String, string: String) -> Data? {
let query = """
{
"fields": {
"\(type)": {
"stringValue": "\(string)"
}
}
}
""".data(using: .utf8)
return query
}
์ด๋ฐ์์ผ๋ก type ๋ง ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด์ฃผ๋ฉด,
๋ชจ๋ ์ ๋ฐ์ดํธ๋ฅผ type์ผ๋ก ๋ถ๋ฅํด์ ํน์ ํ๋กํผํฐ๋ง ์ ๋ฐ์ดํธ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ํด์ ์ง์ง ๋ง์ ์ผ์ด์ค์ ๋ํ Update ๋ฉ์๋๋ฅผ ๋จ 2๊ฐ๋ก ์ค์ผ ์ ์์๋ค.
// MARK: - ์ ์ ์ ๋ณด ์
๋ฐ์ดํธ ๋ฉ์๋ (string ๋ฐฐ์ด ํ์
๊ฐ ์
๋ฐ์ดํธํ ๋ ์ฌ์ฉ )
/// ์ข์์๋๋ฅธ ๊ฒ์๊ธ , ์ ์ฅํ ๊ฒ์๊ธ, ์ ์ฅํ ์ปค๋ฎค๋ํฐ๊ธ, ๋ด ์ฅ๋น์ ๋ณด(์นด๋ฉ๋ผ, ๋ ์ฆ, ํ๋ฆ), ๋ด๊ฐ ์ฌ๋ฆฐ ๋ฉ๊ฑฐ์ง, ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ , ํ๋ก์, ํ๋ก์ ์
๋ฐ์ดํธ ํ ๋ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
/// ex) type: likedMagazineId , string: ["1234", "45346346", "56456456"], docID: ํ์ฌ๋ก๊ทธ์ธํ์ ์ ์์ด๋ -> ์ ์ ๊ฐ ์ข์์๋๋ฅธ ๋ฉ๊ฑฐ์ง ์์ด๋ ๋ฆฌ์คํธ ๋ฐฐ์ด์ ["1234", "45346346", "56456456"] ๋ก ๋ฐ๊พธ๊ฒ ๋ค. !!!
func updateCurrentUserArray(type: String, arr: [String], docID: String){
UserService.updateCurrentUserArray(type: type, arr: arr, docID: docID)
.receive(on: DispatchQueue.main)
.sink { (completion: Subscribers.Completion<Error>) in
} receiveValue: { (data: UserDocument) in
self.fetchCurrentUser(userID: Auth.auth().currentUser?.uid ?? "")
self.fetchUser(nextPageToken: "")
self.updateUsersArraySuccess.send()
}.store(in: &subscription)
}
// MARK: - ์ ์ ์ ๋ณด ์
๋ฐ์ดํธ ๋ฉ์๋ (string ํ์
๊ฐ ์
๋ฐ์ดํธํ ๋ ์ฌ์ฉ)
/// ex) type: id , string: "1234", docID: ํ์ฌ๋ก๊ทธ์ธํ์ ์ ์์ด๋ -> ์ ์ ์ id ๋ฅผ 1234๋ก ๋ฐ๊พธ๊ฒ ๋!!!
func updateCurrentUserString(type: String, string: String, docID: String) {
UserService.updateCurrentUserString(type: type, string: string, docID: docID)
.receive(on: DispatchQueue.main)
.sink { (completion: Subscribers.Completion<Error>) in
} receiveValue: { (data: UserDocument) in
self.updateUsersStringSuccess.send()
}.store(in: &subscription)
}
์์ updateCurrentUserString ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ํ๋ผ๋ฏธํฐ๋ก type, string, docID ๋ฅผ ๋ฐ๊ณ ์๋ค.
๊ทธ๋์ ๋ทฐ์์ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ type์๋ ์ ๋ฐ์ดํธ ํ๋ ค๋ ํน์ ํ๋กํผํฐ ์ด๋ฆ์ ๋ฃ๊ณ , string ์ ์ ๋ฐ์ดํธ ํ๋ ค๋ ๊ฐ, ๊ทธ๋ฆฌ๊ณ docID๋ ํน์ ์ ์ ์ ์ ๊ทผํ๊ธฐ ์ํ docID๋ฅผ ๋ฃ์ด์ฃผ์ด์
userVM.updateCurrentUserArray(type: "nickName", string: "wonder", docID: "123123")
์ด๋ฐ์์ผ๋ก ๋ถ๋ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค!
๊ทธ๋ผ ์ด์ ์ ์ ์ ๋๋ค์์ด wonder ๋ก ์ ๋ฐ์ดํธ ๋๋๊ฑฐ์ฃ ! ใ ใ
๋๋์
์ ์ด ๋ฐฉ์์ด ๊ณผ์ฐ ์ข์ ์ฝ๋์ธ๊ฐ .. ํ๋กํผํฐ ํ์ ์ผ๋ก ๋ถ๋ฅํด์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ด
ํท๊ฐ๋ฆฌ์ง๋ ์์๊น, ๋๋ฌด ์์๋ณด๊ธฐ ํ๋ค์ง๋ ์์๊น ๋ง์ด ์๊ฐํด๋ดค๋๋ฐ,
์ฌ์ฉํ๋๋ฐ ํ์๋ค๋ ๋ฐ๋ก ๋๋ฌด ์ ์ ์ฉํด์ ์ฌ์ฉํด์ฃผ์๊ณ , ์ค๋ณต๋๋ update ๋ฉ์๋๋ค์ ์ค์ผ ์ ์์ด์
๋ด๊ฐ ์๊ฐํ์๋ ์ฐ๊ธฐ ํธํ ์ฝ๋๋ ๋ง๋๊ฒ ๊ฐ๋ค.
์ผ๋จ ์ฐ๋ฆฌ ํ๋ก์ ํธ๊ฐ ๋๋ ์ปค์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
๋ ํ๋ก์ ํธํ๋ฉด์ ์๊ฐ์ด ๋๋ฌด ์์์๋๋ผ ๋ถ์ ํ์ ์ค์์ฑ์ ๋ง์ด ๋๊ผ์๋์๋๋ฐ,
์ด๋ ViewModel ์ชฝ์ ์์ ํ๋ฉด์ ์ด๋ป๊ฒํ๋ฉด ViewModel์ ์ฌ์ฉํ๋ View๋ฅผ ๋ง์ง๊ณ ์๋ ํ์๋ค์ด “ViewModel ์ํฉ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ผ๋จ ์ด๊ฑฐ ๊ฐ๋ค์ฐ๋ฉด ๋๋๊ฑฐ์ง!?” ์ด๊ฒ ๊ฐ๋ฅํ ์ง ๊ณ ๋ฏผํด๋ณธ ๊ฒฐ๊ณผ์ด๋ค.
๋ ๋ด๊ฐ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํด๋์์์ธ์ง ๋ชฐ๋ผ๋ ํ์๋คํํ ์ด๊ฑฐ ์ด๋ด๋์ฐ๊ณ ์ด๋ ๊ฒ ์ฐ๋ฉด๋ผ! ๋ผ๊ณ
์ค๋ช ๋ง ํด์ฃผ์๋๋ฐ ๋ฐ๋ก ์ฝ๊ฒ ์ฝ๋์ ์ ์ฉํด์ค์ ๋ ๋ฟ๋ฏํ๋ค … ํท ๐ค
'ํ๋ก์ ํธ ๐ ๏ธ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Router๊ฐ ๋ญํ๋ ์น๊ตฌ์ผ? (0) | 2023.06.10 |
|---|---|
| URLSession + Combine ์กฐํฉ์ผ๋ก ๋คํธ์ํฌ ๋ ์ด์ด ๋ง๋ค๊ธฐ (0) | 2023.06.10 |
| Combine(3): Operator (0) | 2023.06.10 |
| Combine(2): Subject (0) | 2023.06.10 |
| Combine(1): Publisher, Subscriber! (0) | 2023.06.10 |