From b5e53bda1735fb18e3c42923a1db9b9086c9deb7 Mon Sep 17 00:00:00 2001 From: Cutiful <113351087+Syaroful@users.noreply.github.com> Date: Thu, 12 Jun 2025 08:42:50 +0700 Subject: [PATCH] feat: Implement Koin for dependency injection --- .../syaroful/agrilinkvocpro/MyApplication.kt | 18 ++++++++++++-- .../agrilinkvocpro/data/network/ApiService.kt | 7 ++++++ .../syaroful/agrilinkvocpro/di/AppModule.kt | 2 ++ .../agrilinkvocpro/di/NetworkModule.kt | 24 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/NetworkModule.kt diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/MyApplication.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/MyApplication.kt index 4c4b020..4de70ec 100644 --- a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/MyApplication.kt +++ b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/MyApplication.kt @@ -1,8 +1,22 @@ package com.syaroful.agrilinkvocpro import android.app.Application -import dagger.hilt.android.HiltAndroidApp +import com.syaroful.agrilinkvocpro.di.appModule +import com.syaroful.agrilinkvocpro.di.dynamicFeatureModule +import com.syaroful.agrilinkvocpro.di.networkModule +import com.syaroful.agrilinkvocpro.di.viewModelModule +import org.koin.android.ext.koin.androidContext +import org.koin.core.context.GlobalContext.startKoin +import org.koin.core.logger.Level +import org.koin.core.logger.PrintLogger -@HiltAndroidApp class MyApplication : Application() { + override fun onCreate() { + super.onCreate() + startKoin { + logger(PrintLogger(Level.DEBUG)) + androidContext(this@MyApplication) + modules(appModule, dynamicFeatureModule, networkModule, viewModelModule) + } + } } \ No newline at end of file diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/data/network/ApiService.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/data/network/ApiService.kt index 82e23bc..4e1c0d7 100644 --- a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/data/network/ApiService.kt +++ b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/data/network/ApiService.kt @@ -1,8 +1,10 @@ package com.syaroful.agrilinkvocpro.data.network import com.syaroful.agrilinkvocpro.data.model.LoginResponse +import com.syaroful.agrilinkvocpro.data.model.SensorDataResponse import retrofit2.Response import retrofit2.http.Body +import retrofit2.http.GET import retrofit2.http.Header import retrofit2.http.POST @@ -18,4 +20,9 @@ interface ApiService { @Header("Authorization") authHeader: String, @Body body: LoginRequest ): Response + + @GET("api/sensor/getLatest") + suspend fun getLatestSensorData( + @Header("Authorization") authHeader: String + ): Response } \ No newline at end of file diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/AppModule.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/AppModule.kt index fec3298..b3a9200 100644 --- a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/AppModule.kt +++ b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/AppModule.kt @@ -2,10 +2,12 @@ package com.syaroful.agrilinkvocpro.di import com.syaroful.agrilinkvocpro.data.UserPreferences import com.syaroful.agrilinkvocpro.data.repository.AuthRepository +import com.syaroful.agrilinkvocpro.data.repository.SensorDataRepository import org.koin.android.ext.koin.androidContext import org.koin.dsl.module val appModule = module { single { AuthRepository(get()) } single { UserPreferences(androidContext()) } + single { SensorDataRepository(get()) } } diff --git a/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/NetworkModule.kt b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/NetworkModule.kt new file mode 100644 index 0000000..5b492f5 --- /dev/null +++ b/agrilinkvocpro/app/src/main/java/com/syaroful/agrilinkvocpro/di/NetworkModule.kt @@ -0,0 +1,24 @@ +package com.syaroful.agrilinkvocpro.di + +import com.syaroful.agrilinkvocpro.data.network.ApiService +import okhttp3.OkHttpClient +import org.koin.dsl.module +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +val networkModule = module { + single { + OkHttpClient.Builder() + .build() + } + + single { + Retrofit.Builder() + .baseUrl("http://labai.polinema.ac.id:3042/") + .client(get()) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + single { get().create(ApiService::class.java) } +} \ No newline at end of file