From 62674fcc3f6cf0522893753afd116b87323186f2 Mon Sep 17 00:00:00 2001 From: nk Date: Mon, 1 Jun 2026 12:11:15 +0300 Subject: [PATCH] feat(data): add Retrofit API, DTOs and mappers --- .../java/com/radiola/data/remote/ApiMapper.kt | 32 +++++++++++++++++++ .../java/com/radiola/data/remote/RecordApi.kt | 14 ++++++++ .../radiola/data/remote/dto/NowPlayingDto.kt | 19 +++++++++++ .../com/radiola/data/remote/dto/StationDto.kt | 19 +++++++++++ 4 files changed, 84 insertions(+) create mode 100644 app/src/main/java/com/radiola/data/remote/ApiMapper.kt create mode 100644 app/src/main/java/com/radiola/data/remote/RecordApi.kt create mode 100644 app/src/main/java/com/radiola/data/remote/dto/NowPlayingDto.kt create mode 100644 app/src/main/java/com/radiola/data/remote/dto/StationDto.kt diff --git a/app/src/main/java/com/radiola/data/remote/ApiMapper.kt b/app/src/main/java/com/radiola/data/remote/ApiMapper.kt new file mode 100644 index 0000000..4c722e4 --- /dev/null +++ b/app/src/main/java/com/radiola/data/remote/ApiMapper.kt @@ -0,0 +1,32 @@ +package com.radiola.data.remote + +import com.radiola.data.remote.dto.NowPlayingItemDto +import com.radiola.data.remote.dto.StationDto +import com.radiola.domain.model.Station +import com.radiola.domain.model.Track + +object ApiMapper { + + fun StationDto.toDomain(): Station { + val cover = iconPng ?: iconSvg ?: "" + return Station( + id = id, + name = name, + prefix = prefix, + streamUrl = "https://air.radiorecord.ru:805/${prefix}_128", + coverUrl = cover, + genre = genre ?: "", + tags = emptyList(), + sortOrder = id + ) + } + + fun NowPlayingItemDto.toDomain(): Track { + return Track( + artist = artist, + song = song, + coverUrl = image600 ?: image100, + stationName = prefix + ) + } +} diff --git a/app/src/main/java/com/radiola/data/remote/RecordApi.kt b/app/src/main/java/com/radiola/data/remote/RecordApi.kt new file mode 100644 index 0000000..804c101 --- /dev/null +++ b/app/src/main/java/com/radiola/data/remote/RecordApi.kt @@ -0,0 +1,14 @@ +package com.radiola.data.remote + +import com.radiola.data.remote.dto.NowPlayingResponse +import com.radiola.data.remote.dto.StationsResponse +import retrofit2.http.GET + +interface RecordApi { + + @GET("api/stations/") + suspend fun getStations(): StationsResponse + + @GET("api/stations/now/") + suspend fun getNowPlaying(): NowPlayingResponse +} diff --git a/app/src/main/java/com/radiola/data/remote/dto/NowPlayingDto.kt b/app/src/main/java/com/radiola/data/remote/dto/NowPlayingDto.kt new file mode 100644 index 0000000..9d3c734 --- /dev/null +++ b/app/src/main/java/com/radiola/data/remote/dto/NowPlayingDto.kt @@ -0,0 +1,19 @@ +package com.radiola.data.remote.dto + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class NowPlayingItemDto( + @SerialName("id") val id: Int, + @SerialName("prefix") val prefix: String, + @SerialName("artist") val artist: String, + @SerialName("song") val song: String, + @SerialName("image600") val image600: String? = null, + @SerialName("image100") val image100: String? = null +) + +@Serializable +data class NowPlayingResponse( + @SerialName("result") val result: List +) diff --git a/app/src/main/java/com/radiola/data/remote/dto/StationDto.kt b/app/src/main/java/com/radiola/data/remote/dto/StationDto.kt new file mode 100644 index 0000000..66906f5 --- /dev/null +++ b/app/src/main/java/com/radiola/data/remote/dto/StationDto.kt @@ -0,0 +1,19 @@ +package com.radiola.data.remote.dto + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class StationDto( + @SerialName("id") val id: Int, + @SerialName("title") val name: String, + @SerialName("prefix") val prefix: String, + @SerialName("genre") val genre: String? = null, + @SerialName("icon_png") val iconPng: String? = null, + @SerialName("icon_svg") val iconSvg: String? = null +) + +@Serializable +data class StationsResponse( + @SerialName("result") val result: List +)