From 828cdf9a50ff18165610393d3273384b30ae0b8b Mon Sep 17 00:00:00 2001 From: nk Date: Mon, 1 Jun 2026 12:08:49 +0300 Subject: [PATCH] feat(domain): add core use cases --- .../domain/usecase/GetNowPlayingUseCase.kt | 14 ++++++++++++++ .../domain/usecase/GetStationsUseCase.kt | 12 ++++++++++++ .../domain/usecase/PlayStationUseCase.kt | 14 ++++++++++++++ .../usecase/SearchTrackInServiceUseCase.kt | 11 +++++++++++ .../domain/usecase/ToggleFavoriteUseCase.kt | 19 +++++++++++++++++++ 5 files changed, 70 insertions(+) create mode 100644 app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt create mode 100644 app/src/main/java/com/radiola/domain/usecase/GetStationsUseCase.kt create mode 100644 app/src/main/java/com/radiola/domain/usecase/PlayStationUseCase.kt create mode 100644 app/src/main/java/com/radiola/domain/usecase/SearchTrackInServiceUseCase.kt create mode 100644 app/src/main/java/com/radiola/domain/usecase/ToggleFavoriteUseCase.kt diff --git a/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt new file mode 100644 index 0000000..6658370 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/usecase/GetNowPlayingUseCase.kt @@ -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 { + return nowPlayingRepository.getNowPlaying(stationPrefix) + } +} diff --git a/app/src/main/java/com/radiola/domain/usecase/GetStationsUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/GetStationsUseCase.kt new file mode 100644 index 0000000..a1eda8c --- /dev/null +++ b/app/src/main/java/com/radiola/domain/usecase/GetStationsUseCase.kt @@ -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> = stationRepository.getStations() +} diff --git a/app/src/main/java/com/radiola/domain/usecase/PlayStationUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/PlayStationUseCase.kt new file mode 100644 index 0000000..7e2dfc5 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/usecase/PlayStationUseCase.kt @@ -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 + } +} diff --git a/app/src/main/java/com/radiola/domain/usecase/SearchTrackInServiceUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/SearchTrackInServiceUseCase.kt new file mode 100644 index 0000000..a192931 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/usecase/SearchTrackInServiceUseCase.kt @@ -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) + } +} diff --git a/app/src/main/java/com/radiola/domain/usecase/ToggleFavoriteUseCase.kt b/app/src/main/java/com/radiola/domain/usecase/ToggleFavoriteUseCase.kt new file mode 100644 index 0000000..2ab6501 --- /dev/null +++ b/app/src/main/java/com/radiola/domain/usecase/ToggleFavoriteUseCase.kt @@ -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) + } + } +}