Skip to content

Commit 91b6a76

Browse files
feat(#35): postTokenReissue API 구현
1 parent 516dd86 commit 91b6a76

File tree

7 files changed

+98
-2
lines changed

7 files changed

+98
-2
lines changed

Where_Are_You.xcodeproj/project.pbxproj

+12
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@
140140
99C6D29E2C90379F009C0CF8 /* APIResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D29D2C90379F009C0CF8 /* APIResponseHandler.swift */; };
141141
99C6D2A02C903EAF009C0CF8 /* ScheduleRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D29F2C903EAF009C0CF8 /* ScheduleRepository.swift */; };
142142
99C6D2A32C904006009C0CF8 /* GetDDayScheduleUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D2A22C904006009C0CF8 /* GetDDayScheduleUseCase.swift */; };
143+
99C921392D34B50E00FC2333 /* TokenReissueResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C921382D34B50E00FC2333 /* TokenReissueResponse.swift */; };
144+
99C9213B2D34B56500FC2333 /* TokenReissueBody.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9213A2D34B56500FC2333 /* TokenReissueBody.swift */; };
145+
99C9213D2D34B72A00FC2333 /* TokenReissueUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9213C2D34B72A00FC2333 /* TokenReissueUseCase.swift */; };
143146
99C9B2292C0197CA008D7CBD /* Member.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B2282C0197CA008D7CBD /* Member.swift */; };
144147
99C9B22C2C019C67008D7CBD /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B22B2C019C67008D7CBD /* LoginView.swift */; };
145148
99C9B2322C01A45C008D7CBD /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B2312C01A45C008D7CBD /* Extensions.swift */; };
@@ -461,6 +464,9 @@
461464
99C6D29D2C90379F009C0CF8 /* APIResponseHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIResponseHandler.swift; sourceTree = "<group>"; };
462465
99C6D29F2C903EAF009C0CF8 /* ScheduleRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScheduleRepository.swift; sourceTree = "<group>"; };
463466
99C6D2A22C904006009C0CF8 /* GetDDayScheduleUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetDDayScheduleUseCase.swift; sourceTree = "<group>"; };
467+
99C921382D34B50E00FC2333 /* TokenReissueResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenReissueResponse.swift; sourceTree = "<group>"; };
468+
99C9213A2D34B56500FC2333 /* TokenReissueBody.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenReissueBody.swift; sourceTree = "<group>"; };
469+
99C9213C2D34B72A00FC2333 /* TokenReissueUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenReissueUseCase.swift; sourceTree = "<group>"; };
464470
99C9B2282C0197CA008D7CBD /* Member.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Member.swift; sourceTree = "<group>"; };
465471
99C9B22B2C019C67008D7CBD /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
466472
99C9B2312C01A45C008D7CBD /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
@@ -790,6 +796,7 @@
790796
992F57D32C5B28E900219C6B /* MemberSearchParameters.swift */,
791797
99EDF5812CE862120008B19A /* MemberSnsBody.swift */,
792798
99EDF5832CE864180008B19A /* DeleteMemberBody.swift */,
799+
99C9213A2D34B56500FC2333 /* TokenReissueBody.swift */,
793800
);
794801
path = Member;
795802
sourceTree = "<group>";
@@ -1071,6 +1078,7 @@
10711078
990F57A22C27F9FE00F6E1AD /* MemberDetailsUseCase.swift */,
10721079
992F57E42C5B623F00219C6B /* CheckEmailUseCase.swift */,
10731080
99EDF58B2CE877BD0008B19A /* DeleteMemberUseCase.swift */,
1081+
99C9213C2D34B72A00FC2333 /* TokenReissueUseCase.swift */,
10741082
);
10751083
path = Member;
10761084
sourceTree = "<group>";
@@ -1350,6 +1358,7 @@
13501358
99D780DF2C60670E005A3F30 /* MemberSearchResponse.swift */,
13511359
99D780E12C606726005A3F30 /* MemberDetailsResponse.swift */,
13521360
99D780E32C606735005A3F30 /* CheckEmailResponse.swift */,
1361+
99C921382D34B50E00FC2333 /* TokenReissueResponse.swift */,
13531362
);
13541363
path = Member;
13551364
sourceTree = "<group>";
@@ -2059,6 +2068,7 @@
20592068
D5BA30922CE745A700958BF5 /* PostFavoriteFriendBody.swift in Sources */,
20602069
D5B79A162C5B83CD004EDDF2 /* (null) in Sources */,
20612070
D534B0FE2D06F0FD004864E0 /* CoordinateService.swift in Sources */,
2071+
99C9213D2D34B72A00FC2333 /* TokenReissueUseCase.swift in Sources */,
20622072
997916922CFEE2BA001DED84 /* FeedDataManager.swift in Sources */,
20632073
9953583D2C00C555005BF799 /* AppDelegate.swift in Sources */,
20642074
99EFC76B2CD0B9560044DFC5 /* PostLocationUseCase.swift in Sources */,
@@ -2130,6 +2140,7 @@
21302140
D55C6C422CF5B8D7005132DC /* NavigationBarModifier.swift in Sources */,
21312141
99EDF5962CE8AD980008B19A /* GetFeedDetailsUseCase.swift in Sources */,
21322142
9910B8502C71E5B5005F7EEE /* ScheduleDropDownView.swift in Sources */,
2143+
99C9213B2D34B56500FC2333 /* TokenReissueBody.swift in Sources */,
21332144
99C68E522C64B96E00DEC1F1 /* EditFeedUseCase.swift in Sources */,
21342145
99C6D29E2C90379F009C0CF8 /* APIResponseHandler.swift in Sources */,
21352146
D54C040A2C6516CB009CC419 /* CreateScheduleBody.swift in Sources */,
@@ -2156,6 +2167,7 @@
21562167
995E3E5E2C508039006B4480 /* MyPageViewController.swift in Sources */,
21572168
D55C6C5C2CF70FF5005132DC /* GetListForReceiverUseCase.swift in Sources */,
21582169
99C6D29C2C903526009C0CF8 /* DDayScheduleResponse.swift in Sources */,
2170+
99C921392D34B50E00FC2333 /* TokenReissueResponse.swift in Sources */,
21592171
99CEAD4C2C5397B1006B3D41 /* DeviceConfig.swift in Sources */,
21602172
99949F5B2C58B85E00AE0177 /* Friend.swift in Sources */,
21612173
D55C6C472CF5D8DC005132DC /* PostFriendRequestBody.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// TokenReissueBody.swift
3+
// Where_Are_You
4+
//
5+
// Created by 오정석 on 13/1/2025.
6+
//
7+
8+
import Foundation
9+
10+
struct TokenReissueBody: ParameterConvertible {
11+
let refreshToken: String
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// TokenReissueResponse.swift
3+
// Where_Are_You
4+
//
5+
// Created by 오정석 on 13/1/2025.
6+
//
7+
8+
import Foundation
9+
10+
struct TokenReissueResponse: Codable {
11+
let accessToken: String
12+
let refreshToken: String
13+
let memberSeq: Int
14+
}

Where_Are_You/Data/Network/Member/MemberAPI.swift

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ enum MemberAPI {
1212
case putProfileImage(memberSeq: Int, images: UIImage)
1313

1414
case postSignUp(request: SignUpBody)
15+
case postTokenReissue(request: TokenReissueBody)
1516
case postMemberSns(request: MemberSnsBody)
1617
case postResetPassword(request: ResetPasswordBody)
1718
case postLogout(memberSeq: Int)
@@ -42,6 +43,8 @@ extension MemberAPI: TargetType {
4243

4344
case .postSignUp:
4445
return "/member"
46+
case .postTokenReissue:
47+
return "/member/tokenReissue"
4548
case .postMemberSns:
4649
return "/member/sns"
4750
case .postResetPassword:
@@ -75,7 +78,7 @@ extension MemberAPI: TargetType {
7578
switch self {
7679
case .putUserName, .putProfileImage:
7780
return .put
78-
case .postSignUp, .postMemberSns, .postResetPassword, .postLogout, .postLogin, .postMemberLink, .postEmailVerify, .postEmailVerifyPassword, .postEmailSend:
81+
case .postSignUp, .postTokenReissue, .postMemberSns, .postResetPassword, .postLogout, .postLogin, .postMemberLink, .postEmailVerify, .postEmailVerifyPassword, .postEmailSend:
7982
return .post
8083
case .getMemberSearch, .getMemberDetails, .getCheckEmail:
8184
return .get
@@ -94,6 +97,8 @@ extension MemberAPI: TargetType {
9497

9598
case .postSignUp(let request):
9699
return .requestParameters(parameters: request.toParameters() ?? [:], encoding: JSONEncoding.default)
100+
case .postTokenReissue(let request):
101+
return .requestParameters(parameters: request.toParameters() ?? [:], encoding: JSONEncoding.default)
97102
case .postMemberSns(request: let request):
98103
return .requestParameters(parameters: request.toParameters() ?? [:], encoding: JSONEncoding.default)
99104
case .postResetPassword(let request):

Where_Are_You/Data/Network/Member/MemberService.swift

+7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ protocol MemberServiceProtocol {
1515
func putProfileImage(images: UIImage, completion: @escaping (Result<Void, Error>) -> Void)
1616

1717
func postSignUp(request: SignUpBody, completion: @escaping (Result<Void, Error>) -> Void)
18+
func postTokenReissue(request: TokenReissueBody, completion: @escaping (Result<GenericResponse<TokenReissueResponse>, Error>) -> Void)
1819
func postMemberSns(request: MemberSnsBody, completion: @escaping (Result<Void, Error>) -> Void)
1920
func postResetPassword(request: ResetPasswordBody, completion: @escaping (Result<Void, Error>) -> Void)
2021
func postLogout(completion: @escaping (Result<Void, Error>) -> Void)
@@ -67,6 +68,12 @@ class MemberService: MemberServiceProtocol {
6768
}
6869
}
6970

71+
func postTokenReissue(request: TokenReissueBody, completion: @escaping (Result<GenericResponse<TokenReissueResponse>, any Error>) -> Void) {
72+
provider.request(.postTokenReissue(request: request)) { result in
73+
APIResponseHandler.handleResponse(result, completion: completion)
74+
}
75+
}
76+
7077
func postMemberSns(request: MemberSnsBody, completion: @escaping (Result<Void, any Error>) -> Void) {
7178
provider.request(.postMemberSns(request: request)) { result in
7279
APIResponseHandler.handleResponse(result, completion: completion)

Where_Are_You/Data/Repositories/MemberRepository.swift

+16-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ protocol MemberRepositoryProtocol {
1212
func putProfileImage(images: UIImage, completion: @escaping (Result<Void, Error>) -> Void)
1313

1414
func postSignUp(request: SignUpBody, completion: @escaping (Result<Void, Error>) -> Void)
15+
func postTokenReissue(request: TokenReissueBody, completion: @escaping (Result<GenericResponse<TokenReissueResponse>, Error>) -> Void)
1516
func postMemberSns(request: MemberSnsBody, completion: @escaping (Result<Void, Error>) -> Void)
1617
func postResetPassword(request: ResetPasswordBody, completion: @escaping (Result<Void, Error>) -> Void)
1718
func postLogout(completion: @escaping (Result<Void, Error>) -> Void)
@@ -45,7 +46,6 @@ class MemberRepository: MemberRepositoryProtocol {
4546
memberService.putProfileImage(images: images) { result in
4647
switch result {
4748
case .success:
48-
// UserDefaultsManager.shared.saveProfileImage(images)
4949
completion(.success(()))
5050
case .failure(let error):
5151
completion(.failure(error))
@@ -59,6 +59,21 @@ class MemberRepository: MemberRepositoryProtocol {
5959
memberService.postSignUp(request: request, completion: completion)
6060
}
6161

62+
func postTokenReissue(request: TokenReissueBody, completion: @escaping (Result<GenericResponse<TokenReissueResponse>, any Error>) -> Void) {
63+
memberService.postTokenReissue(request: request) { result in
64+
switch result {
65+
case .success(let response):
66+
let data = response.data
67+
UserDefaultsManager.shared.saveRefreshToken(data.refreshToken)
68+
UserDefaultsManager.shared.saveMemberSeq(data.memberSeq)
69+
UserDefaultsManager.shared.saveAccessToken(data.accessToken)
70+
completion(.success(response))
71+
case .failure(let error):
72+
completion(.failure(error))
73+
}
74+
}
75+
}
76+
6277
func postMemberSns(request: MemberSnsBody, completion: @escaping (Result<Void, any Error>) -> Void) {
6378
memberService.postMemberSns(request: request, completion: completion)
6479
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
//
2+
// TokenReissueUseCase.swift
3+
// Where_Are_You
4+
//
5+
// Created by 오정석 on 13/1/2025.
6+
//
7+
8+
import Foundation
9+
10+
protocol TokenReissueUseCase {
11+
func execute(request: TokenReissueBody, completion: @escaping (Result<TokenReissueResponse, Error>) -> Void)
12+
}
13+
14+
class TokenReissueUseCaseImpl: TokenReissueUseCase {
15+
private let memberRepository: MemberRepositoryProtocol
16+
17+
init(memberRepository: MemberRepositoryProtocol) {
18+
self.memberRepository = memberRepository
19+
}
20+
21+
func execute(request: TokenReissueBody, completion: @escaping (Result<TokenReissueResponse, any Error>) -> Void) {
22+
memberRepository.postTokenReissue(request: request) { result in
23+
switch result {
24+
case .success(let response):
25+
completion(.success(response.data))
26+
case .failure(let error):
27+
completion(.failure(error))
28+
}
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)