[SwiftUI Firebase] Firestore Codable

Woozoo·2023년 4월 6일

[SwiftUI Firebase]

목록 보기
7/14

이전까진 하드코딩으로 해줬는데 Firestore에 데이터를 저장했는데 이번엔 다르게 해봅시다


먼저 getUser를 하는과정이랑 createNewUser에서 중복되는 부분이 있으니까 이거 따로 빼줍시다!
DRY


Document를 만들어줄 때 DBUser모델을 파라미터로 받아서 넘겨줄 수 있게 구조를 바꿔줌

그럼 AuthenticationViewModel에서 signIn할 때 새로운 user를 만들고 UserManager에 만든 메소드 사용해주면 되겠죠?

오케이 여기까지하고 실행해서 확인해봅시다


??
프로필이 로드가 안됨..!



아하~!
CodingKey 적용 안해줬음 ㅋㅋ

오잇 코딩키 적용 안하고 encoder를 커스텀하게 만들어서도 가능하네


decoder도 만들어주고!


DBUser init메소드에 auth 결과모델을 받을 수 있게끔 해줘서

저렇게 길었던걸 요렇게 간단하게 보여줄 수 있게 해줬습니다~!!


프리미엄 유저인지 아닌지도 표시해봅시다

isPremium 프로퍼티를 추가해줬습니다!

UserManager에 Update 메소드 추가!


그리고 DBUser에 평범한 Init도 있어야겠다는 걸 알게됨
update할라면 그냥 넘겨주는 게 있어야함

프로필 뷰모델이 가지고 있는 user: DBUser를 가지고
updateUser를 한다음에
Task에서 유저를 update하고, get하게끔 구성해줬음!

캬~ update도 성공!!


지금 해준 updateUser를 DBUser 안에 넣어버릴 수도 있음


요렇게!
옵셔널 값은 바인딩해서 해제해주고


캬~!


다른 방법은 모델의 프로퍼티 자체를 var로 만드는거!


메소드에서도 guard var로 옵셔널 해제해주고!

여기서 더 가봅시다


이제 UserManager의 update메소드를 다시 한번 살펴봅시다

지금 보면 프로퍼티 하나 업데이트 하는데도 DBUser 모델 전체를 서버에 푸시하고 있음
그리고 DBUser모델 전체를 오버라이드 하고 있잖음
이거 피합시다

UserManager의 업데이트 메소드를 updateData로 바꾸고 우리가 원하는 data만 들어가게끔 바꿔줌

profileViewModel의 togglePremiumStatus도 바꿔줌!


디코딩 인코딩 하는 과정에서 프로퍼티이름을 잘못 입력하게 된다면 어떻게 해줘야할까?
is_premium을 user_isPremium으로 바꿔서 썼다던가

DBUser모델에서 encode decode 메소드를 작성해줌(자동완성 가능)

코딩키에 rawValue 원하는 코딩키로 지정해주고

그럼 기존에 있던 encoder decoder 없애줄 수 있음!
모델안에 코딩키가 있게되면 알아서 해줍니다


merge 파라미터 뒤에 붙어 있던 encoder 없애줌!


그리고 업데이트 할 때 스트링 키값 하드코딩하던거
유저모델의 코딩키의 케이스의 rawValue에 접근해서 바로 넘겨줄 수도 있음!

profile
우주형

0개의 댓글