Skip to content

Commit

Permalink
feat: api 명세 추가 및 MDC 주입 위치 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
wjdtkdgns committed May 26, 2024
1 parent cbe3364 commit 95e33db
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.balancemania.api.balance.presentation

import com.balancemania.api.auth.model.AuthUser
import com.balancemania.api.common.dto.ManiaPageRequest
import com.balancemania.api.extension.executeWithCoroutine
import com.balancemania.api.extension.wrapOk
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springdoc.core.annotations.ParameterObject
import org.springframework.http.MediaType
import org.springframework.web.bind.annotation.*

@Tag(name = "균형 정보 API", description = "균형 정보 API")
@RestController
@RequestMapping(value = ["/api/v1/balances"], produces = [MediaType.APPLICATION_JSON_VALUE])
class BalanceController {
@Operation(summary = "균형 정보 조회")
@GetMapping
fun getBalances(
user: AuthUser,
@ParameterObject sliceRequest: ManiaPageRequest,
) = executeWithCoroutine { Unit.wrapOk() }

@Operation(summary = "균형 정보 단일 조회")
@GetMapping("/{balanceId}")
fun getBalance(
user: AuthUser,
@PathVariable balanceId: Long,
) = executeWithCoroutine { Unit.wrapOk() }

@Operation(summary = "균형 정보 등록")
@PostMapping
fun updateUserInfo(
user: AuthUser,
) = executeWithCoroutine { Unit.wrapOk() }

@Operation(summary = "균형 정보 삭제")
@DeleteMapping("/{balanceId}")
fun deleteBalance(
user: AuthUser,
@PathVariable balanceId: Long,
) = executeWithCoroutine { Unit.wrapOk() }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.balancemania.api.common.dto

import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Sort

data class ManiaPageRequest(
/** page, 0부터 시작 */
val page: Int?,
/** size, default is 10 */
val size: Int?,
/**
* **정렬조건**
* - ex: createdAt, desc
* - 각 api의 정렬 조건에 맞추어 진행
*/
val sort: String?,
) {
fun toDefault(): Pageable {
val page = this.page ?: 0
val size = this.size ?: 10
val sort = this.sort.parsingSort()

return PageRequest.of(page, size, sort)
}

fun String?.parsingSort(): Sort {
val sortSpec = (this ?: "createdAt,desc").trim().split(",")

if (sortSpec.size != 2) {
return Sort.by("createdAt").descending()
}

val requestedSortField = Sort.Order.by(sortSpec[0].trim())
val direction = Sort.Direction.fromString(sortSpec[1].trim())

return Sort.by(requestedSortField.with(direction))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.balancemania.api.config.interceptor

import com.balancemania.api.common.MDC_KEY_TRACE_ID
import io.github.oshai.kotlinlogging.KotlinLogging
import jakarta.servlet.Filter
import jakarta.servlet.FilterChain
import jakarta.servlet.ServletRequest
import jakarta.servlet.ServletResponse
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import org.slf4j.MDC
import org.springframework.core.Ordered
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component
import java.util.UUID

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MdcFilter : Filter {
val logger = KotlinLogging.logger { }

override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
val httpReq = request as HttpServletRequest
val httpRes = response as HttpServletResponse

val eventId = UUID.randomUUID().toString()
MDC.put(MDC_KEY_TRACE_ID, eventId)
logger.info { "[${MDC.get(MDC_KEY_TRACE_ID)}] ${httpReq.method} ${httpReq.requestURI} " }

chain.doFilter(request, response)

logger.info { "[${MDC.get(MDC_KEY_TRACE_ID)}] ${httpRes.status} ${httpReq.requestURI} " }
MDC.clear()
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,14 @@ package com.balancemania.api.config.web

import com.balancemania.api.auth.application.AuthFacade
import com.balancemania.api.auth.resolver.UserResolver
import com.balancemania.api.config.interceptor.MdcInterceptor
import org.springframework.context.annotation.Configuration
import org.springframework.web.method.support.HandlerMethodArgumentResolver
import org.springframework.web.servlet.config.annotation.InterceptorRegistry
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer

@Configuration
class WebMvcConfig(
private val mdcInterceptor: MdcInterceptor,
private val authFacade: AuthFacade,
) : WebMvcConfigurer {
override fun addInterceptors(registry: InterceptorRegistry) {
registry.addInterceptor(mdcInterceptor)
}
override fun addArgumentResolvers(resolvers: MutableList<HandlerMethodArgumentResolver>) {
resolvers.add(UserResolver(authFacade))
}
Expand Down

0 comments on commit 95e33db

Please sign in to comment.