Skip to content

Commit 4542996

Browse files
authored
release: 1.5.2 (#164)
2 parents ee96371 + 5b75782 commit 4542996

File tree

64 files changed

+1058
-985
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1058
-985
lines changed

src/main/kotlin/org/gitanimals/auction/app/BuyProductFacade.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.gitanimals.auction.app
22

3+
import org.gitanimals.auction.app.RenderApi.AddPersonaRequest
34
import org.gitanimals.auction.app.event.InboxInputEvent
45
import org.gitanimals.auction.domain.Product
56
import org.gitanimals.auction.domain.ProductService
67
import org.gitanimals.core.TraceIdContextOrchestrator
78
import org.gitanimals.core.TraceIdContextRollback
89
import org.gitanimals.core.filter.MDCFilter.Companion.TRACE_ID
10+
import org.gitanimals.core.filter.MDCFilter.Companion.USER_ID
911
import org.rooftop.netx.api.Orchestrator
1012
import org.rooftop.netx.api.OrchestratorFactory
1113
import org.rooftop.netx.api.SagaManager
@@ -33,6 +35,7 @@ class BuyProductFacade(
3335
"token" to token,
3436
"idempotencyKey" to UUID.randomUUID().toString(),
3537
TRACE_ID to MDC.get(TRACE_ID),
38+
USER_ID to MDC.get(USER_ID),
3639
)
3740
).decodeResultOrThrow(Product::class)
3841

@@ -91,11 +94,13 @@ class BuyProductFacade(
9194
val idempotencyKey = context.decodeContext("idempotencyKey", String::class)
9295

9396
renderApi.addPersona(
94-
token,
95-
idempotencyKey,
96-
product.persona.personaId,
97-
product.persona.personaLevel,
98-
product.persona.personaType,
97+
token = token,
98+
idempotencyKey = idempotencyKey,
99+
request = AddPersonaRequest(
100+
product.persona.personaId,
101+
product.persona.personaType,
102+
product.persona.personaLevel,
103+
)
99104
)
100105

101106
product

src/main/kotlin/org/gitanimals/auction/app/ChangeProductFacade.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@ package org.gitanimals.auction.app
33
import org.gitanimals.auction.domain.Product
44
import org.gitanimals.auction.domain.ProductService
55
import org.gitanimals.auction.domain.request.ChangeProductRequest
6+
import org.gitanimals.core.auth.InternalAuth
67
import org.springframework.stereotype.Service
78

89
@Service
910
class ChangeProductFacade(
10-
private val identityApi: IdentityApi,
11+
private val internalAuth: InternalAuth,
1112
private val productService: ProductService,
1213
) {
1314

14-
fun changeProduct(token: String, changeProductRequest: ChangeProductRequest): Product {
15-
val user = identityApi.getUserByToken(token)
15+
fun changeProduct(changeProductRequest: ChangeProductRequest): Product {
16+
val userId = internalAuth.getUserId()
1617

17-
return productService.changeProduct(user.id.toLong(), changeProductRequest)
18+
return productService.changeProduct(userId, changeProductRequest)
1819
}
1920
}

src/main/kotlin/org/gitanimals/auction/app/DeleteProductFacade.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.gitanimals.auction.app
22

3+
import org.gitanimals.auction.app.RenderApi.AddPersonaRequest
34
import org.gitanimals.auction.domain.ProductService
45
import org.gitanimals.core.TraceIdContextOrchestrator
56
import org.gitanimals.core.TraceIdContextRollback
67
import org.gitanimals.core.filter.MDCFilter.Companion.TRACE_ID
8+
import org.gitanimals.core.filter.MDCFilter.Companion.USER_ID
79
import org.rooftop.netx.api.Orchestrator
810
import org.rooftop.netx.api.OrchestratorFactory
911
import org.slf4j.LoggerFactory
@@ -29,6 +31,7 @@ class DeleteProductFacade(
2931
"token" to token,
3032
"idempotencyKey" to UUID.randomUUID().toString(),
3133
TRACE_ID to MDC.get(TRACE_ID),
34+
USER_ID to MDC.get(USER_ID),
3235
),
3336
).decodeResultOrThrow(Long::class)
3437
}
@@ -55,11 +58,13 @@ class DeleteProductFacade(
5558
val token = context.decodeContext("token", String::class)
5659
val idempotencyKey = context.decodeContext("idempotencyKey", String::class)
5760
renderApi.addPersona(
58-
token,
59-
idempotencyKey,
60-
product.persona.personaId,
61-
product.persona.personaLevel,
62-
product.persona.personaType
61+
token = token,
62+
idempotencyKey = idempotencyKey,
63+
request = AddPersonaRequest(
64+
id = product.persona.personaId,
65+
name = product.persona.personaType,
66+
level = product.persona.personaLevel,
67+
),
6368
)
6469
product.id
6570
},

src/main/kotlin/org/gitanimals/auction/app/GetProductFacade.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package org.gitanimals.auction.app
22

