diff --git a/src/main/kotlin/com/jeluchu/core/configuration/Routes.kt b/src/main/kotlin/com/jeluchu/core/configuration/Routes.kt index 48ab9ee..edd7190 100644 --- a/src/main/kotlin/com/jeluchu/core/configuration/Routes.kt +++ b/src/main/kotlin/com/jeluchu/core/configuration/Routes.kt @@ -4,6 +4,7 @@ import com.jeluchu.features.anime.routes.animeEndpoints import com.jeluchu.features.anitakume.routes.anitakumeEndpoints import com.jeluchu.features.gallery.routes.galleryEndpoints import com.jeluchu.features.news.routes.newsEndpoints +import com.jeluchu.features.radiostations.routes.radioStationsEndpoints import com.jeluchu.features.rankings.routes.rankingsEndpoints import com.jeluchu.features.schedule.routes.scheduleEndpoints import com.jeluchu.features.themes.routes.themesEndpoints @@ -23,5 +24,6 @@ fun Application.initRoutes( rankingsEndpoints(mongoDatabase) scheduleEndpoints(mongoDatabase) anitakumeEndpoints(mongoDatabase) + radioStationsEndpoints(mongoDatabase) } } \ No newline at end of file diff --git a/src/main/kotlin/com/jeluchu/core/utils/Constants.kt b/src/main/kotlin/com/jeluchu/core/utils/Constants.kt index 78e7409..45099c8 100644 --- a/src/main/kotlin/com/jeluchu/core/utils/Constants.kt +++ b/src/main/kotlin/com/jeluchu/core/utils/Constants.kt @@ -59,6 +59,7 @@ object Routes { const val SEARCH = "/search" const val GALLERY = "/gallery" const val SCHEDULE = "/schedule" + const val RADIO_STATIONS = "/radio" const val LAST_POST = "/lastPosts" const val DIRECTORY = "/directory" const val ANITAKUME = "/anitakume" @@ -75,6 +76,7 @@ object Routes { object TimerKey { const val KEY = "key" const val SCHEDULE = "schedule" + const val RADIO = "radio_station" const val LAST_UPDATED = "lastUpdated" const val ANIME_TYPE = "anime_" const val THEMES = "themes_" @@ -88,6 +90,7 @@ object Collections { const val NEWS_EN = "news_en" const val SCHEDULES = "schedule" const val ANITAKUME = "anitakume" + const val RADIO = "radio_stations" const val ANIME_THEMES = "anime_themes" const val ARTISTS_INDEX = "artists_index" const val LAST_EPISODES = "last_episodes" diff --git a/src/main/kotlin/com/jeluchu/features/news/mappers/NewsMappers.kt b/src/main/kotlin/com/jeluchu/features/news/mappers/NewsMappers.kt index a512486..5a50c02 100644 --- a/src/main/kotlin/com/jeluchu/features/news/mappers/NewsMappers.kt +++ b/src/main/kotlin/com/jeluchu/features/news/mappers/NewsMappers.kt @@ -1,14 +1,8 @@ package com.jeluchu.features.news.mappers -import com.jeluchu.core.extensions.getBooleanSafe -import com.jeluchu.core.extensions.getDocumentSafe -import com.jeluchu.core.extensions.getFloatSafe -import com.jeluchu.core.extensions.getIntSafe import com.jeluchu.core.extensions.getListSafe import com.jeluchu.core.extensions.getStringSafe import com.jeluchu.core.extensions.parseRssDate -import com.jeluchu.features.anime.mappers.documentToVideoPromo -import com.jeluchu.features.anime.models.anime.VideoPromo import com.jeluchu.features.news.models.NewEntity import com.prof18.rssparser.model.RssChannel import org.bson.Document diff --git a/src/main/kotlin/com/jeluchu/features/radiostations/mappers/RadioStationMappers.kt b/src/main/kotlin/com/jeluchu/features/radiostations/mappers/RadioStationMappers.kt new file mode 100644 index 0000000..7e1cbab --- /dev/null +++ b/src/main/kotlin/com/jeluchu/features/radiostations/mappers/RadioStationMappers.kt @@ -0,0 +1,20 @@ +package com.jeluchu.features.radiostations.mappers + +import com.jeluchu.core.extensions.getStringSafe +import com.jeluchu.features.radiostations.models.RadioStationEntity +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import org.bson.Document + +fun documentToRadioStation(doc: Document) = RadioStationEntity( + name = doc.getStringSafe("name"), + image = doc.getStringSafe("image"), + genre = doc.getStringSafe("genre"), + stream = doc.getStringSafe("stream"), + website = doc.getStringSafe("website") +) + +fun List.documentStationsMapper(): String { + val directory = map { documentToRadioStation(it) } + return Json.encodeToString(directory) +} \ No newline at end of file diff --git a/src/main/kotlin/com/jeluchu/features/radiostations/models/RadioStationEntity.kt b/src/main/kotlin/com/jeluchu/features/radiostations/models/RadioStationEntity.kt new file mode 100644 index 0000000..ceb5ea3 --- /dev/null +++ b/src/main/kotlin/com/jeluchu/features/radiostations/models/RadioStationEntity.kt @@ -0,0 +1,12 @@ +package com.jeluchu.features.radiostations.models + +import kotlinx.serialization.Serializable + +@Serializable +data class RadioStationEntity( + val name: String = "", + val image: String = "", + val genre: String = "", + val stream: String = "", + val website: String = "" +) \ No newline at end of file diff --git a/src/main/kotlin/com/jeluchu/features/radiostations/routes/RadioStationsRoutes.kt b/src/main/kotlin/com/jeluchu/features/radiostations/routes/RadioStationsRoutes.kt new file mode 100644 index 0000000..d8ad829 --- /dev/null +++ b/src/main/kotlin/com/jeluchu/features/radiostations/routes/RadioStationsRoutes.kt @@ -0,0 +1,14 @@ +package com.jeluchu.features.radiostations.routes + +import com.jeluchu.core.extensions.getToJson +import com.jeluchu.core.utils.Routes +import com.jeluchu.features.radiostations.services.RadioStationsService +import com.mongodb.client.MongoDatabase +import io.ktor.server.routing.* + +fun Route.radioStationsEndpoints( + mongoDatabase: MongoDatabase, + service: RadioStationsService = RadioStationsService(mongoDatabase) +) = route(Routes.RADIO_STATIONS) { + getToJson { service.getStations(call) } +} \ No newline at end of file diff --git a/src/main/kotlin/com/jeluchu/features/radiostations/services/RadioStationsService.kt b/src/main/kotlin/com/jeluchu/features/radiostations/services/RadioStationsService.kt new file mode 100644 index 0000000..874c03f --- /dev/null +++ b/src/main/kotlin/com/jeluchu/features/radiostations/services/RadioStationsService.kt @@ -0,0 +1,19 @@ +package com.jeluchu.features.radiostations.services + +import com.jeluchu.core.utils.Collections +import com.jeluchu.features.radiostations.mappers.documentStationsMapper +import com.mongodb.client.MongoDatabase +import io.ktor.http.* +import io.ktor.server.response.* +import io.ktor.server.routing.* + +class RadioStationsService( + database: MongoDatabase +) { + private val radioStations = database.getCollection(Collections.RADIO) + + suspend fun getStations(call: RoutingCall) { + val elements = radioStations.find().toList() + call.respond(HttpStatusCode.OK, elements.documentStationsMapper()) + } +} \ No newline at end of file