@@ -2,12 +2,15 @@ import Foundation
22
33protocol UserServicing {
44 func fetchMyUser( ) async throws -> UserModel
5+ func fetchInitSettings( ) async throws -> UserInitSettingsResponse
6+ func submitPolicyAgreement( agreements: [ PolicyAgreementItem ] ) async throws
57 func fetchUserStatics( userId: Int ) async throws -> UserStaticsModel
68 func searchUsers( searchCond: String ? , page: Int , size: Int ) async throws -> UserSearchResponse
79 func deleteMyProfileImage( ) async throws -> UserModel
810 func issuePresignedURL( ) async throws -> PresignedURLResponse
911 func uploadImageToPresignedURL( imageData: Data , presignedURL: URL ) async throws
1012 func updateMyProfileImage( request: UpdateMyProfileImageRequest ) async throws -> UserModel
13+ func updateMyUsername( username: String ) async throws -> UserModel
1114 func updateMyTag( tag: String ) async throws -> UserModel
1215}
1316
@@ -70,6 +73,47 @@ struct UserService: UserServicing {
7073 }
7174 }
7275
76+ func fetchInitSettings( ) async throws -> UserInitSettingsResponse {
77+ do {
78+ let request = APIRequest (
79+ path: " /users/init-settings " ,
80+ method: . get,
81+ queryItems: [
82+ URLQueryItem ( name: " clientVersion " , value: Self . clientVersion) ,
83+ URLQueryItem ( name: " clientType " , value: Self . clientType)
84+ ] ,
85+ requiresAuthorization: true
86+ )
87+ return try await apiClient. request ( request, responseType: UserInitSettingsResponse . self)
88+ } catch {
89+ throw mapError ( error)
90+ }
91+ }
92+
93+ func submitPolicyAgreement( agreements: [ PolicyAgreementItem ] ) async throws {
94+ let requestBody : Data
95+ do {
96+ requestBody = try JSONEncoder ( ) . encode ( PolicyAgreementRequest ( agreements: agreements) )
97+ } catch {
98+ throw UserServiceError . requestEncodingFailed
99+ }
100+
101+ do {
102+ var request = APIRequest (
103+ path: " /users/policy-agreement " ,
104+ method: . post,
105+ requiresAuthorization: true ,
106+ body: requestBody
107+ )
108+ request. headers [ " Accept " ] = " application/json "
109+ request. headers [ " Content-Type " ] = " application/json "
110+ try await apiClient. request ( request)
111+ } catch {
112+ if isRequestCancelled ( error) { throw error }
113+ throw mapError ( error)
114+ }
115+ }
116+
73117 func fetchUserStatics( userId: Int ) async throws -> UserStaticsModel {
74118 do {
75119 let request = APIRequest (
@@ -221,6 +265,31 @@ struct UserService: UserServicing {
221265 }
222266 }
223267
268+ func updateMyUsername( username: String ) async throws -> UserModel {
269+ let requestBody : Data
270+ do {
271+ requestBody = try JSONEncoder ( ) . encode ( UpdateMyUsernameRequest ( username: username) )
272+ } catch {
273+ throw UserServiceError . requestEncodingFailed
274+ }
275+
276+ do {
277+ var request = APIRequest (
278+ path: " /users/my/names " ,
279+ method: . patch,
280+ requiresAuthorization: true ,
281+ body: requestBody
282+ )
283+ request. headers [ " Accept " ] = " application/json "
284+ request. headers [ " Content-Type " ] = " application/json "
285+ let response = try await apiClient. request ( request, responseType: UserResponseDTO . self)
286+ return response. toModel ( )
287+ } catch {
288+ if isRequestCancelled ( error) { throw error }
289+ throw mapError ( error)
290+ }
291+ }
292+
224293 private func mapError( _ error: Error ) -> UserServiceError {
225294 if let userServiceError = error as? UserServiceError {
226295 return userServiceError
@@ -299,6 +368,17 @@ struct UserService: UserServicing {
299368 let nsError = error as NSError
300369 return nsError. domain == NSURLErrorDomain && nsError. code == NSURLErrorCancelled
301370 }
371+
372+ private static var clientVersion : String {
373+ let shortVersion = Bundle . main. object ( forInfoDictionaryKey: " CFBundleShortVersionString " ) as? String
374+ let buildVersion = Bundle . main. object ( forInfoDictionaryKey: " CFBundleVersion " ) as? String
375+ let resolved = ( shortVersion? . trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty == false
376+ ? shortVersion
377+ : buildVersion) ?? " 0.0.0 "
378+ return resolved
379+ }
380+
381+ private static let clientType = " IOS "
302382}
303383
304384private struct UserServiceErrorResponse : Decodable {
0 commit comments