33
import org.gitanimals.auction.domain.Product
44
import org.gitanimals.auction.domain.ProductService
5+
import org.gitanimals.core.auth.InternalAuth
56
import org.springframework.data.domain.Page
67
import org.springframework.stereotype.Service
78

89
@Service
910
class GetProductFacade(
10-
private val identityApi: IdentityApi,
11+
private val internalAuth: InternalAuth,
1112
private val productService: ProductService,
1213
) {
1314
fun getProductsByToken(
@@ -17,10 +18,10 @@ class GetProductFacade(
1718
orderType: String,
1819
sortDirection: String,
1920
): Page<Product> {
20-
val user = identityApi.getUserByToken(token)
21+
val userId = internalAuth.getUserId()
2122

2223
return productService.getProductsByUserId(
23-
user.id.toLong(),
24+
userId,
2425
pageNumber,
2526
count,
2627
orderType,

src/main/kotlin/org/gitanimals/auction/app/IdentityApi.kt

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,47 @@
11
package org.gitanimals.auction.app
22

3+
import org.springframework.http.HttpHeaders
4+
import org.springframework.web.bind.annotation.PathVariable
5+
import org.springframework.web.bind.annotation.RequestHeader
6+
import org.springframework.web.bind.annotation.RequestParam
7+
import org.springframework.web.service.annotation.GetExchange
8+
import org.springframework.web.service.annotation.PostExchange
9+
310
interface IdentityApi {
411

5-
fun getUserByToken(token: String): UserResponse
12+
@GetExchange("/users")
13+
fun getUserByToken(@RequestHeader(HttpHeaders.AUTHORIZATION) token: String): UserResponse
614

7-
fun getUserById(userId: Long): UserResponse
15+
@GetExchange("/internals/users/{userId}")
16+
fun getUserById(@PathVariable("userId") userId: Long): UserResponse
817

9-
fun decreasePoint(token: String, idempotencyKey: String, point: String)
18+
@PostExchange("/internals/users/points/decreases")
19+
fun decreasePoint(
20+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
21+
@RequestParam("idempotency-key") idempotencyKey: String,
22+
@RequestParam("point") point: String,
23+
)
1024

11-
fun increasePoint(token: String, idempotencyKey: String, point: String)
25+
@PostExchange("/internals/users/points/increases")
26+
fun increasePoint(
27+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
28+
@RequestParam("idempotency-key") idempotencyKey: String,
29+
@RequestParam("point") point: String,
30+
)
1231

13-
fun increasePointById(userId: Long, idempotencyKey: String, point: String)
32+
@PostExchange("/internals/users/points/increases/{userId}")
33+
fun increasePointById(
34+
@PathVariable("userId") userId: Long,
35+
@RequestParam("idempotency-key") idempotencyKey: String,
36+
@RequestParam("point") point: String,
37+
)
1438

15-
fun decreasePointById(userId: Long, idempotencyKey: String, point: String)
39+
@PostExchange("/internals/users/points/decreases/{userId}")
40+
fun decreasePointById(
41+
@PathVariable("userId") userId: Long,
42+
@RequestParam("idempotency-key") idempotencyKey: String,
43+
@RequestParam("point") point: String,
44+
)
1645

1746

1847
data class UserResponse(

src/main/kotlin/org/gitanimals/auction/app/RegisterProductFacade.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.gitanimals.auction.domain.request.RegisterProductRequest
66
import org.gitanimals.core.TraceIdContextOrchestrator
77
import org.gitanimals.core.TraceIdContextRollback
88
import org.gitanimals.core.filter.MDCFilter.Companion.TRACE_ID
9+
import org.gitanimals.core.filter.MDCFilter.Companion.USER_ID
910
import org.rooftop.netx.api.Orchestrator
1011
import org.rooftop.netx.api.OrchestratorFactory
1112
import org.slf4j.LoggerFactory
@@ -43,6 +44,7 @@ class RegisterProductFacade(
4344
"token" to token,
4445
"idempotencyKey" to UUID.randomUUID().toString(),
4546
TRACE_ID to MDC.get(TRACE_ID),
47+
USER_ID to MDC.get(USER_ID),
4648
),
4749
).decodeResultOrThrow(Product::class)
4850
}
@@ -62,11 +64,13 @@ class RegisterProductFacade(
6264

6365
logger.warn("Cannot register product rollback delete persona...")
6466
renderApi.addPersona(
65-
token,
66-
idempotencyKey,
67-
request.personaId,
68-
request.personaLevel,
69-
request.personaType
67+
token = token,
68+
idempotencyKey = idempotencyKey,
69+
request = RenderApi.AddPersonaRequest(
70+
id = request.personaId,
71+
name = request.personaType,
72+
level = request.personaLevel,
73+
),
7074
)
7175
logger.warn("Cannot register product rollback delete persona success")
7276
}

src/main/kotlin/org/gitanimals/auction/app/RenderApi.kt

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,39 @@
11
package org.gitanimals.auction.app
22

3+
import org.springframework.http.HttpHeaders
4+
import org.springframework.web.bind.annotation.PathVariable
5+
import org.springframework.web.bind.annotation.RequestBody
6+
import org.springframework.web.bind.annotation.RequestHeader
7+
import org.springframework.web.bind.annotation.RequestParam
8+
import org.springframework.web.service.annotation.DeleteExchange
9+
import org.springframework.web.service.annotation.GetExchange
10+
import org.springframework.web.service.annotation.PostExchange
11+
312
interface RenderApi {
413

5-
fun getPersonaById(token: String, personaId: Long): PersonaResponse
14+
@GetExchange("/personas/{personaId}")
15+
fun getPersonaById(
16+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
17+
@PathVariable("personaId") personaId: Long,
18+
): PersonaResponse
619

7-
fun deletePersonaById(token: String, personaId: Long)
20+
@DeleteExchange("/internals/personas")
21+
fun deletePersonaById(
22+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
23+
@RequestParam("persona-id") personaId: Long,
24+
)
825

26+
@PostExchange("/internals/personas")
927
fun addPersona(
10-
token: String,
11-
idempotencyKey: String,
12-
personaId: Long,
13-
personaLevel: Int,
14-
personaType: String,
28+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
29+
@RequestParam("idempotency-key") idempotencyKey: String,
30+
@RequestBody request: AddPersonaRequest
31+
)
32+
33+
data class AddPersonaRequest(
34+
val id: Long,
35+
val name: String,
36+
val level: Int,
1537
)
1638

1739
data class PersonaResponse(

src/main/kotlin/org/gitanimals/auction/controller/AuctionController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class AuctionController(
110110
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
111111
@RequestBody changeProductRequest: ChangeProductRequest,
112112
): ProductResponse {
113-
val product = changeProductFacade.changeProduct(token, changeProductRequest)
113+
val product = changeProductFacade.changeProduct(changeProductRequest)
114114

115115
return ProductResponse.from(product)
116116
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.gitanimals.auction.infra
2+
3+
import org.gitanimals.auction.app.IdentityApi
4+
import org.gitanimals.auction.app.RenderApi
5+
import org.gitanimals.core.HttpClientErrorHandler
6+
import org.gitanimals.core.auth.InternalAuthRequestInterceptor
7+
import org.gitanimals.core.filter.MDCFilter
8+
import org.slf4j.MDC
9+
import org.springframework.beans.factory.annotation.Value
10+
import org.springframework.context.annotation.Bean
11+
import org.springframework.context.annotation.Configuration
12+
import org.springframework.web.client.RestClient
13+
import org.springframework.web.client.support.RestClientAdapter
14+
import org.springframework.web.service.invoker.HttpServiceProxyFactory
15+
16+
@Configuration
17+
class AuctionHttpClientConfigurer(
18+
private val internalAuthRequestInterceptor: InternalAuthRequestInterceptor,
19+
@Value("\${internal.secret}") private val internalSecret: String,
20+
) {
21+
22+
@Bean
23+
fun auctionIdentityApi(): IdentityApi {
24+
val restClient = RestClient
25+
.builder()
26+
.requestInterceptor { request, body, execution ->
27+
request.headers.add(MDCFilter.TRACE_ID, MDC.get(MDCFilter.TRACE_ID))
28+
if (request.uri.path.startsWith("/internals")) {
29+
request.headers.add(INTERNAL_SECRET_KEY, internalSecret)
30+
}
31+
execution.execute(request, body)
32+
}
33+
.requestInterceptor(internalAuthRequestInterceptor)
34+
.defaultStatusHandler(HttpClientErrorHandler())
35+
.baseUrl("https://api.gitanimals.org")
36+
.build()
37+
38+
val httpServiceProxyFactory = HttpServiceProxyFactory
39+
.builderFor(RestClientAdapter.create(restClient))
40+
.build()
41+
42+
return httpServiceProxyFactory.createClient(IdentityApi::class.java)
43+
}
44+
45+
@Bean
46+
fun auctionRenderApi(): RenderApi {
47+
val restClient = RestClient
48+
.builder()
49+
.requestInterceptor { request, body, execution ->
50+
request.headers.add(MDCFilter.TRACE_ID, MDC.get(MDCFilter.TRACE_ID))
51+
if (request.uri.path.startsWith("/internals")) {
52+
request.headers.add(INTERNAL_SECRET_KEY, internalSecret)
53+
}
54+
execution.execute(request, body)
55+
}
56+
.requestInterceptor(internalAuthRequestInterceptor)
57+
.defaultStatusHandler(HttpClientErrorHandler())
58+
.baseUrl("https://render.gitanimals.org")
59+
.build()
60+
61+
val httpServiceProxyFactory = HttpServiceProxyFactory
62+
.builderFor(RestClientAdapter.create(restClient))
63+
.build()
64+
65+
return httpServiceProxyFactory.createClient(RenderApi::class.java)
66+
}
67+
68+
private companion object {
69+
private const val INTERNAL_SECRET_KEY = "Internal-Secret"
70+
}
71+
}

src/main/kotlin/org/gitanimals/auction/infra/RestClientConfigurer.kt

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

0 commit comments

Comments
 (0)