Skip to content

Commit

Permalink
[Refactor/#84] MVVM + Combine 리펙토링 구현 완료
Browse files Browse the repository at this point in the history
  • Loading branch information
HELLOHIDI committed Aug 13, 2024
1 parent ff3d498 commit 6bb7717
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

import Foundation

struct GetUserDataResponseDTO: Codable {
let name: String
let point: Int
public struct GetUserDataResponseDTO: Codable {
public let name: String
public let point: Int

enum CodingKeys: CodingKey {
case name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import DSKit
class MyPageViewModel_Refactor: ObservableObject {

private var container: DIContainer
private var cancelBag = CancelBag()

init(container: DIContainer) {
self.container = container
Expand All @@ -36,37 +37,26 @@ class MyPageViewModel_Refactor: ObservableObject {
switch action {
case .getUserData:
container.services.userService.getUserData()
.sink { _ in

} receiveValue: { [weak self] data in
self?.name = data.data?.name ?? ""
self?.point = data.data?.point ?? 0
}.store(in: cancelBag)

case .revokeUser:
container.services.authService.revokeUser()
.sink { _ in
} receiveValue: { _ in
UserManager.shared.revokeData()
}.store(in: cancelBag)

case .logout:
container.services.authService.logoutUser()
}

//TODO: 네트워크 부분은 의존성 정리한 뒤에 다시 연결해봅시다
func getUserData() {
// let provider = Providers.myPageProvider
// provider.request(target: .getUserData, instance: BaseResponse<GetUserDataResponseDTO>.self) { data in
// self.name = data.data?.name ?? ""
// self.point = data.data?.point ?? 0
// }
}

//TODO: 네트워크 부분은 의존성 정리한 뒤에 다시 연결해봅시다
func revokeUser() {
// let provider = Providers.AuthProvider
// provider.request(target: .revoke, instance: BaseResponse<EmptyResponseDTO>.self) { data in
// UserManager.shared.revokeData()
// }
}

//TODO: 네트워크 부분은 의존성 정리한 뒤에 다시 연결해봅시다
func logoutUser() {
// let provider = Providers.AuthProvider
// provider.request(target: .logout, instance: BaseResponse<EmptyResponseDTO>.self) { data in
// UserManager.shared.clearLogout()
// }
.sink { _ in
} receiveValue: { _ in
UserManager.shared.revokeData()
}.store(in: cancelBag)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// UserAPI.swift
// MyPageFeatureInterface
//
// Created by 류희재 on 8/13/24.
// Copyright © 2024 HMH-iOS. All rights reserved.
//

import Foundation

import Moya
import Networks

enum UserAPI {
case getUserData
}

extension UserAPI: BaseAPI {
public static var apiType: APIType = .user

var headers: [String : String]? {
switch self {
case .getUserData:
return ["Content-Type": "application/json",
"OS": "iOS",
"auth": ""]
}
}

var path: String {
switch self {
case .getUserData:
return "user"
}
}

var method: Moya.Method {
switch self {
case .getUserData:
return .get
}
}

var task: Moya.Task {
switch self {
case .getUserData:
return .requestPlain
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,32 @@

import Foundation

import Combine
import Domain
import Networks

typealias DefaultUserService = BaseService<UserAPI>

import Foundation

public struct BaseResponse<T: Decodable>: Decodable {
public var status: Int
public var message: String?
public var data: T?
}

protocol UserServiceType {
func getUserData()
func getUserPoint()
func getUserData() -> AnyPublisher<BaseResponse<GetUserDataResponseDTO>, Error>
}

class UserService: UserServiceType {
func getUserData() {}
func getUserPoint() {}
extension DefaultUserService: UserServiceType {
func getUserData() -> AnyPublisher<BaseResponse<GetUserDataResponseDTO>, Error> {
return requestObjectWithNetworkErrorInCombine(.getUserData)
}
}

class StubUserService: UserServiceType {
func getUserData() {}
func getUserPoint() {}
func getUserData() -> AnyPublisher<BaseResponse<GetUserDataResponseDTO>, Error> {
Empty().eraseToAnyPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class Services: ServiceType {
var userService: UserServiceType

init() {
self.authService = AuthService()
self.userService = UserService()
self.authService = DefaultAuthService()
self.userService = DefaultUserService()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import Foundation

struct BaseResponse<T: Decodable>: Decodable {
var status: Int
var message: String?
var data: T?
public struct BaseResponse<T: Decodable>: Decodable {
public var status: Int
public var message: String?
public var data: T?
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Moya

import Core

struct APIConstants {
public struct APIConstants {
static let contentType = "Content-Type"
static let applicationJSON = "application/json"
static let auth = "Authorization"
Expand All @@ -31,7 +31,7 @@ struct APIConstants {
static let iOS = "iOS"
}

extension APIConstants {
public extension APIConstants {
static var hasSocialTokenHeader: [String: String] {
return [contentType: applicationJSON,
auth: appleAccessToken]
Expand Down

0 comments on commit 6bb7717

Please sign in to comment.