Skip to content

Commit 66aa29f

Browse files
authored
Extract MutationEngine and TableBinding abstractions (#201)
1 parent 0468d6a commit 66aa29f

37 files changed

+1014
-676
lines changed

core/src/main/kotlin/com/kakao/actionbase/core/edge/EdgeEvent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ data class EdgeEvent(
66
val source: Any,
77
val target: Any,
88
override val event: Event,
9-
) : MutationEvent<Pair<Any, Any>> {
10-
override val id: Pair<Any, Any> = source to target
9+
) : MutationEvent {
10+
override val key: MutationKey = MutationKey.SourceTarget(source, target)
1111
}

core/src/main/kotlin/com/kakao/actionbase/core/edge/MultiEdgeEvent.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.kakao.actionbase.core.edge
33
import com.kakao.actionbase.core.state.Event
44

55
data class MultiEdgeEvent(
6-
override val id: Any,
6+
val id: Any,
77
override val event: Event,
8-
) : MutationEvent<Any>
8+
) : MutationEvent {
9+
override val key: MutationKey = MutationKey.Id(id)
10+
}

core/src/main/kotlin/com/kakao/actionbase/core/edge/MutationEvent.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,22 @@ package com.kakao.actionbase.core.edge
33
import com.kakao.actionbase.core.metadata.common.ModelSchema
44
import com.kakao.actionbase.core.state.Event
55

6-
sealed interface MutationEvent<K : Any> {
7-
val id: K
6+
sealed interface MutationKey {
7+
data class SourceTarget(
8+
val source: Any,
9+
val target: Any,
10+
) : MutationKey
11+
12+
data class Id(
13+
val id: Any,
14+
) : MutationKey
15+
}
16+
17+
sealed interface MutationEvent {
18+
val key: MutationKey
819
val event: Event
20+
}
921

10-
interface Source<out E : MutationEvent<*>> {
11-
fun createEvent(schema: ModelSchema): E
12-
}
22+
interface UnresolvedEvent {
23+
fun createEvent(schema: ModelSchema): MutationEvent
1324
}

core/src/main/kotlin/com/kakao/actionbase/core/edge/payload/EdgeBulkMutationRequest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.kakao.actionbase.core.edge.payload
22

33
import com.kakao.actionbase.core.edge.Edge
44
import com.kakao.actionbase.core.edge.EdgeEvent
5-
import com.kakao.actionbase.core.edge.MutationEvent
5+
import com.kakao.actionbase.core.edge.UnresolvedEvent
66
import com.kakao.actionbase.core.metadata.common.ModelSchema
77
import com.kakao.actionbase.core.state.Event
88
import com.kakao.actionbase.core.state.EventType
@@ -13,7 +13,7 @@ data class EdgeBulkMutationRequest(
1313
data class MutationItem(
1414
val type: EventType,
1515
val edge: Edge,
16-
) : MutationEvent.Source<EdgeEvent> {
16+
) : UnresolvedEvent {
1717
override fun createEvent(schema: ModelSchema): EdgeEvent {
1818
require(schema is ModelSchema.Edge) { "Expected ModelSchema.Edge, but got ${schema::class.simpleName}" }
1919
val source = schema.source.type.cast(edge.source)
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.kakao.actionbase.core.edge.payload
22

3+
import com.kakao.actionbase.core.edge.MutationKey
4+
35
data class EdgeMutationResponse(
46
val results: List<Item>,
57
) {
@@ -11,11 +13,15 @@ data class EdgeMutationResponse(
1113
)
1214

1315
companion object {
14-
fun from(statuses: List<EdgeMutationStatus>) =
16+
fun from(results: List<MutationResult>) =
1517
EdgeMutationResponse(
16-
statuses
17-
.map { Item(source = it.source, target = it.target, count = it.count, status = it.status) }
18-
.sortedBy { "${it.source}:${it.target}" },
18+
results
19+
.map {
20+
val key =
21+
it.key as? MutationKey.SourceTarget
22+
?: error("EdgeMutationResponse requires SourceTarget key, got ${it.key::class.simpleName}")
23+
Item(source = key.source, target = key.target, count = it.count, status = it.status)
24+
}.sortedBy { "${it.source}:${it.target}" },
1925
)
2026
}
2127
}

core/src/main/kotlin/com/kakao/actionbase/core/edge/payload/EdgeMutationStatus.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

core/src/main/kotlin/com/kakao/actionbase/core/edge/payload/MultiEdgeBulkMutationRequest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.kakao.actionbase.core.edge.payload
22

33
import com.kakao.actionbase.core.edge.MultiEdge
44
import com.kakao.actionbase.core.edge.MultiEdgeEvent
5-
import com.kakao.actionbase.core.edge.MutationEvent
5+
import com.kakao.actionbase.core.edge.UnresolvedEvent
66
import com.kakao.actionbase.core.metadata.common.ModelSchema
77
import com.kakao.actionbase.core.state.Event
88
import com.kakao.actionbase.core.state.EventType
@@ -13,7 +13,7 @@ data class MultiEdgeBulkMutationRequest(
1313
data class MutationItem(
1414
val type: EventType,
1515
val edge: MultiEdge,
16-
) : MutationEvent.Source<MultiEdgeEvent> {
16+
) : UnresolvedEvent {
1717
override fun createEvent(schema: ModelSchema): MultiEdgeEvent {
1818
require(schema is ModelSchema.MultiEdge) { "Expected ModelSchema.MultiEdge, but got ${schema::class.simpleName}" }
1919
val id = schema.id.type.cast(edge.id)
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.kakao.actionbase.core.edge.payload
22

3+
import com.kakao.actionbase.core.edge.MutationKey
4+
35
data class MultiEdgeMutationResponse(
46
val results: List<Item>,
57
) {
@@ -10,11 +12,15 @@ data class MultiEdgeMutationResponse(
1012
)
1113

1214
companion object {
13-
fun from(statuses: List<MultiEdgeMutationStatus>) =
15+
fun from(results: List<MutationResult>) =
1416
MultiEdgeMutationResponse(
15-
statuses
16-
.map { Item(id = it.id, count = it.count, status = it.status) }
17-
.sortedBy { it.toString() },
17+
results
18+
.map {
19+
val key =
20+
it.key as? MutationKey.Id
21+
?: error("MultiEdgeMutationResponse requires Id key, got ${it.key::class.simpleName}")
22+
Item(id = key.id, count = it.count, status = it.status)
23+
}.sortedBy { it.id.toString() },
1824
)
1925
}
2026
}

core/src/main/kotlin/com/kakao/actionbase/core/edge/payload/MultiEdgeMutationStatus.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.kakao.actionbase.core.edge.payload
2+
3+
import com.kakao.actionbase.core.edge.MutationKey
4+
import com.kakao.actionbase.core.state.State
5+
6+
data class MutationResult(
7+
val key: MutationKey,
8+
val count: Int,
9+
val status: String,
10+
val before: State = State.initial,
11+
val after: State = State.initial,
12+
val acc: Long = 0,
13+
) {
14+
companion object {
15+
fun of(
16+
key: MutationKey,
17+
count: Int,
18+
status: String,
19+
) = MutationResult(key, count, status)
20+
}
21+
}

0 commit comments

Comments
 (0)