Наведён порядок в DI

This commit is contained in:
2026-05-18 18:29:32 +03:00
parent 03709d910b
commit fd6f2e5879
26 changed files with 283 additions and 315 deletions

View File

@@ -14,6 +14,7 @@ kotlin {
}
dependencies {
compileOnly("javax.inject:javax.inject:1")
implementation(project(":domain"))
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)

View File

@@ -3,8 +3,11 @@ package com.github.nullptroma.wallenc.usecases
import com.github.nullptroma.wallenc.domain.interfaces.IStorage
import com.github.nullptroma.wallenc.domain.interfaces.IVaultsManager
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
class FindStorageUseCase(
@Singleton
class FindStorageUseCase @Inject constructor(
private val vaultsManager: IVaultsManager,
) {
fun find(storageUuid: UUID): IStorage? {

View File

@@ -4,8 +4,13 @@ import com.github.nullptroma.wallenc.domain.interfaces.IStorageInfo
import com.github.nullptroma.wallenc.domain.interfaces.IUnlockManager
import kotlinx.coroutines.flow.StateFlow
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
class GetOpenedStoragesUseCase(private val unlockManager: IUnlockManager) {
@Singleton
class GetOpenedStoragesUseCase @Inject constructor(
private val unlockManager: IUnlockManager,
) {
val openedStorages: StateFlow<Map<UUID, IStorageInfo>>
get() = unlockManager.openedStorages
}

View File

@@ -4,6 +4,8 @@ import com.github.nullptroma.wallenc.domain.interfaces.IStorageSyncGroupStore
import com.github.nullptroma.wallenc.domain.interfaces.StorageSyncGroup
import com.github.nullptroma.wallenc.domain.interfaces.StorageSyncGroupEncryptionKind
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
data class StorageSyncCompatibilityInput(
val isEncrypted: Boolean,
@@ -19,7 +21,8 @@ sealed interface AddStorageToSyncGroupResult {
data object MissingEncryptionSecret : AddStorageToSyncGroupResult
}
class ManageStorageSyncGroupsUseCase(
@Singleton
class ManageStorageSyncGroupsUseCase @Inject constructor(
private val groupStore: IStorageSyncGroupStore,
) {
suspend fun getGroups(): List<StorageSyncGroup> = groupStore.getGroups()

View File

@@ -7,8 +7,11 @@ import com.github.nullptroma.wallenc.domain.interfaces.IStorageInfo
import com.github.nullptroma.wallenc.domain.interfaces.IUnlockManager
import com.github.nullptroma.wallenc.domain.tasks.TaskProgress
import kotlinx.coroutines.flow.first
import javax.inject.Inject
import javax.inject.Singleton
class ManageStoragesEncryptionUseCase(
@Singleton
class ManageStoragesEncryptionUseCase @Inject constructor(
private val unlockManager: IUnlockManager,
) {
sealed interface CanEncryptResult {

View File

@@ -21,8 +21,11 @@ import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonPrimitive
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
class ManageTextSecretsUseCase {
@Singleton
class ManageTextSecretsUseCase @Inject constructor() {
private val mutex = Mutex()
fun observe(storageInfo: IStorageInfo): Flow<List<TextSecretRecord>> {

View File

@@ -18,8 +18,11 @@ import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonPrimitive
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
class ManageTwoFaTokensUseCase {
@Singleton
class ManageTwoFaTokensUseCase @Inject constructor() {
private val mutex = Mutex()
fun observe(storageInfo: IStorageInfo): Flow<List<TwoFaTokenRecord>> {

View File

@@ -9,9 +9,14 @@ import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
@OptIn(ExperimentalCoroutinesApi::class)
class ManageVaultUseCase(private val manager: IVaultsManager) {
@Singleton
class ManageVaultUseCase @Inject constructor(
private val manager: IVaultsManager,
) {
/** Найти vault по идентификатору в текущем состоянии. */
fun find(vaultUuid: UUID): IVault? =

View File

@@ -6,8 +6,11 @@ import com.github.nullptroma.wallenc.domain.interfaces.IUnlockManager
import com.github.nullptroma.wallenc.domain.interfaces.IVault
import com.github.nullptroma.wallenc.domain.interfaces.IVaultsManager
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
class RemoveStorageUseCase(
@Singleton
class RemoveStorageUseCase @Inject constructor(
private val vaultsManager: IVaultsManager,
private val unlockManager: IUnlockManager,
private val manageStoragesEncryptionUseCase: ManageStoragesEncryptionUseCase,

View File

@@ -2,8 +2,11 @@ package com.github.nullptroma.wallenc.usecases
import com.github.nullptroma.wallenc.domain.interfaces.IStorage
import com.github.nullptroma.wallenc.domain.interfaces.IStorageInfo
import javax.inject.Inject
import javax.inject.Singleton
class RenameStorageUseCase {
@Singleton
class RenameStorageUseCase @Inject constructor() {
suspend fun rename(storage: IStorageInfo, newName: String) {
when (storage) {
is IStorage -> storage.rename(newName)

View File

@@ -12,8 +12,11 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
import javax.inject.Singleton
class RunStorageSyncUseCase(
@Singleton
class RunStorageSyncUseCase @Inject constructor(
private val orchestrator: ITaskOrchestrator,
private val syncEngine: IStorageSyncEngine,
private val syncReadiness: StorageSyncReadiness,

View File

@@ -4,8 +4,11 @@ import com.github.nullptroma.wallenc.domain.interfaces.IDirectory
import com.github.nullptroma.wallenc.domain.interfaces.IFile
import com.github.nullptroma.wallenc.domain.interfaces.IStorage
import com.github.nullptroma.wallenc.domain.interfaces.IStorageInfo
import javax.inject.Inject
import javax.inject.Singleton
class StorageFileManagementUseCase {
@Singleton
class StorageFileManagementUseCase @Inject constructor() {
private var _storage: IStorage? = null
fun setStorage(storage: IStorageInfo) {

View File

@@ -16,8 +16,11 @@ import java.time.Instant
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicLong
import javax.inject.Inject
import javax.inject.Singleton
class StorageSyncEngine(
@Singleton
class StorageSyncEngine @Inject constructor(
private val vaultsManager: IVaultsManager,
private val groupStore: IStorageSyncGroupStore,
private val findStorageUseCase: FindStorageUseCase,

View File

@@ -4,11 +4,14 @@ import com.github.nullptroma.wallenc.domain.interfaces.IStorageSyncGroupStore
import com.github.nullptroma.wallenc.domain.interfaces.IVaultsManager
import kotlinx.coroutines.delay
import java.util.UUID
import javax.inject.Inject
import javax.inject.Singleton
/**
* Ожидание готовности хранилищ перед синхронизацией (холодный старт из WorkManager).
*/
class StorageSyncReadiness(
@Singleton
class StorageSyncReadiness @Inject constructor(
private val vaultsManager: IVaultsManager,
private val groupStore: IStorageSyncGroupStore,
private val findStorageUseCase: FindStorageUseCase,