Skip to content

Instantly share code, notes, and snippets.

@Foreman76
Created February 9, 2021 07:19
Show Gist options
  • Save Foreman76/439dae86e31766557085a1194f689c19 to your computer and use it in GitHub Desktop.
Save Foreman76/439dae86e31766557085a1194f689c19 to your computer and use it in GitHub Desktop.
ntrcn
package ru.int24.ownbarbershop
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import retrofit2.HttpException
import ru.int24.ownbarbershop.models.domen.DomServices
import ru.int24.ownbarbershop.models.netresult.NetResult
import ru.int24.ownbarbershop.network.UseRetrofit
import ru.int24.ownbarbershop.network.getHeaders
import ru.int24.ownbarbershop.network.safeApiCall
import ru.int24.ownbarbershop.repositories.NetworkRepository
import java.io.IOException
interface NetworkRepository {
suspend fun getServices(data: Map<String, Any?>): NetResult<List<DomServices>>
}
suspend fun <T> safeApiCall(apiCall: suspend() -> T): NetResult<T>{
return withContext(Dispatchers.IO){
try {
NetResult.Success(apiCall.invoke())
} catch (throwable: Throwable) {
when (throwable) {
is IOException -> NetResult.NetworkError
is HttpException -> {
val code = throwable.code()
val errorString = "Network error"
NetResult.GenericError(code, errorString)
}
else -> NetResult.GenericError(null, "Network error")
}
}
}
}
class NetworkRepositoryImpl(): NetworkRepository {
override suspend fun getServices(data: Map<String, Any?>): NetResult<List<DomServices>> {
val headers = getHeaders(false)
val staff_id = data["staff_id"] as Int?
val companyid = data["companyid"] as Int
val datetime = data["datetime"] as String?
val service_ids = data["service_ids"] as String?
val serviceResponse = safeApiCall { UseRetrofit.makeRetrofitAPI().getServices(headers = headers,
staff_id = staff_id, companyid = companyid,
datetime = datetime, service_ids = service_ids)}
return serviceResponse.value.body()?.toDomModel()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment