package agzam.vyatsu.di import agzam.vyatsu.data.local.AppDatabase import agzam.vyatsu.data.remote.GroupsParser import agzam.vyatsu.data.remote.VyatsuHttpClient import agzam.vyatsu.data.repository.GroupRepositoryImpl import agzam.vyatsu.data.repository.PreferencesRepositoryImpl import agzam.vyatsu.data.repository.ScheduleRepositoryImpl import agzam.vyatsu.data.repository.TeacherRepositoryImpl import agzam.vyatsu.data.repository.TeacherScheduleRepositoryImpl import agzam.vyatsu.domain.repository.GroupRepository import agzam.vyatsu.domain.repository.PreferencesRepository import agzam.vyatsu.domain.repository.ScheduleRepository import agzam.vyatsu.domain.repository.TeacherRepository import agzam.vyatsu.domain.repository.TeacherScheduleRepository import agzam.vyatsu.update.AppUpdater import android.content.Context import androidx.room.Room class AppContainer(context: Context) { private val database: AppDatabase = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "vyatsu_schedule.db" ) .addMigrations(AppDatabase.MIGRATION_3_4) .fallbackToDestructiveMigration(dropAllTables = true) .build() val groupRepository: GroupRepository by lazy { GroupRepositoryImpl( groupDao = database.groupDao(), ) } val scheduleRepository: ScheduleRepository by lazy { ScheduleRepositoryImpl( scheduleDao = database.scheduleDao(), groupDao = database.groupDao(), ) } val preferencesRepository: PreferencesRepository by lazy { PreferencesRepositoryImpl(database.preferencesDao()) } val teacherRepository: TeacherRepository by lazy { TeacherRepositoryImpl(teacherDao = database.teacherDao()) } val teacherScheduleRepository: TeacherScheduleRepository by lazy { TeacherScheduleRepositoryImpl( scheduleDao = database.teacherScheduleDao(), teacherDao = database.teacherDao() ) } val appUpdater: AppUpdater by lazy { AppUpdater(context.applicationContext, preferencesRepository) } }