split AppModule into DaoModule, ApiModule, SearchRepositoryModule, and WeatherRepositoryModule and add SMHI providers

This commit is contained in:
PranshulGG committed 2026-05-24 19:11:08 +05:30
1 parent 27f12d4909
commit 8d5216e4bf
5 files changed
+187 -99

No files matched your search

@@ -44,64 +44,6 @@ object AppModule {
): WeatherMasterDatabase =
WeatherMasterDatabase.getInstance(context)
@Provides
fun provideLocationDao(db: WeatherMasterDatabase) =
db.locationsDao()
@Provides
fun provideWeatherDataDao(db: WeatherMasterDatabase) =
db.weatherDao()
@Provides
fun provideWeatherUnitsDao(db: WeatherMasterDatabase) =
db.weatherUnitsDao()
@Provides
fun provideWeatherBlocksDao(db: WeatherMasterDatabase) =
db.weatherBlocksDao()
@Provides
fun provideAirQualityDao(db: WeatherMasterDatabase) = db.airQualityDao()
@Provides
fun provideNwsDao(db: WeatherMasterDatabase) = db.nwsDao()
@Provides
@Singleton
fun provideOpenMeteoApi(): OpenMeteoApi = OpenMeteoApi.create()
@Provides
@Singleton
fun provideOpenMeteoSearchApi(): OpenMeteoSearchApi = OpenMeteoSearchApi.create()
@Provides
@Singleton
fun provideGeoNamesSearchApi(): GeoNamesSearchApi = GeoNamesSearchApi.create()
@Provides
@Singleton
fun provideGeoNamesTimezoneApi(): GeoNamesTimezoneApi = GeoNamesTimezoneApi.create()
@Provides
@Singleton
fun provideOpenMeteoAqiApi(): OpenMeteoAqiApi = OpenMeteoAqiApi.create()
@Provides
@Singleton
fun provideNwsApi(): NwsApi = NwsApi.create()
@Provides
@Singleton
fun provideMetNorwayApi(): MetNorwayApi = MetNorwayApi.create()
@Provides
@Singleton
fun provideOpenMeteoRepository(
dao: LocationsDao,
api: OpenMeteoApi,
weatherDao: WeatherDao
): OpenMeteoRepository = OpenMeteoRepository(dao, weatherDao, api)
@Provides
@Singleton
@@ -124,47 +66,6 @@ object AppModule {
): WeatherBlocksRepository =
WeatherBlocksRepository(weatherBlocksDao)
@Provides
@Singleton
fun provideOpenMeteoSearchRepository(
api: OpenMeteoSearchApi
): OpenMeteoSearchRepository = OpenMeteoSearchRepository(api)
@Provides
@Singleton
fun provideGeoNamesSearchRepository(
api: GeoNamesSearchApi
): GeoNamesSearchRepository = GeoNamesSearchRepository(api)
@Provides
@Singleton
fun provideGeoNamesTimezoneRepository(api: GeoNamesTimezoneApi): GeoNamesTimezoneRepository =
GeoNamesTimezoneRepository(api)
@Provides
@Singleton
fun provideOpenMeteoAqiRepository(
api: OpenMeteoAqiApi,
dao: AirQualityDao
): OpenMeteoAqiRepository =
OpenMeteoAqiRepository(api, dao)
@Provides
@Singleton
fun provideNwsRepository(
api: NwsApi,
dao: LocationsDao,
weatherDao: WeatherDao,
nwsDao: NwsDao
): NwsRepository = NwsRepository(dao, weatherDao, nwsDao, api)
@Provides
@Singleton
fun provideMetNorwayRepository(
dao: LocationsDao,
api: MetNorwayApi,
weatherDao: WeatherDao
): MetNorwayRepository = MetNorwayRepository(dao, weatherDao, api)
@Provides
@Singleton
@@ -0,0 +1,34 @@
package com.pranshulgg.weather_master_app.core.di.db
import com.pranshulgg.weather_master_app.data.local.WeatherMasterDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object DaoModule {
@Provides
fun provideLocationDao(db: WeatherMasterDatabase) =
db.locationsDao()
@Provides
fun provideWeatherDataDao(db: WeatherMasterDatabase) =
db.weatherDao()
@Provides
fun provideWeatherUnitsDao(db: WeatherMasterDatabase) =
db.weatherUnitsDao()
@Provides
fun provideWeatherBlocksDao(db: WeatherMasterDatabase) =
db.weatherBlocksDao()
@Provides
fun provideAirQualityDao(db: WeatherMasterDatabase) = db.airQualityDao()
@Provides
fun provideNwsDao(db: WeatherMasterDatabase) = db.nwsDao()
}
@@ -0,0 +1,52 @@
package com.pranshulgg.weather_master_app.core.di.network
import com.pranshulgg.weather_master_app.core.network.sources.airquality.openmeteo.OpenMeteoAqiApi
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.GeoNamesSearchApi
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.timezone.GeoNamesTimezoneApi
import com.pranshulgg.weather_master_app.core.network.sources.search.openmeteo.OpenMeteoSearchApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.metnorway.MetNorwayApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.nws.NwsApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.openmeteo.OpenMeteoApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.smhi.SmhiApi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
@Singleton
fun provideOpenMeteoApi(): OpenMeteoApi = OpenMeteoApi.create()
@Provides
@Singleton
fun provideOpenMeteoSearchApi(): OpenMeteoSearchApi = OpenMeteoSearchApi.create()
@Provides
@Singleton
fun provideGeoNamesSearchApi(): GeoNamesSearchApi = GeoNamesSearchApi.create()
@Provides
@Singleton
fun provideGeoNamesTimezoneApi(): GeoNamesTimezoneApi = GeoNamesTimezoneApi.create()
@Provides
@Singleton
fun provideOpenMeteoAqiApi(): OpenMeteoAqiApi = OpenMeteoAqiApi.create()
@Provides
@Singleton
fun provideNwsApi(): NwsApi = NwsApi.create()
@Provides
@Singleton
fun provideMetNorwayApi(): MetNorwayApi = MetNorwayApi.create()
@Provides
@Singleton
fun provideSmhiApi(): SmhiApi = SmhiApi.create()
}
@@ -0,0 +1,35 @@
package com.pranshulgg.weather_master_app.core.di.search
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.GeoNamesSearchApi
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.GeoNamesSearchRepository
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.GeoNamesTimezoneRepository
import com.pranshulgg.weather_master_app.core.network.sources.search.geonames.timezone.GeoNamesTimezoneApi
import com.pranshulgg.weather_master_app.core.network.sources.search.openmeteo.OpenMeteoSearchApi
import com.pranshulgg.weather_master_app.core.network.sources.search.openmeteo.OpenMeteoSearchRepository
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object SearchRepositoryModule {
@Provides
@Singleton
fun provideOpenMeteoSearchRepository(
api: OpenMeteoSearchApi
): OpenMeteoSearchRepository = OpenMeteoSearchRepository(api)
@Provides
@Singleton
fun provideGeoNamesSearchRepository(
api: GeoNamesSearchApi
): GeoNamesSearchRepository = GeoNamesSearchRepository(api)
@Provides
@Singleton
fun provideGeoNamesTimezoneRepository(api: GeoNamesTimezoneApi): GeoNamesTimezoneRepository =
GeoNamesTimezoneRepository(api)
}
@@ -0,0 +1,66 @@
package com.pranshulgg.weather_master_app.core.di.weather
import com.pranshulgg.weather_master_app.core.network.sources.airquality.openmeteo.OpenMeteoAqiApi
import com.pranshulgg.weather_master_app.core.network.sources.airquality.openmeteo.OpenMeteoAqiRepository
import com.pranshulgg.weather_master_app.core.network.sources.weather.metnorway.MetNorwayApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.metnorway.MetNorwayRepository
import com.pranshulgg.weather_master_app.core.network.sources.weather.nws.NwsApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.nws.NwsRepository
import com.pranshulgg.weather_master_app.core.network.sources.weather.openmeteo.OpenMeteoApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.openmeteo.OpenMeteoRepository
import com.pranshulgg.weather_master_app.core.network.sources.weather.smhi.SmhiApi
import com.pranshulgg.weather_master_app.core.network.sources.weather.smhi.SmhiRepository
import com.pranshulgg.weather_master_app.data.local.dao.airquality.AirQualityDao
import com.pranshulgg.weather_master_app.data.local.dao.location.LocationsDao
import com.pranshulgg.weather_master_app.data.local.dao.weather.WeatherDao
import com.pranshulgg.weather_master_app.data.local.dao.weather.nws.NwsDao
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object WeatherRepositoryModule {
@Provides
@Singleton
fun provideOpenMeteoRepository(
dao: LocationsDao,
api: OpenMeteoApi,
weatherDao: WeatherDao
): OpenMeteoRepository = OpenMeteoRepository(dao, weatherDao, api)
@Provides
@Singleton
fun provideOpenMeteoAqiRepository(
api: OpenMeteoAqiApi,
dao: AirQualityDao
): OpenMeteoAqiRepository =
OpenMeteoAqiRepository(api, dao)
@Provides
@Singleton
fun provideNwsRepository(
api: NwsApi,
dao: LocationsDao,
weatherDao: WeatherDao,
nwsDao: NwsDao
): NwsRepository = NwsRepository(dao, weatherDao, nwsDao, api)
@Provides
@Singleton
fun provideMetNorwayRepository(
dao: LocationsDao,
api: MetNorwayApi,
weatherDao: WeatherDao
): MetNorwayRepository = MetNorwayRepository(dao, weatherDao, api)
@Provides
@Singleton
fun provideSmhiRepository(
dao: LocationsDao,
api: SmhiApi,
weatherDao: WeatherDao
): SmhiRepository = SmhiRepository(dao, weatherDao, api)
}