Files

69 lines
4.0 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RequestBoundApiResultFactory.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">project-auth-server</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.config.web</a> &gt; <span class="el_source">RequestBoundApiResultFactory.java</span></div><h1>RequestBoundApiResultFactory.java</h1><pre class="source lang-java linenums">package com.project.auth.config.web;
import com.project.auth.presentation.support.response.ApiResult;
import com.project.auth.presentation.support.response.ApiResultFactory;
import org.slf4j.MDC;
import java.time.Clock;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.Objects;
public class RequestBoundApiResultFactory implements ApiResultFactory {
private static final String TRACE_ID_KEY = &quot;traceId&quot;;
/**
* MDC에 traceId가 없을 때 사용하는 sentinel. JSON {@code null}로 그대로 두면
* TraceIdFilter가 누락/오설정된 사실이 가려지므로, 명시적인 placeholder 문자열로
* 로그·대시보드에서 즉시 식별 가능하게 한다.
*/
static final String MISSING_TRACE_ID = &quot;-&quot;;
<span class="fc" id="L22"> private static final DateTimeFormatter TIMESTAMP_FORMATTER = DateTimeFormatter.ISO_INSTANT;</span>
private final Clock clock;
<span class="fc" id="L26"> public RequestBoundApiResultFactory(Clock clock) {</span>
<span class="fc" id="L27"> this.clock = Objects.requireNonNull(clock, &quot;clock must not be null&quot;);</span>
<span class="fc" id="L28"> }</span>
@Override
public &lt;T&gt; ApiResult&lt;T&gt; success(String code, String message, T data) {
<span class="fc" id="L32"> return result(true, code, message, data, null);</span>
}
@Override
public ApiResult&lt;Void&gt; success(String code, String message) {
<span class="nc" id="L37"> return result(true, code, message, null, null);</span>
}
@Override
public ApiResult&lt;Void&gt; failure(String code, String message) {
<span class="fc" id="L42"> return result(false, code, message, null, null);</span>
}
@Override
public ApiResult&lt;Void&gt; failure(String code, String message, Map&lt;String, List&lt;String&gt;&gt; errors) {
<span class="fc" id="L47"> return result(false, code, message, null, errors);</span>
}
private &lt;T&gt; ApiResult&lt;T&gt; result(
boolean success,
String code,
String message,
T data,
Map&lt;String, List&lt;String&gt;&gt; errors
) {
<span class="fc" id="L57"> String traceId = MDC.get(TRACE_ID_KEY);</span>
<span class="fc" id="L58"> return new ApiResult&lt;&gt;(</span>
success,
code,
message,
data,
errors,
<span class="fc bfc" id="L64" title="All 4 branches covered."> traceId == null || traceId.isBlank() ? MISSING_TRACE_ID : traceId,</span>
<span class="fc" id="L65"> TIMESTAMP_FORMATTER.format(clock.instant())</span>
);
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.14.202510111229</span></div></body></html>