diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.bin b/compose/.gradle/8.0/executionHistory/executionHistory.bin index 3afda18..78943ab 100644 Binary files a/compose/.gradle/8.0/executionHistory/executionHistory.bin and b/compose/.gradle/8.0/executionHistory/executionHistory.bin differ diff --git a/compose/.gradle/8.0/executionHistory/executionHistory.lock b/compose/.gradle/8.0/executionHistory/executionHistory.lock index bce7077..52fac29 100644 Binary files a/compose/.gradle/8.0/executionHistory/executionHistory.lock and b/compose/.gradle/8.0/executionHistory/executionHistory.lock differ diff --git a/compose/.gradle/8.0/fileHashes/fileHashes.bin b/compose/.gradle/8.0/fileHashes/fileHashes.bin index 788dd68..32647eb 100644 Binary files a/compose/.gradle/8.0/fileHashes/fileHashes.bin and b/compose/.gradle/8.0/fileHashes/fileHashes.bin differ diff --git a/compose/.gradle/8.0/fileHashes/fileHashes.lock b/compose/.gradle/8.0/fileHashes/fileHashes.lock index 190331c..80fa390 100644 Binary files a/compose/.gradle/8.0/fileHashes/fileHashes.lock and b/compose/.gradle/8.0/fileHashes/fileHashes.lock differ diff --git a/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 5a05d86..c16bad5 100644 Binary files a/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/compose/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/compose/.gradle/buildOutputCleanup/outputFiles.bin b/compose/.gradle/buildOutputCleanup/outputFiles.bin index b37ccdf..9346326 100644 Binary files a/compose/.gradle/buildOutputCleanup/outputFiles.bin and b/compose/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/compose/.gradle/file-system.probe b/compose/.gradle/file-system.probe index 9fdda6c..1d4ac8a 100644 Binary files a/compose/.gradle/file-system.probe and b/compose/.gradle/file-system.probe differ diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/MainComposeActivity.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/MainComposeActivity.kt index 5dc3f1b..4b4a5af 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/MainComposeActivity.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/MainComposeActivity.kt @@ -11,8 +11,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.compose.rememberNavController -import ru.ulstu.`is`.pmu.tanks.composeui.Login -import ru.ulstu.`is`.pmu.composeui.navigation.MainNavbar import ru.ulstu.`is`.pmu.composeui.navigation.NavGraph import ru.ulstu.`is`.pmu.ui.theme.PmudemoTheme diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt index d489610..edd3bb1 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/LevelDao.kt @@ -24,13 +24,13 @@ interface LevelDao { //получить конкретный уровень @Query("select * from levels where levels.uid = :uid") - suspend fun getLevelUid(uid: Long): LevelWithTanks + fun getLevelUid(uid: Long): Flow //получить уровень без списка танков @Query( "SELECT level FROM levels where levels.uid = :uid" ) - open fun getSimpleLevelUid(uid: Long): Level + open fun getSimpleLevelUid(uid: Long): Flow @Insert suspend fun insert(level: Level) diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt index 7bfa942..e293fc0 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/NationDao.kt @@ -23,13 +23,13 @@ interface NationDao { //получить конкретную нацию @Query("select * from nations where nations.uid = :uid") - suspend fun getNationUid(uid: Long): NationWithTanks + fun getNationUid(uid: Long): Flow //получить нацию без списка танков @Query( "SELECT nationName FROM nations where nations.uid = :uid" ) - open fun getSimpleNationUid(uid: Long): Nation + open fun getSimpleNationUid(uid: Long): Flow @Insert suspend fun insert(nation: Nation) diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/TankDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/TankDao.kt index d226367..a144032 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/TankDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/TankDao.kt @@ -18,7 +18,7 @@ interface TankDao { //получить конкретный уровень @Query("select * from tanks where tanks.tankId = :uid") - suspend fun getTankUid(uid: Long): Tank + fun getTankUid(uid: Long): Flow @Insert suspend fun insert(tank: Tank) diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt index 0c0a8bb..307d88c 100644 --- a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/dao/UserDao.kt @@ -30,7 +30,7 @@ interface UserDao { fun getUserUid(uid: Long): Flow>> @Query("select * from users where users.userId = :uid") - suspend fun getSimpleUserUid(uid: Long): User + fun getSimpleUserUid(uid: Long): Flow //добавить танк в ангар пользователя @Insert diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppContainer.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppContainer.kt new file mode 100644 index 0000000..a467a71 --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/database/AppContainer.kt @@ -0,0 +1,37 @@ +package ru.ulstu.`is`.pmu.tank.database + +import android.content.Context +import ru.ulstu.`is`.pmu.tank.repository.LevelRepository +import ru.ulstu.`is`.pmu.tank.repository.NationRepository +import ru.ulstu.`is`.pmu.tank.repository.OfflineLevelRepository +import ru.ulstu.`is`.pmu.tank.repository.OfflineNationRepository +import ru.ulstu.`is`.pmu.tank.repository.OfflineTankRepository +import ru.ulstu.`is`.pmu.tank.repository.OfflineUserRepository +import ru.ulstu.`is`.pmu.tank.repository.TankRepository +import ru.ulstu.`is`.pmu.tank.repository.UserRepository + +interface AppContainer { + val levelRepository: LevelRepository + val nationRepository: NationRepository + val tankRepository: TankRepository + val userRepository: UserRepository +} + +class AppDataContainer(private val context: Context) : AppContainer { + override val levelRepository: LevelRepository by lazy { + OfflineLevelRepository(AppDatabase.getInstance(context).levelDao()) + } + override val nationRepository: NationRepository by lazy { + OfflineNationRepository(AppDatabase.getInstance(context).nationDao()) + } + override val tankRepository: TankRepository by lazy { + OfflineTankRepository(AppDatabase.getInstance(context).tankDao()) + } + override val userRepository: UserRepository by lazy { + OfflineUserRepository(AppDatabase.getInstance(context).userDao()) + } + + companion object { + const val TIMEOUT = 5000L + } +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/LevelRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/LevelRepository.kt new file mode 100644 index 0000000..b2969ce --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/LevelRepository.kt @@ -0,0 +1,14 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.model.Level +import ru.ulstu.`is`.pmu.tank.model.LevelWithTanks + +interface LevelRepository { + fun getAllLevels(): Flow> + fun getSimpleLevel(uid: Long): Flow + fun getFullLevel(uid: Long): Flow + suspend fun insertLevel(level: Level) + suspend fun updateLevel(level: Level) + suspend fun deleteLevel(level: Level) +} diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/NationRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/NationRepository.kt new file mode 100644 index 0000000..409d65b --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/NationRepository.kt @@ -0,0 +1,14 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.model.Nation +import ru.ulstu.`is`.pmu.tank.model.NationWithTanks + +interface NationRepository { + fun getAllNations(): Flow> + fun getSimpleNation(uid: Long): Flow + fun getFullNation(uid: Long): Flow + suspend fun insertNation(nation: Nation) + suspend fun updateNation(nation: Nation) + suspend fun deleteNation(nation: Nation) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineLevelRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineLevelRepository.kt new file mode 100644 index 0000000..b3946bf --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineLevelRepository.kt @@ -0,0 +1,20 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.dao.LevelDao +import ru.ulstu.`is`.pmu.tank.model.Level +import ru.ulstu.`is`.pmu.tank.model.LevelWithTanks + +class OfflineLevelRepository(private val levelDao: LevelDao) : LevelRepository { + override fun getAllLevels(): Flow> = levelDao.getAll() + + override fun getSimpleLevel(uid: Long): Flow = levelDao.getSimpleLevelUid(uid) + + override fun getFullLevel(uid: Long): Flow = levelDao.getLevelUid(uid) + + override suspend fun insertLevel(level: Level) = levelDao.insert(level) + + override suspend fun updateLevel(level: Level) = levelDao.update(level) + + override suspend fun deleteLevel(level: Level) = levelDao.delete(level) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineNationRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineNationRepository.kt new file mode 100644 index 0000000..d3569fd --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineNationRepository.kt @@ -0,0 +1,20 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.dao.NationDao +import ru.ulstu.`is`.pmu.tank.model.Nation +import ru.ulstu.`is`.pmu.tank.model.NationWithTanks + +class OfflineNationRepository(private val nationDao: NationDao) : NationRepository { + override fun getAllNations(): Flow> = nationDao.getAll() + + override fun getSimpleNation(uid: Long): Flow = nationDao.getSimpleNationUid(uid) + + override fun getFullNation(uid: Long): Flow = nationDao.getNationUid(uid) + + override suspend fun insertNation(nation: Nation) = nationDao.insert(nation) + + override suspend fun updateNation(nation: Nation) = nationDao.update(nation) + + override suspend fun deleteNation(nation: Nation) = nationDao.delete(nation) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineTankRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineTankRepository.kt new file mode 100644 index 0000000..88918c3 --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineTankRepository.kt @@ -0,0 +1,17 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.dao.TankDao +import ru.ulstu.`is`.pmu.tank.model.Tank + +class OfflineTankRepository(private val tankDao: TankDao) : TankRepository { + override fun getAllTanks(): Flow> = tankDao.getAll() + + override fun getTank(uid: Long): Flow = tankDao.getTankUid(uid) + + override suspend fun insertTank(tank: Tank) = tankDao.insert(tank) + + override suspend fun updateTank(tank: Tank) = tankDao.update(tank) + + override suspend fun deleteTank(tank: Tank) = tankDao.delete(tank) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineUserRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineUserRepository.kt new file mode 100644 index 0000000..8287561 --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/OfflineUserRepository.kt @@ -0,0 +1,20 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.dao.UserDao +import ru.ulstu.`is`.pmu.tank.model.TankWithNationAndLevel +import ru.ulstu.`is`.pmu.tank.model.User + +class OfflineUserRepository(private val userDao: UserDao) : UserRepository { + override fun getAllUsers(): Flow> = userDao.getAll() + + override fun getSimpleUser(uid: Long): Flow = userDao.getSimpleUserUid(uid) + + override fun getFullUser(uid: Long): Flow>> = userDao.getUserUid(uid) + + override suspend fun insertUser(student: User) = userDao.insert(student) + + override suspend fun updateUser(student: User) = userDao.update(student) + + override suspend fun deleteUser(student: User) = userDao.delete(student) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/TankRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/TankRepository.kt new file mode 100644 index 0000000..1730be9 --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/TankRepository.kt @@ -0,0 +1,12 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.model.Tank + +interface TankRepository { + fun getAllTanks(): Flow> + fun getTank(uid: Long): Flow + suspend fun insertTank(tank: Tank) + suspend fun updateTank(tank: Tank) + suspend fun deleteTank(tank: Tank) +} \ No newline at end of file diff --git a/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/UserRepository.kt b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/UserRepository.kt new file mode 100644 index 0000000..bf27a96 --- /dev/null +++ b/compose/app/src/main/java/ru/ulstu/is/pmu/tank/repository/UserRepository.kt @@ -0,0 +1,14 @@ +package ru.ulstu.`is`.pmu.tank.repository + +import kotlinx.coroutines.flow.Flow +import ru.ulstu.`is`.pmu.tank.model.TankWithNationAndLevel +import ru.ulstu.`is`.pmu.tank.model.User + +interface UserRepository { + fun getAllUsers(): Flow> + fun getSimpleUser(uid: Long): Flow + fun getFullUser(uid: Long): Flow>> + suspend fun insertUser(user: User) + suspend fun updateUser(user: User) + suspend fun deleteUser(user: User) +} \ No newline at end of file