44//
55// Created by 김민호 on 7/11/24.
66
7+ import Foundation
8+
79import ComposableArchitecture
810import CoreKit
911import Util
@@ -18,6 +20,7 @@ public struct SplashFeature {
1820 /// - State
1921 @ObservableState
2022 public struct State : Equatable {
23+ @Shared ( . appStorage( " isNeedSessionDeleted " ) ) var isNeedSessionDeleted : Bool = true
2124 public init ( ) { }
2225 }
2326 /// - Action
@@ -32,7 +35,9 @@ public struct SplashFeature {
3235 public enum View : Equatable {
3336 case onAppear
3437 }
35- public enum InnerAction : Equatable { case doNothing }
38+ public enum InnerAction : Equatable {
39+ case 키_제거
40+ }
3641 public enum AsyncAction : Equatable { case doNothing }
3742 public enum ScopeAction : Equatable { case doNothing }
3843 public enum DelegateAction : Equatable {
@@ -73,9 +78,48 @@ private extension SplashFeature {
7378 func handleViewAction( _ action: Action . View , state: inout State ) -> Effect < Action > {
7479 switch action {
7580 case . onAppear:
76- return . run { send in
81+ return . run { [ isNeedSessionDeleted = state . isNeedSessionDeleted ] send in
7782 try await self . clock. sleep ( for: . milliseconds( 2000 ) )
78-
83+ if isNeedSessionDeleted {
84+ guard let platform = userDefaults. stringKey ( . authPlatform) else {
85+ print ( " platform이 없어서 벗어남 " )
86+ await send ( . inner( . 키_제거) )
87+ await send ( . delegate( . loginNeeded) )
88+ return
89+ }
90+ // 🚨 이거 구글유저도 분기문 잘 넘어가나 체크해줘!
91+ if platform == " 애플 " {
92+ guard let authCode = userDefaults. stringKey ( . authCode) else {
93+ print ( " authCode가 없어서 벗어남 " )
94+ await send ( . inner( . 키_제거) )
95+ await send ( . delegate( . loginNeeded) )
96+ return
97+ }
98+
99+ guard let jwt = userDefaults. stringKey ( . jwt) else {
100+ print ( " jwt가 없어서 벗어남 " )
101+ await send ( . inner( . 키_제거) )
102+ await send ( . delegate( . loginNeeded) )
103+ return
104+ }
105+
106+ guard let serverRefreshToken = keychain. read ( . serverRefresh) else {
107+ await send ( . inner( . 키_제거) )
108+ await send ( . delegate( . loginNeeded) )
109+ return
110+ }
111+
112+ try await authClient. appleRevoke (
113+ serverRefreshToken,
114+ AppleTokenRequest (
115+ authCode: authCode,
116+ jwt: jwt
117+ )
118+ )
119+ await send ( . inner( . 키_제거) )
120+ await send ( . delegate( . loginNeeded) )
121+ }
122+ }
79123 /// 🚨 Error Case [1]: 로그인 했던 플랫폼 정보가 없을 때
80124 guard let _ = userDefaults. stringKey ( . authPlatform) else {
81125 await send ( . delegate( . loginNeeded) )
@@ -103,7 +147,18 @@ private extension SplashFeature {
103147 }
104148 /// - Inner Effect
105149 func handleInnerAction( _ action: Action . InnerAction , state: inout State ) -> Effect < Action > {
106- return . none
150+ switch action {
151+ case . 키_제거:
152+ keychain. delete ( . accessToken)
153+ keychain. delete ( . refreshToken)
154+ keychain. delete ( . serverRefresh)
155+ return . run { [ isNeedSessionDeleted = state. $isNeedSessionDeleted] send in
156+ await userDefaults. removeString ( . authCode)
157+ await userDefaults. removeString ( . jwt)
158+ await userDefaults. removeString ( . authPlatform)
159+ await isNeedSessionDeleted. withLock { $0 = false }
160+ }
161+ }
107162 }
108163 /// - Async Effect
109164 func handleAsyncAction( _ action: Action . AsyncAction , state: inout State ) -> Effect < Action > {
0 commit comments