Create Retrofit instance



import android.util.Log

import com.app.medlegal.data.local.PreferenceManager

import com.app.medlegal.ui.App

import okhttp3.Interceptor

import okhttp3.OkHttpClient

import okhttp3.Response

import okhttp3.logging.HttpLoggingInterceptor

import retrofit2.Retrofit

import retrofit2.converter.gson.GsonConverterFactory

import java.util.concurrent.TimeUnit


object RetrofitInstance {

    //------------------Local-------

//    private const val BASE_URL = "http://192.168.29.212/advanceliens/" // For Test

   


    private val retrofit: Retrofit by lazy {

        val loggingInterceptor = HttpLoggingInterceptor().apply {

            level = HttpLoggingInterceptor.Level.BODY

        }


        val client = OkHttpClient.Builder()

            .connectTimeout(15, TimeUnit.SECONDS)

            .readTimeout(15, TimeUnit.SECONDS)

            .writeTimeout(15, TimeUnit.SECONDS)

            .addInterceptor(loggingInterceptor)

            .addInterceptor(HttpStatusInterceptor())

            .build()

        Retrofit.Builder()

            .baseUrl(BASE_URL)

            .addConverterFactory(GsonConverterFactory.create())

            .client(client)

            .build()

    }


    val apiService: ApiService by lazy {

        retrofit.create(ApiService::class.java)

    }


}


class HttpStatusInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        val userModel = PreferenceManager.getUserData(App.getContext())

        Log.e("TAG", "intercept: ${userModel?.data?.token}")


        val requestBuilder = chain.request().newBuilder()

        requestBuilder.addHeader(

            "Authorization",

            "Bearer ${(userModel?.data?.token ?: "").toString()}"

        )


        val request = requestBuilder.build()


        return chain.proceed(request)

    }

}


//Calling to viewModel 

val repository = Repository(RetrofitInstance.apiService)


viewModelScope.launch {

                try {

                    val response = repository.getResponse(

                        name = name,

                    )

                    if (response.status) {

                        _model.value = response

                    } else {

                        _error.value = response.message

                    }

                } catch (e: Exception) {

                    _error.value = 

                } finally {

                    _isLoading.value = false

                }


class Repository(private val apiService: ApiService) {


    suspend fun getResponse(

        name: String,

       ): GeneralModel {

        return apiService.calling(

            name = name,

           

        )

    }



@FormUrlEncoded

    @POST("api")

    suspend fun login(

        @Field("name") email: String,

    ): Model

}



Popular posts from this blog