diff --git a/app/src/main/java/com/radiola/di/AppModule.kt b/app/src/main/java/com/radiola/di/AppModule.kt new file mode 100644 index 0000000..44494c4 --- /dev/null +++ b/app/src/main/java/com/radiola/di/AppModule.kt @@ -0,0 +1,86 @@ +package com.radiola.di + +import android.content.Context +import androidx.room.Room +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory +import com.radiola.data.local.AppDatabase +import com.radiola.data.remote.RecordApi +import com.radiola.data.repository.FavoritesRepositoryImpl +import com.radiola.data.repository.NowPlayingRepositoryImpl +import com.radiola.data.repository.SettingsRepositoryImpl +import com.radiola.data.repository.StationRepositoryImpl +import com.radiola.data.repository.TrackHistoryRepositoryImpl +import com.radiola.domain.repository.FavoritesRepository +import com.radiola.domain.repository.NowPlayingRepository +import com.radiola.domain.repository.SettingsRepository +import com.radiola.domain.repository.StationRepository +import com.radiola.domain.repository.TrackHistoryRepository +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import kotlinx.serialization.json.Json +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object AppModule { + + @Provides + @Singleton + fun provideJson(): Json = Json { + ignoreUnknownKeys = true + coerceInputValues = true + } + + @Provides + @Singleton + fun provideOkHttpClient(): OkHttpClient = OkHttpClient.Builder() + .addInterceptor(HttpLoggingInterceptor().apply { + level = HttpLoggingInterceptor.Level.BASIC + }) + .build() + + @Provides + @Singleton + fun provideRetrofit(okHttpClient: OkHttpClient, json: Json): Retrofit = Retrofit.Builder() + .baseUrl("https://www.radiorecord.ru/") + .client(okHttpClient) + .addConverterFactory(json.asConverterFactory("application/json".toMediaType())) + .build() + + @Provides + @Singleton + fun provideRecordApi(retrofit: Retrofit): RecordApi = retrofit.create(RecordApi::class.java) + + @Provides + @Singleton + fun provideDatabase(@ApplicationContext context: Context): AppDatabase = + Room.databaseBuilder(context, AppDatabase::class.java, "radiola.db") + .build() + + @Provides + @Singleton + fun provideStationRepository(impl: StationRepositoryImpl): StationRepository = impl + + @Provides + @Singleton + fun provideNowPlayingRepository(impl: NowPlayingRepositoryImpl): NowPlayingRepository = impl + + @Provides + @Singleton + fun provideFavoritesRepository(impl: FavoritesRepositoryImpl): FavoritesRepository = impl + + @Provides + @Singleton + fun provideTrackHistoryRepository(impl: TrackHistoryRepositoryImpl): TrackHistoryRepository = impl + + @Provides + @Singleton + fun provideSettingsRepository(impl: SettingsRepositoryImpl): SettingsRepository = impl +}