Skip to content

Commit

Permalink
#141 feat: 전체적인 검색 로직 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
radiantchoi committed Dec 6, 2022
1 parent 32746c3 commit 02aef9c
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 6 deletions.
27 changes: 23 additions & 4 deletions Segno/Segno/Data/Repository/MusicRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<ShazamSearchResult>()

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)
}
}
22 changes: 20 additions & 2 deletions Segno/Segno/Domain/UseCase/SearchMusicUseCase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ protocol SearchMusicUseCase {
}

final class SearchMusicUseCaseImpl: SearchMusicUseCase {
private let disposeBag = DisposeBag()

let musicRepository: MusicRepository
var musicInfoResult = PublishSubject<MusicInfoResult>()

Expand All @@ -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)
}
}
32 changes: 32 additions & 0 deletions Segno/Segno/Presentation/ViewModel/DiaryEditViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import RxSwift

final class DiaryEditViewModel {
private let disposeBag = DisposeBag()
var diaryDetail: DiaryDetail?
// 에딧 화면에 들어갈 여러 요소들

Expand All @@ -16,19 +17,50 @@ final class DiaryEditViewModel {
// 위치 검색 유즈케이스

var isSearching = BehaviorSubject(value: false)
var musicInfo = PublishSubject<MusicInfoResult>()

init(diaryDetailUseCase: DiaryDetailUseCase = DiaryDetailUseCaseImpl(),
searchMusicUseCase: SearchMusicUseCase = SearchMusicUseCaseImpl()) {
self.diaryDetailUseCase = diaryDetailUseCase
self.searchMusicUseCase = searchMusicUseCase

subscribeSearchingStatus()
}

func addTags() {

}

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() {
Expand Down

0 comments on commit 02aef9c

Please sign in to comment.