Skip to content

Commit

Permalink
Load passwords by User#Id
Browse files Browse the repository at this point in the history
  • Loading branch information
SAUL committed Oct 23, 2024
1 parent a5c2986 commit 8977f94
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package core.models.criteria

import core.models.PasswordSort
import java.util.*

data class PasswordSearchCriteria(
val userId: UUID?,
val sort: PasswordSort
)
2 changes: 1 addition & 1 deletion src/main/kotlin/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ val viewModelModule = module {

factory { ForgotPasswordScreenModel(get()) }

factory { SecVaultScreenModel(get()) }
factory { SecVaultScreenModel(get(), get()) }

factory { PasswordMgntScreenModel(get(), get()) }

Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/repository/password/PasswordRepository.kt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package repository.password

import core.models.PasswordSort
import core.models.Result
import core.models.criteria.PasswordSearchCriteria
import core.models.dto.PasswordDto
import repository.password.projection.PasswordSummary

interface PasswordRepository {

suspend fun findSummaries(sort: PasswordSort): Result<List<PasswordSummary>>
suspend fun findSummaries(searchCriteria: PasswordSearchCriteria): Result<List<PasswordSummary>>

suspend fun save(password: PasswordDto): Result<Boolean>

Expand Down
32 changes: 20 additions & 12 deletions src/main/kotlin/repository/password/impl/PasswordRepositoryImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package repository.password.impl

import core.models.PasswordSort
import core.models.Result
import core.models.criteria.PasswordSearchCriteria
import core.models.dto.PasswordDto
import kotlinx.coroutines.delay
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.Expression
import org.jetbrains.exposed.sql.SortOrder
import org.jetbrains.exposed.sql.andWhere
import org.jetbrains.exposed.sql.transactions.transaction
import org.slf4j.Logger
import repository.common.errors.DatabaseError
Expand All @@ -20,28 +22,34 @@ class PasswordRepositoryImpl(
private val logger: Logger
) : PasswordRepository {

override suspend fun findSummaries(sort: PasswordSort): Result<List<PasswordSummary>> {
override suspend fun findSummaries(searchCriteria: PasswordSearchCriteria): Result<List<PasswordSummary>> {
delay(550)
return try {
return transaction(db) {
PasswordsTable.select(

val query = PasswordsTable.select(
listOf(
PasswordsTable.id,
PasswordsTable.name,
PasswordsTable.username,
PasswordsTable.email,
PasswordsTable.favorite
)
).orderBy(toSort(sort), toOrder(sort))
.map {
PasswordSummary(
id = it[PasswordsTable.id].value,
name = it[PasswordsTable.name],
username = it[PasswordsTable.username],
email = it[PasswordsTable.email],
favorite = it[PasswordsTable.favorite]
)
}
)

searchCriteria.userId?.let {
query.andWhere { PasswordsTable.user eq it }
}

query.orderBy(toSort(searchCriteria.sort), toOrder(searchCriteria.sort)).map {
PasswordSummary(
id = it[PasswordsTable.id].value,
name = it[PasswordsTable.name],
username = it[PasswordsTable.username],
email = it[PasswordsTable.email],
favorite = it[PasswordsTable.favorite]
)
}
}.let { Result.Success(it) }
} catch (e: Exception) {
logger.error(e.message, e)
Expand Down
6 changes: 5 additions & 1 deletion src/main/kotlin/viewmodel/SecVaultScreenModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package viewmodel

import cafe.adriel.voyager.core.model.ScreenModel
import cafe.adriel.voyager.core.model.screenModelScope
import core.AppState
import core.models.DefaultMenuItem
import core.models.PasswordSort
import core.models.Result
import core.models.UiState
import core.models.criteria.PasswordSearchCriteria
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -18,6 +20,7 @@ import repository.password.projection.PasswordSummary

class SecVaultScreenModel(
private val passwordRepository: PasswordRepository,
private val appState: AppState,
private val dispatcher: CoroutineDispatcher = Dispatchers.IO
) : ScreenModel {

Expand Down Expand Up @@ -72,7 +75,8 @@ class SecVaultScreenModel(
}

private suspend fun loadPasswords(sort: PasswordSort) {
_passwordItems.value = when (val passwords = passwordRepository.findSummaries(sort)) {
val criteria = PasswordSearchCriteria(appState.getAuthenticatedUser?.id?.value, sort)
_passwordItems.value = when (val passwords = passwordRepository.findSummaries(criteria)) {
is Result.Success -> {
_secVaultState.value = UiState.Success("Successfully loaded passwords")
passwords.data
Expand Down

0 comments on commit 8977f94

Please sign in to comment.