feat(data): add Retrofit API, DTOs and mappers

This commit is contained in:
nk
2026-06-01 12:11:15 +03:00
parent 828cdf9a50
commit 62674fcc3f
4 changed files with 84 additions and 0 deletions

View File

@@ -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
)
}
}

View File

@@ -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
}

View File

@@ -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<NowPlayingItemDto>
)

View File

@@ -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<StationDto>
)