Skip to content

Commit e9a188f

Browse files
committed
fix(mongodb): use dedicated MongoNodeEntityStates class
1 parent 9556063 commit e9a188f

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

adapter/mongodb/src/main/kotlin/me/snoty/backend/integration/MongoEntityStateService.kt

+20-14
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import me.snoty.integration.common.diff.EntityStateService
2121
import me.snoty.integration.common.diff.STATE_CODEC_REGISTRY
2222
import me.snoty.integration.common.diff.checksum
2323
import me.snoty.integration.common.diff.state.EntityState
24-
import me.snoty.integration.common.diff.state.NodeEntityStates
2524
import me.snoty.integration.common.wiring.Node
2625
import me.snoty.integration.common.wiring.flow.NodeDeletedHook
2726
import me.snoty.integration.common.wiring.node.NodeDescriptor
2827
import org.bson.Document
2928
import org.bson.codecs.configuration.CodecRegistry
29+
import org.bson.codecs.pojo.annotations.BsonId
3030
import org.koin.core.annotation.Factory
3131
import org.koin.core.annotation.Named
3232

@@ -37,19 +37,19 @@ class MongoEntityStateService(
3737
hookRegistry: HookRegistry,
3838
@Named(STATE_CODEC_REGISTRY) codecRegistry: CodecRegistry,
3939
) : EntityStateService {
40-
private val nodeEntityStates = mongoDB.getCollection<NodeEntityStates>("${integration.mongoCollectionPrefix}:entityStates")
40+
private val nodeEntityStates = mongoDB.getCollection<MongoNodeEntityStates>("${integration.mongoCollectionPrefix}:entityStates")
4141
.withCodecRegistry(codecRegistry)
4242

4343
override suspend fun getLastState(nodeId: NodeId, entityId: String): EntityState? =
4444
nodeEntityStates.aggregate<EntityState>(
45-
Aggregates.match(Filters.eq(NodeEntityStates::nodeId.name, nodeId)),
46-
Aggregates.unwind(NodeEntityStates::entities.mongoField),
47-
Aggregates.match(Filters.eq("${NodeEntityStates::entities.name}.${EntityState::id.name}", entityId)),
48-
Aggregates.replaceRoot(NodeEntityStates::entities.mongoField)
45+
Aggregates.match(Filters.eq(MongoNodeEntityStates::_id.name, nodeId)),
46+
Aggregates.unwind(MongoNodeEntityStates::entities.mongoField),
47+
Aggregates.match(Filters.eq("${MongoNodeEntityStates::entities.name}.${EntityState::id.name}", entityId)),
48+
Aggregates.replaceRoot(MongoNodeEntityStates::entities.mongoField)
4949
).firstOrNull()
5050

5151
override fun getLastStates(nodeId: NodeId): Flow<EntityState> =
52-
nodeEntityStates.find(Filters.eq(NodeEntityStates::nodeId.name, nodeId))
52+
nodeEntityStates.find(Filters.eq(MongoNodeEntityStates::_id.name, nodeId))
5353
.flatMapMerge { it.entities.asFlow() }
5454

5555
override suspend fun updateState(nodeId: NodeId, state: Document, diff: DiffResult) {
@@ -58,15 +58,15 @@ class MongoEntityStateService(
5858
val entityState = EntityState(id, state, state.checksum())
5959

6060
nodeEntityStates.upsertOne(
61-
Filters.eq(NodeEntityStates::nodeId.name, nodeId),
62-
Updates.addToSet(NodeEntityStates::entities.name, entityState)
61+
Filters.eq(MongoNodeEntityStates::_id.name, nodeId),
62+
Updates.addToSet(MongoNodeEntityStates::entities.name, entityState)
6363
)
6464
}
6565

6666
suspend fun pull() {
6767
nodeEntityStates.updateOne(
68-
Filters.eq(NodeEntityStates::nodeId.name, nodeId),
69-
Updates.pull(NodeEntityStates::entities.name, Filters.eq(EntityState::id.name, id))
68+
Filters.eq(MongoNodeEntityStates::_id.name, nodeId),
69+
Updates.pull(MongoNodeEntityStates::entities.name, Filters.eq(EntityState::id.name, id))
7070
)
7171
}
7272

@@ -83,8 +83,8 @@ class MongoEntityStateService(
8383

8484
override suspend fun updateStates(nodeId: NodeId, states: Collection<EntityStateService.EntityStateUpdate>) {
8585
nodeEntityStates.upsertOne(
86-
Filters.eq(NodeEntityStates::nodeId.name, nodeId),
87-
Updates.set(NodeEntityStates::entities.name, states.map { it.state })
86+
Filters.eq(MongoNodeEntityStates::_id.name, nodeId),
87+
Updates.set(MongoNodeEntityStates ::entities.name, states.map { it.state })
8888
)
8989
}
9090

@@ -95,6 +95,12 @@ class MongoEntityStateService(
9595
}
9696

9797
override suspend fun delete(node: Node) {
98-
nodeEntityStates.deleteOne(Filters.eq(NodeEntityStates::nodeId.name, node._id))
98+
nodeEntityStates.deleteOne(Filters.eq(MongoNodeEntityStates::_id.name, node._id))
9999
}
100100
}
101+
102+
private data class MongoNodeEntityStates(
103+
@BsonId
104+
val _id: String,
105+
val entities: Set<EntityState>
106+
)
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package me.snoty.integration.common.diff.state
22

3-
import me.snoty.backend.integration.config.flow.NodeId
43
import me.snoty.integration.common.diff.checksum
54
import org.bson.Document
6-
import org.bson.codecs.pojo.annotations.BsonId
75

86
data class EntityState(
97
val id: String,
@@ -12,9 +10,3 @@ data class EntityState(
1210
) {
1311
constructor(id: String, state: Document) : this(id, state, state.checksum())
1412
}
15-
16-
data class NodeEntityStates(
17-
@BsonId
18-
val nodeId: NodeId,
19-
val entities: Set<EntityState>
20-
)

0 commit comments

Comments
 (0)