diff --git a/common/utils/build.gradle.kts b/common/utils/build.gradle.kts new file mode 100644 index 00000000..ad519ea1 --- /dev/null +++ b/common/utils/build.gradle.kts @@ -0,0 +1,5 @@ +dependencies { + implementation("org.slf4j:slf4j-api:2.0.17") + + testImplementation("ch.qos.logback:logback-classic:1.5.18") +} \ No newline at end of file diff --git a/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtil.kt b/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtil.kt new file mode 100644 index 00000000..f96e2b06 --- /dev/null +++ b/common/utils/src/main/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtil.kt @@ -0,0 +1,26 @@ +package com.sangdol.common.utils + +import org.slf4j.MDC +import java.util.* + +object MdcPrincipalIdUtil { + const val MDC_PRINCIPAL_ID_KEY = "principal_id" + + fun extractAsLongOrNull(): Long? { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLong() + } + + fun extractAsOptionalLongOrEmpty(): Optional { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.let { + Optional.of(it.toLong()) + } ?: Optional.empty() + } + + fun set(id: String) { + MDC.put(MDC_PRINCIPAL_ID_KEY, id) + } + + fun clear() { + MDC.remove(MDC_PRINCIPAL_ID_KEY) + } +} diff --git a/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt new file mode 100644 index 00000000..388c61d8 --- /dev/null +++ b/common/utils/src/test/kotlin/com/sangdol/common/utils/MdcPrincipalIdUtilTest.kt @@ -0,0 +1,28 @@ +package com.sangdol.common.utils + +import io.kotest.core.spec.style.StringSpec +import io.kotest.matchers.shouldBe +import java.util.* + +class MdcPrincipalIdUtilTest : StringSpec({ + + val id = 1872847943L + + "값을 설정한다." { + MdcPrincipalIdUtil.set(id.toString()).also { + MdcPrincipalIdUtil.extractAsLongOrNull() shouldBe id + MdcPrincipalIdUtil.extractAsOptionalLongOrEmpty() shouldBe Optional.of(id) + } + } + + "값을 제거한다." { + MdcPrincipalIdUtil.set(id.toString()).also { + MdcPrincipalIdUtil.extractAsLongOrNull() shouldBe id + } + + MdcPrincipalIdUtil.clear().also { + MdcPrincipalIdUtil.extractAsLongOrNull() shouldBe null + MdcPrincipalIdUtil.extractAsOptionalLongOrEmpty() shouldBe Optional.empty() + } + } +}) \ No newline at end of file