@@ -15,13 +15,13 @@ package me.ahoo.wow.webflux.route.command
15
15
16
16
import me.ahoo.wow.api.command.CommandMessage
17
17
import me.ahoo.wow.command.CommandOperator.withOperator
18
- import me.ahoo.wow.command.factory.CommandBuilder
19
18
import me.ahoo.wow.command.factory.CommandBuilder.Companion.commandBuilder
20
19
import me.ahoo.wow.command.factory.CommandMessageFactory
21
20
import me.ahoo.wow.infra.ifNotBlank
22
21
import me.ahoo.wow.messaging.withLocalFirst
23
22
import me.ahoo.wow.modeling.matedata.AggregateMetadata
24
- import me.ahoo.wow.openapi.command.CommandRequestHeaders
23
+ import me.ahoo.wow.openapi.command.CommandRequestHeaders.AGGREGATE_VERSION
24
+ import me.ahoo.wow.openapi.command.CommandRequestHeaders.REQUEST_ID
25
25
import org.springframework.web.reactive.function.server.ServerRequest
26
26
import reactor.core.publisher.Mono
27
27
@@ -33,23 +33,28 @@ interface CommandMessageParser {
33
33
): Mono <CommandMessage <Any >>
34
34
}
35
35
36
- class DefaultCommandMessageParser (private val commandMessageFactory : CommandMessageFactory ) : CommandMessageParser {
36
+ class DefaultCommandMessageParser (
37
+ private val commandMessageFactory : CommandMessageFactory ,
38
+ private val commandRequestHeaderAppends : List <CommandRequestHeaderAppender > = listOf()
39
+ ) : CommandMessageParser {
37
40
override fun parse (
38
41
aggregateMetadata : AggregateMetadata <* , * >,
39
42
commandBody : Any ,
40
43
request : ServerRequest
41
44
): Mono <CommandMessage <Any >> {
42
45
val aggregateId = request.getAggregateId()
43
46
val tenantId = request.getTenantId(aggregateMetadata)
44
- val aggregateVersion = request.headers().firstHeader(CommandRequestHeaders . AGGREGATE_VERSION )?.toIntOrNull()
45
- val requestId = request.headers().firstHeader(CommandRequestHeaders . REQUEST_ID ).ifNotBlank { it }
47
+ val aggregateVersion = request.headers().firstHeader(AGGREGATE_VERSION )?.toIntOrNull()
48
+ val requestId = request.headers().firstHeader(REQUEST_ID ).ifNotBlank { it }
46
49
val commandBuilder = commandBody.commandBuilder()
47
50
.aggregateId(aggregateId)
48
51
.tenantId(tenantId)
49
52
.aggregateVersion(aggregateVersion)
50
53
.requestId(requestId)
51
54
.namedAggregate(aggregateMetadata.namedAggregate)
52
- injectExtensionHeaders(commandBuilder, request)
55
+ commandRequestHeaderAppends.forEach {
56
+ it.append(request, commandBuilder)
57
+ }
53
58
request.getLocalFirst()?.let {
54
59
commandBuilder.header { header ->
55
60
header.withLocalFirst(it)
@@ -63,18 +68,4 @@ class DefaultCommandMessageParser(private val commandMessageFactory: CommandMess
63
68
commandMessageFactory.create<Any >(commandBuilder)
64
69
)
65
70
}
66
-
67
- private fun injectExtensionHeaders (commandBuilder : CommandBuilder , request : ServerRequest ) {
68
- val extendedHeaders = request.headers().asHttpHeaders()
69
- .filter { (key, _) -> key.startsWith(CommandRequestHeaders .COMMAND_HEADER_X_PREFIX ) }
70
- .map { (key, value) ->
71
- key.substring(CommandRequestHeaders .COMMAND_HEADER_X_PREFIX .length) to value.firstOrNull<String >().orEmpty()
72
- }.toMap<String , String >()
73
- if (extendedHeaders.isEmpty()) {
74
- return
75
- }
76
- commandBuilder.header { header ->
77
- header.with (extendedHeaders)
78
- }
79
- }
80
71
}
0 commit comments