feat(domain): add core use cases

This commit is contained in:
nk
2026-06-01 12:08:49 +03:00
parent aad1361043
commit 828cdf9a50
5 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
package com.radiola.domain.usecase
import com.radiola.domain.model.Track
import com.radiola.domain.repository.NowPlayingRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
class GetNowPlayingUseCase @Inject constructor(
private val nowPlayingRepository: NowPlayingRepository
) {
operator fun invoke(stationPrefix: String): Flow<Track?> {
return nowPlayingRepository.getNowPlaying(stationPrefix)
}
}

View File

@@ -0,0 +1,12 @@
package com.radiola.domain.usecase
import com.radiola.domain.model.Station
import com.radiola.domain.repository.StationRepository
import kotlinx.coroutines.flow.Flow
import javax.inject.Inject
class GetStationsUseCase @Inject constructor(
private val stationRepository: StationRepository
) {
operator fun invoke(): Flow<List<Station>> = stationRepository.getStations()
}

View File

@@ -0,0 +1,14 @@
package com.radiola.domain.usecase
import com.radiola.domain.model.Station
import com.radiola.domain.repository.SettingsRepository
import javax.inject.Inject
class PlayStationUseCase @Inject constructor(
private val settingsRepository: SettingsRepository
) {
suspend operator fun invoke(station: Station) {
settingsRepository.setLastStationId(station.id)
// Actual playback is delegated to PlayerService
}
}

View File

@@ -0,0 +1,11 @@
package com.radiola.domain.usecase
import com.radiola.domain.model.DeeplinkService
import com.radiola.domain.model.Track
import javax.inject.Inject
class SearchTrackInServiceUseCase @Inject constructor() {
operator fun invoke(track: Track, service: DeeplinkService): String {
return service.buildSearchUrl(track.artist, track.song)
}
}

View File

@@ -0,0 +1,19 @@
package com.radiola.domain.usecase
import com.radiola.domain.model.Station
import com.radiola.domain.repository.FavoritesRepository
import kotlinx.coroutines.flow.first
import javax.inject.Inject
class ToggleFavoriteUseCase @Inject constructor(
private val favoritesRepository: FavoritesRepository
) {
suspend operator fun invoke(station: Station) {
val isFav = favoritesRepository.isFavorite(station.id).first()
if (isFav) {
favoritesRepository.removeFavorite(station.id)
} else {
favoritesRepository.addFavorite(station)
}
}
}