Skip to content

Commit

Permalink
Merge pull request #151 from boostcampwm-2022/feature/settings-reposi…
Browse files Browse the repository at this point in the history
…tory

SettingsRepository 및 닉네임 변경 구현
  • Loading branch information
radiantchoi authored Dec 2, 2022
2 parents 8e29fea + fb11f3d commit 344967e
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 48 deletions.
16 changes: 10 additions & 6 deletions Segno/Segno.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,12 @@
7940FB2F292E063100276EFC /* DiaryDetailDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7940FB2E292E063100276EFC /* DiaryDetailDTO.swift */; };
7940FB31292E065100276EFC /* DiaryDetailEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7940FB30292E065100276EFC /* DiaryDetailEndpoint.swift */; };
7940FB33292E065F00276EFC /* DiaryDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7940FB32292E065F00276EFC /* DiaryDetailUseCase.swift */; };
9825F41B29377875005F2163 /* ChangeUserNameUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9825F41A29377875005F2163 /* ChangeUserNameUseCase.swift */; };
9825F41B29377875005F2163 /* ChangeNicknameUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9825F41A29377875005F2163 /* ChangeNicknameUseCase.swift */; };
9825F41D29377ACF005F2163 /* SettingsRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9825F41C29377ACF005F2163 /* SettingsRepository.swift */; };
982A2A472924AE74006F6ACD /* UserDefaultsKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982A2A462924AE74006F6ACD /* UserDefaultsKey.swift */; };
982A3699292C905300FDC6CF /* DiaryDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982A3698292C905300FDC6CF /* DiaryDetailViewController.swift */; };
982B3B7F292E68FB0077A44B /* DiaryDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982B3B7E292E68FB0077A44B /* DiaryDetailViewModel.swift */; };
9838443E29387C0A00BCCEE2 /* ChangeNicknameEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9838443D29387C0A00BCCEE2 /* ChangeNicknameEndpoint.swift */; };
983AE9D22934F041006547BD /* NicknameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983AE9D12934F041006547BD /* NicknameCell.swift */; };
983AE9D4293513AD006547BD /* SettingsCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983AE9D3293513AD006547BD /* SettingsCellModel.swift */; };
983AE9D6293514E8006547BD /* SettingsActionSheetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983AE9D5293514E8006547BD /* SettingsActionSheetCell.swift */; };
Expand Down Expand Up @@ -150,11 +151,12 @@
7940FB2E292E063100276EFC /* DiaryDetailDTO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiaryDetailDTO.swift; sourceTree = "<group>"; };
7940FB30292E065100276EFC /* DiaryDetailEndpoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiaryDetailEndpoint.swift; sourceTree = "<group>"; };
7940FB32292E065F00276EFC /* DiaryDetailUseCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiaryDetailUseCase.swift; sourceTree = "<group>"; };
9825F41A29377875005F2163 /* ChangeUserNameUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeUserNameUseCase.swift; sourceTree = "<group>"; };
9825F41A29377875005F2163 /* ChangeNicknameUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeNicknameUseCase.swift; sourceTree = "<group>"; };
9825F41C29377ACF005F2163 /* SettingsRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsRepository.swift; sourceTree = "<group>"; };
982A2A462924AE74006F6ACD /* UserDefaultsKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsKey.swift; sourceTree = "<group>"; };
982A3698292C905300FDC6CF /* DiaryDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiaryDetailViewController.swift; sourceTree = "<group>"; };
982B3B7E292E68FB0077A44B /* DiaryDetailViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DiaryDetailViewModel.swift; sourceTree = "<group>"; };
9838443D29387C0A00BCCEE2 /* ChangeNicknameEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeNicknameEndpoint.swift; sourceTree = "<group>"; };
983AE9D12934F041006547BD /* NicknameCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NicknameCell.swift; sourceTree = "<group>"; };
983AE9D3293513AD006547BD /* SettingsCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsCellModel.swift; sourceTree = "<group>"; };
983AE9D5293514E8006547BD /* SettingsActionSheetCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsActionSheetCell.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -307,12 +309,12 @@
isa = PBXGroup;
children = (
9841D6162925FACC00318EA9 /* LoginUseCase.swift */,
7940FB32292E065F00276EFC /* DiaryDetailUseCase.swift */,
988414DA2923606B007C9132 /* DiaryListUseCase.swift */,
66A8CF682937945300C17F84 /* UserDetailUseCase.swift */,
7940FB32292E065F00276EFC /* DiaryDetailUseCase.swift */,
791529D72932F364005A8DDB /* DiaryEditUseCase.swift */,
66A8CF682937945300C17F84 /* UserDetailUseCase.swift */,
9894EAF429373385005F2B15 /* SettingsUseCase.swift */,
9825F41A29377875005F2163 /* ChangeUserNameUseCase.swift */,
9825F41A29377875005F2163 /* ChangeNicknameUseCase.swift */,
);
path = UseCase;
sourceTree = "<group>";
Expand Down Expand Up @@ -426,6 +428,7 @@
4F4E0D7529252236005ABA8F /* LoginEndpoint.swift */,
66A8CF6C29379A9900C17F84 /* UserDetailEndpoint.swift */,
791529DD29333D40005A8DDB /* ImageEndpoint.swift */,
9838443D29387C0A00BCCEE2 /* ChangeNicknameEndpoint.swift */,
);
path = Endpoints;
sourceTree = "<group>";
Expand Down Expand Up @@ -591,8 +594,9 @@
66A8CF672937937300C17F84 /* UserDetailItem.swift in Sources */,
666E6F7D291CF45600CECD4B /* Coordinator.swift in Sources */,
982A3699292C905300FDC6CF /* DiaryDetailViewController.swift in Sources */,
9825F41B29377875005F2163 /* ChangeUserNameUseCase.swift in Sources */,
9825F41B29377875005F2163 /* ChangeNicknameUseCase.swift in Sources */,
666E6F8C291CFAC200CECD4B /* DiaryCollectionViewController.swift in Sources */,
9838443E29387C0A00BCCEE2 /* ChangeNicknameEndpoint.swift in Sources */,
666E6F8A291CF82700CECD4B /* TabBarPageCase.swift in Sources */,
66A8CF652937934A00C17F84 /* MyPageRepository.swift in Sources */,
79183800292225DC00BC6992 /* UIFont+.swift in Sources */,
Expand Down
2 changes: 1 addition & 1 deletion Segno/Segno/Data/Network/Endpoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ typealias Body = Encodable

