Skip to content

Commit ef8134b

Browse files
committed
fix #37: fix al cerrar sesion no se actualizan los datos correctamente
RELEASE
1 parent a41123a commit ef8134b

5 files changed

Lines changed: 53 additions & 26 deletions

File tree

composeApp/src/commonMain/kotlin/dev/wdona/burntout/presentation/viewmodel/viewmodels/AjustesViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ data class AjustesUiState(
2929
class AjustesViewModel(private val repository: AjusteRepository) : ScreenModel {
3030

3131
val ajustesUiState = combine(
32-
SettingsManager.primerCuestionarioHechoFlow,
32+
SettingsManager.esUltimoCuestionarioHecho,
3333
SettingsManager.cuestionarioHoyHechoFlow,
3434
SettingsManager.sincronizadoEnEstaAperturaFlow,
3535
SettingsManager.idEquipoActualFlow,

server/src/main/kotlin/dev/wdona/burntout/api/latest/EquiposRoutes.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,16 @@ fun Route.equiposRoutes() {
9090
val miembros = EquipoMiembrosTable
9191
.selectAll().where { EquipoMiembrosTable.idEquipo eq id }
9292
.map { it[EquipoMiembrosTable.idMiembro] }
93+
94+
println("Miembros del equipo $id: $miembros")
95+
9396
Equipo(
9497
idEquipo = row[EquiposTable.id],
9598
titulo = row[EquiposTable.titulo],
9699
puntuacion = row[EquiposTable.puntuacion],
97100
idOrganizacion = row[EquiposTable.idOrganizacion],
98101
idMiembros = miembros
99102
)
100-
101-
println("Miembros del equipo $id: $miembros")
102103
} else null
103104
} ?: return@get call.respond(HttpStatusCode.NotFound)
104105
call.respond(equipo)

shared/src/androidMain/kotlin/dev/wdona/burntout/shared/db/DatabaseDriverFactory.kt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,24 @@ import dev.wdona.burntout.shared.db.AppDatabase
88
import java.io.File
99

1010
actual class DatabaseDriverFactory(private val context: Context) {
11-
actual fun createDriver(): SqlDriver {
12-
val databasePath = "burntout.db"
13-
val dbFile = File(databasePath)
14-
val driver: SqlDriver = AndroidSqliteDriver(AppDatabase.Schema, context, databasePath)
11+
companion object {
12+
private var driverInstance: SqlDriver? = null
13+
private var appDatabaseInstance: AppDatabase? = null
14+
}
1515

16-
val database = AppDatabase(driver)
17-
if (database.appDatabaseQueries.getOrganizacionById(SettingsManager.getIdOrganizacionActual()).executeAsOneOrNull() == null) {
18-
insertarDatosIniciales(database)
16+
actual fun createDriver(): SqlDriver {
17+
if (driverInstance == null) {
18+
val databasePath = "burntout.db"
19+
val dbFile = File(databasePath)
20+
driverInstance = AndroidSqliteDriver(AppDatabase.Schema, context, databasePath)
21+
22+
appDatabaseInstance = AppDatabase(driverInstance!!)
23+
if (appDatabaseInstance!!.appDatabaseQueries.getOrganizacionById(SettingsManager.getIdOrganizacionActual()).executeAsOneOrNull() == null) {
24+
insertarDatosIniciales(appDatabaseInstance!!)
25+
}
1926
}
2027

21-
return driver
28+
return driverInstance!!
2229
}
2330

2431
private fun insertarDatosIniciales(database: AppDatabase) {

shared/src/commonMain/kotlin/dev/wdona/burntout/data/repository/PreguntaRepositoryImpl.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,16 @@ class PreguntaRespuestaRepositoryImpl(
2626
private val repositoryScope = CoroutineScope(Dispatchers.Default)
2727

2828
override suspend fun getPreguntasByOrg(idOrg: Long): List<Pregunta> = withContext(NonCancellable + Dispatchers.IO) {
29-
if (!SettingsManager.isUsuarioInvitado()) {
29+
val currentLocal = local.getPreguntasByOrg(idOrg)
30+
if (currentLocal.isEmpty() && !SettingsManager.isUsuarioInvitado()) {
31+
try {
32+
val remoteList = remote.getPreguntasByOrg(idOrg)
33+
remoteList.forEach { local.upsertPregunta(it) }
34+
return@withContext remoteList
35+
} catch (e: Exception) {
36+
println("Error bajando preguntas iniciales: ${e.message}")
37+
}
38+
} else if (!SettingsManager.isUsuarioInvitado()) {
3039
repositoryScope.launch {
3140
try {
3241
val remoteList = remote.getPreguntasByOrg(idOrg)

shared/src/commonMain/kotlin/dev/wdona/burntout/shared/utils/SettingsManager.kt

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dev.wdona.burntout.shared.utils
22

3-
import com.russhwolf.settings.Settings
43
import dev.wdona.burntout.shared.domain.Usuario
54
import kotlinx.coroutines.flow.MutableStateFlow
65
import kotlinx.coroutines.flow.asStateFlow
@@ -46,8 +45,8 @@ object SettingsManager {
4645
private val KEY_ULTIMA_FECHA_CUESTIONARIO get() = "ultima_fecha_cuestionario_${_idUsuarioActualFlow.value}"
4746
private val KEY_PRIMER_CUESTIONARIO_HECHO get() = "cuestionario_inicial_hecho_${_idUsuarioActualFlow.value}"
4847

49-
private val _primerCuestionarioHechoFlow = MutableStateFlow(settings.getBoolean("cuestionario_inicial_hecho_${settings.getLong(KEY_ID_USUARIO_ACTUAL, Long.MIN_VALUE)}", false))
50-
val primerCuestionarioHechoFlow = _primerCuestionarioHechoFlow.asStateFlow()
48+
private val _esUltimoCuestionarioHecho = MutableStateFlow(settings.getBoolean("cuestionario_inicial_hecho_${settings.getLong(KEY_ID_USUARIO_ACTUAL, Long.MIN_VALUE)}", false))
49+
val esUltimoCuestionarioHecho = _esUltimoCuestionarioHecho.asStateFlow()
5150

5251
private val _cuestionarioHoyHechoFlow = MutableStateFlow(false)
5352
val cuestionarioHoyHechoFlow = _cuestionarioHoyHechoFlow.asStateFlow()
@@ -56,8 +55,9 @@ object SettingsManager {
5655
_cuestionarioHoyHechoFlow.value = checkCuestionarioHoyHecho()
5756
}
5857

59-
private fun checkCuestionarioHoyHecho(): Boolean {
60-
val ultimaFecha = settings.getString(KEY_ULTIMA_FECHA_CUESTIONARIO, "")
58+
private fun checkCuestionarioHoyHecho(idUsuario: Long = _idUsuarioActualFlow.value): Boolean {
59+
val key = "ultima_fecha_cuestionario_$idUsuario"
60+
val ultimaFecha = settings.getString(key, "")
6161
val fechaHoy = getCurrentDateString()
6262
return ultimaFecha == fechaHoy
6363
}
@@ -68,8 +68,23 @@ object SettingsManager {
6868
fun getIdOrganizacionActual(): Long = _idOrganizacionActualFlow.value
6969
fun getRolActual(): Long = _rolActualFlow.value
7070
fun getTokenUsuario(): String = _tokenUsuarioFlow.value
71-
fun getPrimerCuestionarioHecho(): Boolean = _primerCuestionarioHechoFlow.value
72-
fun esCuestionarioHoyHecho(): Boolean = _cuestionarioHoyHechoFlow.value
71+
72+
fun setPrimerCuestionarioHecho(primerCuestionario: Boolean) {
73+
settings.putBoolean(KEY_PRIMER_CUESTIONARIO_HECHO, primerCuestionario)
74+
_esUltimoCuestionarioHecho.value = primerCuestionario
75+
}
76+
77+
fun getPrimerCuestionarioHecho(): Boolean {
78+
return settings.getBoolean(KEY_PRIMER_CUESTIONARIO_HECHO, false)
79+
}
80+
81+
fun esCuestionarioHoyHecho(): Boolean {
82+
val isHoyHecho = checkCuestionarioHoyHecho()
83+
if (_cuestionarioHoyHechoFlow.value != isHoyHecho) {
84+
_cuestionarioHoyHechoFlow.value = isHoyHecho
85+
}
86+
return isHoyHecho
87+
}
7388
fun getSincronizadoEnEstaApertura(): Boolean = _sincronizadoEnEstaAperturaFlow.value
7489
fun isAutenticado(): Boolean = _isAutenticadoFlow.value
7590
fun isUsuarioInvitado(): Boolean = getIdUsuarioActual() == Long.MIN_VALUE
@@ -80,11 +95,6 @@ object SettingsManager {
8095
_tokenUsuarioFlow.value = safeToken
8196
}
8297

83-
fun setPrimerCuestionarioHecho(primerCuestionario: Boolean) {
84-
settings.putBoolean(KEY_PRIMER_CUESTIONARIO_HECHO, primerCuestionario)
85-
_primerCuestionarioHechoFlow.value = primerCuestionario
86-
}
87-
8898
fun setIdOrganizacionActual(id: Long) {
8999
settings.putLong(KEY_ID_ORGANIZACION_ACTUAL, id)
90100
_idOrganizacionActualFlow.value = id
@@ -131,7 +141,7 @@ object SettingsManager {
131141
_idUsuarioActualFlow.value = usuario.idUsuario
132142

133143
_isAutenticadoFlow.value = true
134-
_primerCuestionarioHechoFlow.value = settings.getBoolean(KEY_PRIMER_CUESTIONARIO_HECHO, false)
144+
_esUltimoCuestionarioHecho.value = settings.getBoolean(KEY_PRIMER_CUESTIONARIO_HECHO, false)
135145
_cuestionarioHoyHechoFlow.value = checkCuestionarioHoyHecho()
136146
}
137147

@@ -161,7 +171,7 @@ object SettingsManager {
161171
_tokenUsuarioFlow.value = ""
162172
_isAutenticadoFlow.value = false
163173
_sincronizadoEnEstaAperturaFlow.value = false
164-
_primerCuestionarioHechoFlow.value = false
174+
_esUltimoCuestionarioHecho.value = false
165175
_cuestionarioHoyHechoFlow.value = false
166176
}
167177
}

0 commit comments

Comments
 (0)