From aaaaac7e3ce09869729f621d0cd18b898732411b Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 14:18:57 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat:=20=EA=B2=80=EC=83=89=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=ED=96=89=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20?= =?UTF-8?q?=EC=9D=BC=EA=B8=B0=20=EC=83=81=EC=84=B8=20=EB=B7=B0=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno.xcodeproj/project.pbxproj | 4 ++++ .../ViewModel/DiaryEditViewModel.swift | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift diff --git a/Segno/Segno.xcodeproj/project.pbxproj b/Segno/Segno.xcodeproj/project.pbxproj index 6e7acd3..edeeca3 100644 --- a/Segno/Segno.xcodeproj/project.pbxproj +++ b/Segno/Segno.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 4F4E0D7629252236005ABA8F /* LoginEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D7529252236005ABA8F /* LoginEndpoint.swift */; }; 4F4E0D79292522B7005ABA8F /* BaseURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D78292522B7005ABA8F /* BaseURL.swift */; }; 4F4E0D7B29252526005ABA8F /* TokenDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */; }; + 4F5291DE293F065D00DF930A /* DiaryEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */; }; 4F6F74B1292C9BF3007E7AC1 /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6F74B0292C9BF3007E7AC1 /* UserInfo.swift */; }; 4F9A001B292227D7007D9057 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9A001A292227D7007D9057 /* NetworkManager.swift */; }; 4F9A001D29222B1B007D9057 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9A001C29222B1B007D9057 /* Endpoint.swift */; }; @@ -117,6 +118,7 @@ 4F4E0D7529252236005ABA8F /* LoginEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginEndpoint.swift; sourceTree = ""; }; 4F4E0D78292522B7005ABA8F /* BaseURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseURL.swift; sourceTree = ""; }; 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenDTO.swift; sourceTree = ""; }; + 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryEditViewModel.swift; sourceTree = ""; }; 4F6F74B0292C9BF3007E7AC1 /* UserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = ""; }; 4F9A001A292227D7007D9057 /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; 4F9A001C29222B1B007D9057 /* Endpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Endpoint.swift; sourceTree = ""; }; @@ -337,6 +339,7 @@ children = ( 9841D61A2926131200318EA9 /* LoginViewModel.swift */, 982B3B7E292E68FB0077A44B /* DiaryDetailViewModel.swift */, + 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */, 988414D829235345007C9132 /* DiaryCollectionViewModel.swift */, 983AE9D72935CEE2006547BD /* SettingsViewModel.swift */, 66A8CF602935F44100C17F84 /* MyPageViewModel.swift */, @@ -588,6 +591,7 @@ 66A8CF6B2937947A00C17F84 /* UserDetailDTO.swift in Sources */, 4F9A001B292227D7007D9057 /* NetworkManager.swift in Sources */, 9894EAF529373385005F2B15 /* SettingsUseCase.swift in Sources */, + 4F5291DE293F065D00DF930A /* DiaryEditViewModel.swift in Sources */, 9841D6172925FACC00318EA9 /* LoginUseCase.swift in Sources */, 66A8CF6D29379A9900C17F84 /* UserDetailEndpoint.swift in Sources */, 4FEBFAAD291CF62E00E78139 /* DiaryDetail.swift in Sources */, diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift new file mode 100644 index 0000000..b4e7dbb --- /dev/null +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -0,0 +1,20 @@ +// +// DiaryEditViewModel.swift +// Segno +// +// Created by Gordon Choi on 2022/12/06. +// + +import RxSwift + +final class DiaryEditViewModel { + var diaryDetail: DiaryDetail? + // 에딧 화면에 들어갈 여러 요소들 + + // 일기 디테일 유즈케이스 + + // 태그 추가 + // 음악 검색 유즈케이스 + // 위치 검색 유즈케이스 + // 저장 +} From 4a59ddee5bfb21b4d18096767354162d0090eb81 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 14:32:17 +0900 Subject: [PATCH 02/12] =?UTF-8?q?#156=20feat:=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B7=B0=20=EB=AA=A8=EB=8D=B8=EC=97=90=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EB=B0=8F=20UseCase=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModel/DiaryEditViewModel.swift | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index b4e7dbb..c381c14 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -11,10 +11,29 @@ final class DiaryEditViewModel { var diaryDetail: DiaryDetail? // 에딧 화면에 들어갈 여러 요소들 - // 일기 디테일 유즈케이스 - - // 태그 추가 - // 음악 검색 유즈케이스 + let diaryDetailUseCase: DiaryDetailUseCase + let searchMusicUseCase: SearchMusicUseCase // 위치 검색 유즈케이스 - // 저장 + + init(diaryDetailUseCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl(), + searchMusicUseCase: SearchMusicUseCase = SearchMusicUseCaseImpl()) { + self.diaryDetailUseCase = diaryDetailUseCase + self.searchMusicUseCase = searchMusicUseCase + } + + func addTags() { + + } + + func searchMusic() { + + } + + func setLocation() { + + } + + func saveDiary() { + + } } From c678c9043f0c9e0aa5e624e4f777cc451eef6501 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 14:38:43 +0900 Subject: [PATCH 03/12] =?UTF-8?q?#158=20feat:=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B7=B0=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=EC=99=80=20=EC=9D=BC=EA=B8=B0=20=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?=EB=B7=B0=20=EB=AA=A8=EB=8D=B8=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewController/DiaryEditViewController.swift | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index ffe802a..770013e 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -39,7 +39,7 @@ final class DiaryEditViewController: UIViewController { static let tagButtonCornerRadius = CGFloat(halfMinorContentHeight / 2) } -// let viewModel: DiaryEditViewModel + let viewModel: DiaryEditViewModel private let shazamSession = ShazamSession() // 임시로 연동 - 추후 분리 예정 private var disposeBag = DisposeBag() @@ -167,16 +167,9 @@ final class DiaryEditViewController: UIViewController { private lazy var tapGesture = UITapGestureRecognizer() -// // 뷰 모델이 작성되었을 경우, 위의 뷰 모델 프로퍼티 주석 해제와 함께 사용하면 됩니다. -// init(viewModel: DiaryEditViewModel -// = DiaryEditViewModel()) { -// self.viewModel = viewModel -// -// super.init(nibName: nil, bundle: nil) -// } - - // 뷰 모델이 작성되기 전 임시로 사용하는 이니셜라이저입니다. - init() { + init(viewModel: DiaryEditViewModel = DiaryEditViewModel()) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) } From 222b58fd0cd975844207c9e71bddb654ce02e875 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 14:44:34 +0900 Subject: [PATCH 04/12] =?UTF-8?q?#156=20feat:=20=EC=9D=8C=EC=95=85=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EA=B2=B0=EA=B3=BC=EB=A5=BC=20=EB=B7=B0=20?= =?UTF-8?q?=EB=AA=A8=EB=8D=B8=EB=A1=9C=EB=B6=80=ED=84=B0=20=EB=B0=9B?= =?UTF-8?q?=EC=95=84=EC=98=A4=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewController/DiaryEditViewController.swift | 10 +++++++++- .../Presentation/ViewModel/DiaryEditViewModel.swift | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index 770013e..e50f340 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -330,7 +330,15 @@ extension DiaryEditViewController { } private func searchTapped() { - shazamSession.toggleSearch() + shazamSession.toggleSearch() // 지워질 예정 + viewModel.searchMusic() + .observe(on: MainScheduler.instance) + .subscribe(onSuccess: { info in + self.musicInfoLabel.text = "\(info.artist) - \(info.title)" + }, onFailure: { _ in + self.musicInfoLabel.text = "음악을 찾지 못했어요." + }) + .disposed(by: disposeBag) } } diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index c381c14..38152c7 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -25,8 +25,8 @@ final class DiaryEditViewModel { } - func searchMusic() { - + func searchMusic() -> Single { + return searchMusicUseCase.searchMusic() } func setLocation() { From 1fd2474869725cfc621fa08dcbe4559ad35cf472 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 14:49:37 +0900 Subject: [PATCH 05/12] =?UTF-8?q?#156=20#158=20feat:=20=EC=9D=8C=EC=95=85?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=EC=9D=84=20=EC=A4=91=EC=A7=80=ED=96=88?= =?UTF-8?q?=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20=EC=9E=91=EB=8F=99=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno/Data/Repository/MusicRepository.swift | 9 +++++++-- .../Segno/Domain/UseCase/SearchMusicUseCase.swift | 15 +++++++++++++-- .../ViewController/DiaryEditViewController.swift | 2 +- .../ViewModel/DiaryEditViewModel.swift | 8 ++++++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/Segno/Segno/Data/Repository/MusicRepository.swift b/Segno/Segno/Data/Repository/MusicRepository.swift index 7953c4d..e735fbe 100644 --- a/Segno/Segno/Data/Repository/MusicRepository.swift +++ b/Segno/Segno/Data/Repository/MusicRepository.swift @@ -8,7 +8,8 @@ import RxSwift protocol MusicRepository { - func searchMusic() + func startSearchingMusic() + func stopSearchingMusic() func playMusic() } @@ -16,10 +17,14 @@ final class MusicRepositoryImpl: MusicRepository { private let shazamSession = ShazamSession() private let musicSession = MusicSession() - func searchMusic() { + func startSearchingMusic() { } + func stopSearchingMusic() { + shazamSession.stop() + } + func playMusic() { } diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index a0d6844..99e8dad 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -8,15 +8,26 @@ import RxSwift protocol SearchMusicUseCase { - func searchMusic() -> Single + func startSearching() -> Single + func stopSearching() } final class SearchMusicUseCaseImpl: SearchMusicUseCase { - func searchMusic() -> Single { + let musicRepository: MusicRepository + + init(musicRepository: MusicRepository = MusicRepositoryImpl()) { + self.musicRepository = musicRepository + } + + func startSearching() -> Single { // 음악을 검색해줄 것을 레포지토리에 요청 return Single.create { _ in return Disposables.create() } } + + func stopSearching() { + musicRepository.stopSearchingMusic() + } } diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index e50f340..7ee6562 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -331,7 +331,7 @@ extension DiaryEditViewController { private func searchTapped() { shazamSession.toggleSearch() // 지워질 예정 - viewModel.searchMusic() + viewModel.startSearchingMusic() .observe(on: MainScheduler.instance) .subscribe(onSuccess: { info in self.musicInfoLabel.text = "\(info.artist) - \(info.title)" diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index 38152c7..19a0d66 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -25,8 +25,12 @@ final class DiaryEditViewModel { } - func searchMusic() -> Single { - return searchMusicUseCase.searchMusic() + func startSearchingMusic() -> Single { + return searchMusicUseCase.startSearching() + } + + func stopSearchingMusic() { + searchMusicUseCase.stopSearching() } func setLocation() { From dedae99c29b25ead32c7dcf7cb5b9523d1fbe3f4 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Tue, 6 Dec 2022 18:57:12 +0900 Subject: [PATCH 06/12] =?UTF-8?q?refactor:=20=EC=9D=8C=EC=95=85=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EA=B4=80=EB=A0=A8=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=98=20=ED=9D=90=EB=A6=84=EC=9D=84=20=EB=B9=84=EC=9B=8C?= =?UTF-8?q?=EB=91=94=20=EC=83=81=ED=83=9C=EB=A1=9C=20=EC=9E=AC=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno/Data/Repository/MusicRepository.swift | 9 ++------- Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift | 13 ++----------- .../ViewController/DiaryEditViewController.swift | 8 -------- .../Presentation/ViewModel/DiaryEditViewModel.swift | 8 ++------ 4 files changed, 6 insertions(+), 32 deletions(-) diff --git a/Segno/Segno/Data/Repository/MusicRepository.swift b/Segno/Segno/Data/Repository/MusicRepository.swift index e735fbe..1b8ef8e 100644 --- a/Segno/Segno/Data/Repository/MusicRepository.swift +++ b/Segno/Segno/Data/Repository/MusicRepository.swift @@ -8,8 +8,7 @@ import RxSwift protocol MusicRepository { - func startSearchingMusic() - func stopSearchingMusic() + func toggleSearchingMusic() func playMusic() } @@ -17,14 +16,10 @@ final class MusicRepositoryImpl: MusicRepository { private let shazamSession = ShazamSession() private let musicSession = MusicSession() - func startSearchingMusic() { + func toggleSearchingMusic() { } - func stopSearchingMusic() { - shazamSession.stop() - } - func playMusic() { } diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index 99e8dad..5aaf256 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -8,8 +8,7 @@ import RxSwift protocol SearchMusicUseCase { - func startSearching() -> Single - func stopSearching() + func toggleSearching() } final class SearchMusicUseCaseImpl: SearchMusicUseCase { @@ -19,15 +18,7 @@ final class SearchMusicUseCaseImpl: SearchMusicUseCase { self.musicRepository = musicRepository } - func startSearching() -> Single { - // 음악을 검색해줄 것을 레포지토리에 요청 + func toggleSearching() { - return Single.create { _ in - return Disposables.create() - } - } - - func stopSearching() { - musicRepository.stopSearchingMusic() } } diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index 7ee6562..2cc7e6e 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -331,14 +331,6 @@ extension DiaryEditViewController { private func searchTapped() { shazamSession.toggleSearch() // 지워질 예정 - viewModel.startSearchingMusic() - .observe(on: MainScheduler.instance) - .subscribe(onSuccess: { info in - self.musicInfoLabel.text = "\(info.artist) - \(info.title)" - }, onFailure: { _ in - self.musicInfoLabel.text = "음악을 찾지 못했어요." - }) - .disposed(by: disposeBag) } } diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index 19a0d66..2acf31e 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -25,12 +25,8 @@ final class DiaryEditViewModel { } - func startSearchingMusic() -> Single { - return searchMusicUseCase.startSearching() - } - - func stopSearchingMusic() { - searchMusicUseCase.stopSearching() + func toggleSearchMusic() { + } func setLocation() { From 32746c3d21f9a4530dfd8740f2b251f06e7ab9c5 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 02:01:14 +0900 Subject: [PATCH 07/12] =?UTF-8?q?#141=20feat:=20=EA=B2=80=EC=83=89?= =?UTF-8?q?=EC=A4=91=20=ED=91=9C=EC=8B=9C=EB=A5=BC=20=EB=B7=B0=20=EB=AA=A8?= =?UTF-8?q?=EB=8D=B8=EB=A1=9C=20=EC=9D=B4=EA=B4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno/Data/Repository/MusicRepository.swift | 13 +++++++++++-- .../Segno/Domain/UseCase/SearchMusicUseCase.swift | 14 ++++++++++++-- .../ViewModel/DiaryEditViewModel.swift | 2 ++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Segno/Segno/Data/Repository/MusicRepository.swift b/Segno/Segno/Data/Repository/MusicRepository.swift index 1b8ef8e..df347cf 100644 --- a/Segno/Segno/Data/Repository/MusicRepository.swift +++ b/Segno/Segno/Data/Repository/MusicRepository.swift @@ -8,7 +8,10 @@ import RxSwift protocol MusicRepository { - func toggleSearchingMusic() + var shazamSearchResult: PublishSubject { get set } + + func startSearchingMusic() + func stopSearchingMusic() func playMusic() } @@ -16,7 +19,13 @@ final class MusicRepositoryImpl: MusicRepository { private let shazamSession = ShazamSession() private let musicSession = MusicSession() - func toggleSearchingMusic() { + var shazamSearchResult = PublishSubject() + + func startSearchingMusic() { + + } + + func stopSearchingMusic() { } diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index 5aaf256..a9d769f 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -7,18 +7,28 @@ import RxSwift +typealias MusicInfoResult = Result + protocol SearchMusicUseCase { - func toggleSearching() + var musicInfoResult: PublishSubject { get set } + + func startSearching() + func stopSearching() } final class SearchMusicUseCaseImpl: SearchMusicUseCase { let musicRepository: MusicRepository + var musicInfoResult = PublishSubject() init(musicRepository: MusicRepository = MusicRepositoryImpl()) { self.musicRepository = musicRepository } - func toggleSearching() { + func startSearching() { + + } + + func stopSearching() { } } diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index 2acf31e..efd8ff8 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -15,6 +15,8 @@ final class DiaryEditViewModel { let searchMusicUseCase: SearchMusicUseCase // 위치 검색 유즈케이스 + var isSearching = BehaviorSubject(value: false) + init(diaryDetailUseCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl(), searchMusicUseCase: SearchMusicUseCase = SearchMusicUseCaseImpl()) { self.diaryDetailUseCase = diaryDetailUseCase From 02aef9c357c55493a8b92d7d09ebd7c2d2f309cb Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 02:28:55 +0900 Subject: [PATCH 08/12] =?UTF-8?q?#141=20feat:=20=EC=A0=84=EC=B2=B4?= =?UTF-8?q?=EC=A0=81=EC=9D=B8=20=EA=B2=80=EC=83=89=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data/Repository/MusicRepository.swift | 27 +++++++++++++--- .../Domain/UseCase/SearchMusicUseCase.swift | 22 +++++++++++-- .../ViewModel/DiaryEditViewModel.swift | 32 +++++++++++++++++++ 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/Segno/Segno/Data/Repository/MusicRepository.swift b/Segno/Segno/Data/Repository/MusicRepository.swift index df347cf..d946a2b 100644 --- a/Segno/Segno/Data/Repository/MusicRepository.swift +++ b/Segno/Segno/Data/Repository/MusicRepository.swift @@ -16,20 +16,39 @@ protocol MusicRepository { } final class MusicRepositoryImpl: MusicRepository { - private let shazamSession = ShazamSession() - private let musicSession = MusicSession() + private let shazamSession: ShazamSession + private let musicSession: MusicSession + private let disposeBag = DisposeBag() var shazamSearchResult = PublishSubject() - func startSearchingMusic() { + init(shazamSession: ShazamSession = ShazamSession(), + musicSession: MusicSession = MusicSession()) { + self.shazamSession = shazamSession + self.musicSession = musicSession + subscribeSearchresult() + } + + func startSearchingMusic() { + shazamSession.start() } func stopSearchingMusic() { - + shazamSession.stop() } func playMusic() { } } + +extension MusicRepositoryImpl { + private func subscribeSearchresult() { + shazamSession.result + .subscribe(onNext: { + self.shazamSearchResult.onNext($0) + }) + .disposed(by: disposeBag) + } +} diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index a9d769f..41abb80 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -17,6 +17,8 @@ protocol SearchMusicUseCase { } final class SearchMusicUseCaseImpl: SearchMusicUseCase { + private let disposeBag = DisposeBag() + let musicRepository: MusicRepository var musicInfoResult = PublishSubject() @@ -25,10 +27,26 @@ final class SearchMusicUseCaseImpl: SearchMusicUseCase { } func startSearching() { - + musicRepository.startSearchingMusic() } func stopSearching() { - + musicRepository.stopSearchingMusic() + } +} + +extension SearchMusicUseCaseImpl { + private func subscribeShazamResult() { + musicRepository.shazamSearchResult + .subscribe(onNext: { + switch $0 { + case .success(let shazamSong): + let musicInfo = MusicInfo(shazamSong: shazamSong) + self.musicInfoResult.onNext(.success(musicInfo)) + case .failure(let error): + self.musicInfoResult.onNext(.failure(error)) + } + }) + .disposed(by: disposeBag) } } diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index efd8ff8..8ddb352 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -8,6 +8,7 @@ import RxSwift final class DiaryEditViewModel { + private let disposeBag = DisposeBag() var diaryDetail: DiaryDetail? // 에딧 화면에 들어갈 여러 요소들 @@ -16,11 +17,14 @@ final class DiaryEditViewModel { // 위치 검색 유즈케이스 var isSearching = BehaviorSubject(value: false) + var musicInfo = PublishSubject() init(diaryDetailUseCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl(), searchMusicUseCase: SearchMusicUseCase = SearchMusicUseCaseImpl()) { self.diaryDetailUseCase = diaryDetailUseCase self.searchMusicUseCase = searchMusicUseCase + + subscribeSearchingStatus() } func addTags() { @@ -28,7 +32,35 @@ final class DiaryEditViewModel { } func toggleSearchMusic() { + guard let value = try? isSearching.value() else { + return + } + value ? isSearching.onNext(false) : isSearching.onNext(true) + } + + func subscribeSearchingStatus() { + isSearching + .subscribe(onNext: { + $0 ? self.startSearchingMusic() : self.stopSearchingMusic() + }) + .disposed(by: disposeBag) + } + + func startSearchingMusic() { + searchMusicUseCase.startSearching() + } + + func stopSearchingMusic() { + searchMusicUseCase.stopSearching() + } + + func subscribeSearchResult() { + searchMusicUseCase.musicInfoResult + .subscribe(onNext: { + self.musicInfo.onNext($0) + }) + .disposed(by: disposeBag) } func setLocation() { From c55eef510b723d0ab3a18cf4c383afb5fcbd6029 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 02:52:09 +0900 Subject: [PATCH 09/12] =?UTF-8?q?#141=20#156=20#158=20feat:=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC=EB=90=98=EC=96=B4=20=EC=9E=88=EB=8D=98=20=EC=9D=8C?= =?UTF-8?q?=EC=95=85=20=EA=B2=80=EC=83=89=20=EB=A1=9C=EC=A7=81=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/UseCase/SearchMusicUseCase.swift | 2 ++ .../DiaryEditViewController.swift | 20 ++++++++----------- .../ViewModel/DiaryEditViewModel.swift | 2 ++ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index 41abb80..766eb10 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -24,6 +24,8 @@ final class SearchMusicUseCaseImpl: SearchMusicUseCase { init(musicRepository: MusicRepository = MusicRepositoryImpl()) { self.musicRepository = musicRepository + + subscribeShazamResult() } func startSearching() { diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index 2cc7e6e..fa47862 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -281,10 +281,10 @@ final class DiaryEditViewController: UIViewController { } } -// 샤잠킷 로직 부분 - 추후 뜯어서 옮길 계획입니다. +// 샤잠킷 로직 부분 extension DiaryEditViewController { private func bindLabel() { - shazamSession.isSearching + viewModel.isSearching .observe(on: MainScheduler.instance) .subscribe(onNext: { searchState in switch searchState { @@ -307,30 +307,26 @@ extension DiaryEditViewController { } private func bindSearchResult() { - shazamSession.result + viewModel.musicInfo + .observe(on: MainScheduler.instance) .subscribe(onNext: { result in switch result { case .success(let song): let title = song.title let artist = song.artist - let musicInfo = MusicInfo(shazamSong: song) // 뷰모델에서 이 작업을 할 때, 향후 사용될 엔티티 - debugPrint(musicInfo) + debugPrint(song) - DispatchQueue.main.async { - self.musicInfoLabel.text = "\(artist) - \(title)" - } + self.musicInfoLabel.text = "\(artist) - \(title)" case .failure(_): - DispatchQueue.main.async { - self.musicInfoLabel.text = "음악을 찾지 못했어요." - } + self.musicInfoLabel.text = "음악을 찾지 못했어요." } }) .disposed(by: disposeBag) } private func searchTapped() { - shazamSession.toggleSearch() // 지워질 예정 + viewModel.toggleSearchMusic() } } diff --git a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift index 8ddb352..71d6442 100644 --- a/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift +++ b/Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift @@ -25,6 +25,7 @@ final class DiaryEditViewModel { self.searchMusicUseCase = searchMusicUseCase subscribeSearchingStatus() + subscribeSearchResult() } func addTags() { @@ -58,6 +59,7 @@ final class DiaryEditViewModel { func subscribeSearchResult() { searchMusicUseCase.musicInfoResult .subscribe(onNext: { + self.toggleSearchMusic() self.musicInfo.onNext($0) }) .disposed(by: disposeBag) From bf2b6c8b4c4e55734c0af46f536241760b4d152c Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 02:58:50 +0900 Subject: [PATCH 10/12] =?UTF-8?q?refactor:=20ShazamSession=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno.xcodeproj/project.pbxproj | 18 ++++- .../Network/{ => Errors}/NetworkError.swift | 0 .../Data/Network/Errors/ShazamError.swift | 25 ++++++ .../Data/Repository/DTO/ShazamSongDTO.swift | 31 +++++++ Segno/Segno/Data/Session/ShazamSession.swift | 81 ++----------------- .../Domain/UseCase/SearchMusicUseCase.swift | 4 +- Segno/Segno/Entity/MusicInfo.swift | 2 +- 7 files changed, 83 insertions(+), 78 deletions(-) rename Segno/Segno/Data/Network/{ => Errors}/NetworkError.swift (100%) create mode 100644 Segno/Segno/Data/Network/Errors/ShazamError.swift create mode 100644 Segno/Segno/Data/Repository/DTO/ShazamSongDTO.swift diff --git a/Segno/Segno.xcodeproj/project.pbxproj b/Segno/Segno.xcodeproj/project.pbxproj index edeeca3..56e0021 100644 --- a/Segno/Segno.xcodeproj/project.pbxproj +++ b/Segno/Segno.xcodeproj/project.pbxproj @@ -26,6 +26,8 @@ 4F4E0D79292522B7005ABA8F /* BaseURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D78292522B7005ABA8F /* BaseURL.swift */; }; 4F4E0D7B29252526005ABA8F /* TokenDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */; }; 4F5291DE293F065D00DF930A /* DiaryEditViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */; }; + 4F589DD6293FB9AB00DB39E5 /* ShazamSongDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F589DD5293FB9AB00DB39E5 /* ShazamSongDTO.swift */; }; + 4F589DD9293FBA0900DB39E5 /* ShazamError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F589DD8293FBA0900DB39E5 /* ShazamError.swift */; }; 4F6F74B1292C9BF3007E7AC1 /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6F74B0292C9BF3007E7AC1 /* UserInfo.swift */; }; 4F9A001B292227D7007D9057 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9A001A292227D7007D9057 /* NetworkManager.swift */; }; 4F9A001D29222B1B007D9057 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9A001C29222B1B007D9057 /* Endpoint.swift */; }; @@ -119,6 +121,8 @@ 4F4E0D78292522B7005ABA8F /* BaseURL.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseURL.swift; sourceTree = ""; }; 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenDTO.swift; sourceTree = ""; }; 4F5291DD293F065D00DF930A /* DiaryEditViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryEditViewModel.swift; sourceTree = ""; }; + 4F589DD5293FB9AB00DB39E5 /* ShazamSongDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShazamSongDTO.swift; sourceTree = ""; }; + 4F589DD8293FBA0900DB39E5 /* ShazamError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShazamError.swift; sourceTree = ""; }; 4F6F74B0292C9BF3007E7AC1 /* UserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = ""; }; 4F9A001A292227D7007D9057 /* NetworkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkManager.swift; sourceTree = ""; }; 4F9A001C29222B1B007D9057 /* Endpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Endpoint.swift; sourceTree = ""; }; @@ -391,11 +395,11 @@ 4F31779F291BF1780019BDFC /* Network */ = { isa = PBXGroup; children = ( + 4F589DD7293FB9F300DB39E5 /* Errors */, 4F4E0D77292522AC005ABA8F /* Namespaces */, 4FA324292923646200DB04D5 /* Endpoints */, 4F9A001A292227D7007D9057 /* NetworkManager.swift */, 4F9A001C29222B1B007D9057 /* Endpoint.swift */, - 4F9A001E29222C97007D9057 /* NetworkError.swift */, ); path = Network; sourceTree = ""; @@ -423,6 +427,15 @@ path = Namespaces; sourceTree = ""; }; + 4F589DD7293FB9F300DB39E5 /* Errors */ = { + isa = PBXGroup; + children = ( + 4F9A001E29222C97007D9057 /* NetworkError.swift */, + 4F589DD8293FBA0900DB39E5 /* ShazamError.swift */, + ); + path = Errors; + sourceTree = ""; + }; 4FA3242429235FF800DB04D5 /* DTO */ = { isa = PBXGroup; children = ( @@ -432,6 +445,7 @@ 4F4E0D7A29252526005ABA8F /* TokenDTO.swift */, 66A8CF6A2937947A00C17F84 /* UserDetailDTO.swift */, 791529DB29332CF2005A8DDB /* ImageDTO.swift */, + 4F589DD5293FB9AB00DB39E5 /* ShazamSongDTO.swift */, ); path = DTO; sourceTree = ""; @@ -600,6 +614,7 @@ 988414AE2922235B007C9132 /* LocalUtilityRepository.swift in Sources */, 66A8CF612935F44100C17F84 /* MyPageViewModel.swift in Sources */, 988414D929235345007C9132 /* DiaryCollectionViewModel.swift in Sources */, + 4F589DD6293FB9AB00DB39E5 /* ShazamSongDTO.swift in Sources */, 4FEBFAAF291CF9F300E78139 /* MusicInfo.swift in Sources */, 4FEBFAAB291CF30E00E78139 /* DiaryListItem.swift in Sources */, 7918380829233F7100BC6992 /* UIButton+.swift in Sources */, @@ -632,6 +647,7 @@ 98FDF8A1292F56580083FA05 /* Location.swift in Sources */, 7940FB33292E065F00276EFC /* DiaryDetailUseCase.swift in Sources */, 6692A9EF292F605E00DDA835 /* SettingsViewController.swift in Sources */, + 4F589DD9293FBA0900DB39E5 /* ShazamError.swift in Sources */, 666E6F8E291CFADD00CECD4B /* MyPageViewController.swift in Sources */, 4F6F74B1292C9BF3007E7AC1 /* UserInfo.swift in Sources */, 98FDF8A5292F7A350083FA05 /* UIView+.swift in Sources */, diff --git a/Segno/Segno/Data/Network/NetworkError.swift b/Segno/Segno/Data/Network/Errors/NetworkError.swift similarity index 100% rename from Segno/Segno/Data/Network/NetworkError.swift rename to Segno/Segno/Data/Network/Errors/NetworkError.swift diff --git a/Segno/Segno/Data/Network/Errors/ShazamError.swift b/Segno/Segno/Data/Network/Errors/ShazamError.swift new file mode 100644 index 0000000..07476f0 --- /dev/null +++ b/Segno/Segno/Data/Network/Errors/ShazamError.swift @@ -0,0 +1,25 @@ +// +// ShazamError.swift +// Segno +// +// Created by Gordon Choi on 2022/12/07. +// + +import Foundation + +enum ShazamError: Error, LocalizedError { + case recordDenied + case unknown + case matchFailed + + var errorDescription: String { + switch self { + case .recordDenied: + return "Record permission is denied. Please enable it in Settings." + case .matchFailed: + return "No song found or internet connection is bad." + case .unknown: + return "Unknown error occured." + } + } +} diff --git a/Segno/Segno/Data/Repository/DTO/ShazamSongDTO.swift b/Segno/Segno/Data/Repository/DTO/ShazamSongDTO.swift new file mode 100644 index 0000000..0978e22 --- /dev/null +++ b/Segno/Segno/Data/Repository/DTO/ShazamSongDTO.swift @@ -0,0 +1,31 @@ +// +// ShazamSongDTO.swift +// Segno +// +// Created by Gordon Choi on 2022/12/07. +// + +import Foundation +import ShazamKit + +struct ShazamSongDTO { + let isrc: String + let title: String + let artist: String + let album: String + let imageURL: URL? + + init?(mediaItem: SHMatchedMediaItem) { + guard let isrc = mediaItem.isrc, + let title = mediaItem.title, + let artist = mediaItem.artist, + let album = mediaItem.album + else { return nil } + + self.isrc = isrc + self.title = title + self.artist = artist + self.album = album + self.imageURL = mediaItem.artworkURL + } +} diff --git a/Segno/Segno/Data/Session/ShazamSession.swift b/Segno/Segno/Data/Session/ShazamSession.swift index de55d13..8c88893 100644 --- a/Segno/Segno/Data/Session/ShazamSession.swift +++ b/Segno/Segno/Data/Session/ShazamSession.swift @@ -10,11 +10,10 @@ import ShazamKit import RxSwift -typealias ShazamSearchResult = Result +typealias ShazamSearchResult = Result final class ShazamSession: NSObject { var result = PublishSubject() - var isSearching = BehaviorSubject(value: false) private let disposeBag = DisposeBag() private lazy var audioSession: AVAudioSession = .sharedInstance() @@ -27,31 +26,6 @@ final class ShazamSession: NSObject { super.init() session.delegate = self - bindRecord() - } - - func bindRecord() { - isSearching - .subscribe(onNext: { - switch $0 { - case true: - self.start() - case false: - self.stop() - } - }) - .disposed(by: disposeBag) - } - - func toggleSearch() { - guard let currentState = try? isSearching.value() else { return } - - switch currentState { - case true: - isSearching.onNext(false) - case false: - isSearching.onNext(true) - } } func start() { @@ -59,19 +33,19 @@ final class ShazamSession: NSObject { case .granted: record() case .denied: - isSearching.onNext(false) + stop() result.onNext(.failure(.recordDenied)) case .undetermined: audioSession.requestRecordPermission { granted in if granted { self.record() } else { - self.isSearching.onNext(false) + self.stop() self.result.onNext(.failure(.recordDenied)) } } @unknown default: - isSearching.onNext(false) + stop() result.onNext(.failure(.unknown)) } } @@ -97,10 +71,10 @@ final class ShazamSession: NSObject { extension ShazamSession: SHSessionDelegate { func session(_ session: SHSession, didFind match: SHMatch) { - isSearching.onNext(false) + stop() guard let mediaItem = match.mediaItems.first, - let shazamSong = ShazamSong(mediaItem: mediaItem) else { + let shazamSong = ShazamSongDTO(mediaItem: mediaItem) else { result.onNext(.failure(.matchFailed)) return } @@ -109,48 +83,7 @@ extension ShazamSession: SHSessionDelegate { } func session(_ session: SHSession, didNotFindMatchFor signature: SHSignature, error: Error?) { - isSearching.onNext(false) + stop() result.onNext(.failure(.matchFailed)) } } - -// TODO: DTO가 될지 안 될지 판단해서, 파일로 따로 빼 주기 -struct ShazamSong { - let isrc: String - let title: String - let artist: String - let album: String - let imageURL: URL? - - init?(mediaItem: SHMatchedMediaItem) { - guard let isrc = mediaItem.isrc, - let title = mediaItem.title, - let artist = mediaItem.artist, - let album = mediaItem.album - else { return nil } - - self.isrc = isrc - self.title = title - self.artist = artist - self.album = album - self.imageURL = mediaItem.artworkURL - } -} - -// TODO: 파일로 빼 주기 -enum ShazamError: Error, LocalizedError { - case recordDenied - case unknown - case matchFailed - - var errorDescription: String { - switch self { - case .recordDenied: - return "Record permission is denied. Please enable it in Settings." - case .matchFailed: - return "No song found or internet connection is bad." - case .unknown: - return "Unknown error occured." - } - } -} diff --git a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift index 766eb10..6daebfc 100644 --- a/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift +++ b/Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift @@ -42,8 +42,8 @@ extension SearchMusicUseCaseImpl { musicRepository.shazamSearchResult .subscribe(onNext: { switch $0 { - case .success(let shazamSong): - let musicInfo = MusicInfo(shazamSong: shazamSong) + case .success(let shazamSongDTO): + let musicInfo = MusicInfo(shazamSong: shazamSongDTO) self.musicInfoResult.onNext(.success(musicInfo)) case .failure(let error): self.musicInfoResult.onNext(.failure(error)) diff --git a/Segno/Segno/Entity/MusicInfo.swift b/Segno/Segno/Entity/MusicInfo.swift index 7ad9c37..135621c 100644 --- a/Segno/Segno/Entity/MusicInfo.swift +++ b/Segno/Segno/Entity/MusicInfo.swift @@ -14,7 +14,7 @@ struct MusicInfo: Codable { let album: String let imageURL: URL? - init(shazamSong: ShazamSong) { + init(shazamSong: ShazamSongDTO) { self.isrc = shazamSong.isrc self.title = shazamSong.title self.artist = shazamSong.artist From 8f3e834c261bac908042e218d8b07fb0979b0788 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 04:00:14 +0900 Subject: [PATCH 11/12] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EB=B7=B0=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=B2=84=ED=8A=BC=EC=9D=84=20=EB=88=8C=EB=9F=AC?= =?UTF-8?q?=EB=8F=84=20=EC=9D=91=EB=8B=B5=EC=9D=B4=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Segno/Segno/Application/AppCoordinator.swift | 4 ++-- .../Presentation/ViewController/LoginViewController.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Segno/Segno/Application/AppCoordinator.swift b/Segno/Segno/Application/AppCoordinator.swift index c57995a..9f78abc 100644 --- a/Segno/Segno/Application/AppCoordinator.swift +++ b/Segno/Segno/Application/AppCoordinator.swift @@ -18,9 +18,9 @@ final class AppCoordinator: Coordinator { func start() { // TODO: login이 안되어있으면 LoginCoordinator 실행 -// startLoginCoordinator() + startLoginCoordinator() // TODO: login이 되어있으면 TabBarCoordinator 실행 - startTabBarCoordinator() +// startTabBarCoordinator() } func startLoginCoordinator() { diff --git a/Segno/Segno/Presentation/ViewController/LoginViewController.swift b/Segno/Segno/Presentation/ViewController/LoginViewController.swift index e17fcf7..4055127 100644 --- a/Segno/Segno/Presentation/ViewController/LoginViewController.swift +++ b/Segno/Segno/Presentation/ViewController/LoginViewController.swift @@ -102,7 +102,7 @@ final class LoginViewController: UIViewController { let view = UIView() view.backgroundColor = .clear - + view.isUserInteractionEnabled = false return view }() From 8dce2f1bfa9812a81591e32f86db86a25079e524 Mon Sep 17 00:00:00 2001 From: Gordon Choi Date: Wed, 7 Dec 2022 04:05:23 +0900 Subject: [PATCH 12/12] =?UTF-8?q?refactor:=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EB=B7=B0=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=95,=20=EA=B3=A0=EC=A0=95=EA=B0=92=20Metric?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DiaryEditViewController.swift | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift index fa47862..de414a7 100644 --- a/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift +++ b/Segno/Segno/Presentation/ViewController/DiaryEditViewController.swift @@ -28,6 +28,8 @@ final class DiaryEditViewController: UIViewController { static let smallFontSize: CGFloat = 16 static let titlePlaceholder = "제목을 입력하세요." static let musicPlaceholder = "지금 이 음악은 뭘까요?" + static let searching = "검색 중입니다..." + static let musicNotFound = "음악을 찾지 못했어요." static let locationPlaceholder = "여기는 어디인가요?" static let imageViewStockImage = UIImage(systemName: "photo") @@ -40,7 +42,6 @@ final class DiaryEditViewController: UIViewController { } let viewModel: DiaryEditViewModel - private let shazamSession = ShazamSession() // 임시로 연동 - 추후 분리 예정 private var disposeBag = DisposeBag() private lazy var mainScrollView: UIScrollView = { @@ -183,10 +184,9 @@ final class DiaryEditViewController: UIViewController { setupView() bindImageView() - // 샤잠킷 연동 메서드입니다. 향후 조정 예정입니다. - bindLabel() bindButtonAction() - bindSearchResult() + subscribeSearchingStatus() + sunscribeSearchResult() } private func setupView() { @@ -283,15 +283,15 @@ final class DiaryEditViewController: UIViewController { // 샤잠킷 로직 부분 extension DiaryEditViewController { - private func bindLabel() { + private func subscribeSearchingStatus() { viewModel.isSearching .observe(on: MainScheduler.instance) .subscribe(onNext: { searchState in switch searchState { case true: - self.musicInfoLabel.text = "검색 중입니다..." + self.musicInfoLabel.text = Metric.searching case false: - self.musicInfoLabel.text = "지금 이 음악은 뭘까요?" + self.musicInfoLabel.text = Metric.musicPlaceholder } }) .disposed(by: disposeBag) @@ -306,7 +306,7 @@ extension DiaryEditViewController { .disposed(by: disposeBag) } - private func bindSearchResult() { + private func sunscribeSearchResult() { viewModel.musicInfo .observe(on: MainScheduler.instance) .subscribe(onNext: { result in @@ -319,7 +319,7 @@ extension DiaryEditViewController { self.musicInfoLabel.text = "\(artist) - \(title)" case .failure(_): - self.musicInfoLabel.text = "음악을 찾지 못했어요." + self.musicInfoLabel.text = Metric.musicNotFound } }) .disposed(by: disposeBag)