// MARK: HTTP 요청 메서드
enum HTTPMethod: String {
case GET, POST, PUT, DELETE
case GET, POST, PUT, DELETE, PATCH
}

// MARK: 요청 파라미터
Expand Down
31 changes: 31 additions & 0 deletions Segno/Segno/Data/Network/Endpoints/ChangeNicknameEndpoint.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// SettingsEndpoint.swift
// Segno
//
// Created by YOONJONG on 2022/12/01.
//

import Foundation

enum ChangeNicknameEndpoint: Endpoint {
case item(token: String, nickname: String)

var baseURL: URL? {
return URL(string: BaseURL.urlString)
}

var httpMethod: HTTPMethod {
return .PATCH
}

var path: String {
return "user"
}

var parameters: HTTPRequestParameter? {
switch self {
case .item(let token, let nickName):
return HTTPRequestParameter.body(["token": token, "nickName": nickName])
}
}
}
12 changes: 10 additions & 2 deletions Segno/Segno/Data/Repository/SettingsRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,17 @@
import RxSwift

protocol SettingsRepository {

func changeNickname(to nickname: String) -> Single<Bool>
}

final class SettingsRepositoryImpl: SettingsRepository {

func changeNickname(to nickname: String) -> Single<Bool> {
// TODO: Keychain으로부터 토큰 가져오기
let token = "/43JoWf24Y7SS8yJj3oIPqIFGZRD3P7u9kUZVwkMwug="
let endpoint = ChangeNicknameEndpoint.item(token: token, nickname: nickname)
return NetworkManager.shared.call(endpoint)
.map { _ in
return true
}
}
}
25 changes: 25 additions & 0 deletions Segno/Segno/Domain/UseCase/ChangeNicknameUseCase.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// ChangeNicknameUseCase.swift
// Segno
//
// Created by YOONJONG on 2022/11/30.
//

import RxSwift

protocol ChangeNicknameUseCase {
func requestChangeNickname(to nickname: String) -> Single<Bool>
}

final class ChangeNicknameUseCaseImpl: ChangeNicknameUseCase {
let repository: SettingsRepository
private let disposeBag = DisposeBag()

init(repository: SettingsRepository = SettingsRepositoryImpl()) {
self.repository = repository
}

func requestChangeNickname(to nickname: String) -> Single<Bool> {
return repository.changeNickname(to: nickname)
}
}
27 changes: 0 additions & 27 deletions Segno/Segno/Domain/UseCase/ChangeUserNameUseCase.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -70,17 +70,19 @@ final class SettingsViewController: UIViewController {
let self = self else { return UITableViewCell() }

cell.okButton.rx.tap
.flatMap { a in
.flatMap { _ in
guard let newNickname = cell.nicknameTextField.text else {
return Observable<Bool>.empty()
}

return self.viewModel.changeNickname(to: newNickname)
.asObservable()
}
.subscribe(onNext: { result in
debugPrint("여기에서 \(result)에 대한 피드백 Alert 띄웁니다.")
debugPrint("닉네임 변경 결과 : \(result)")
// TODO: 성공/실패 알럿띄우기
})
.disposed(by: self.disposeBag)

return cell
case .settingsSwitch(let title, let isOn):
guard let cell = tableView.dequeueReusableCell(withIdentifier: "SettingsSwitchCell") as? SettingsSwitchCell,
Expand Down
14 changes: 5 additions & 9 deletions Segno/Segno/Presentation/ViewModel/SettingsViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,17 @@ final class SettingsViewModel {
])

private let settingsUseCase: SettingsUseCase
private let changeUserNameUseCase: ChangeUserNameUseCase
private let changeNicknameUseCase: ChangeNicknameUseCase

init(settingsUseCase: SettingsUseCase = SettingsUseCaseImpl(),
changeUserNameUseCase: ChangeUserNameUseCase = ChangeUserNameUseCaseImpl()
changeNicknameUseCase: ChangeNicknameUseCase = ChangeNicknameUseCaseImpl()
) {
self.settingsUseCase = settingsUseCase
self.changeUserNameUseCase = changeUserNameUseCase
self.changeNicknameUseCase = changeNicknameUseCase
}

func changeNickname(to nickname: String) -> Observable<Bool> {
return Observable.create { emitter in
let result = self.changeUserNameUseCase.requestChangeNickname(to: nickname)
emitter.onNext(result)
return Disposables.create()
}
func changeNickname(to nickname: String) -> Single<Bool> {
return self.changeNicknameUseCase.requestChangeNickname(to: nickname)
}

func getAutoPlayMode() -> Bool {
Expand Down

0 comments on commit 344967e

Please sign in to comment.