init: 클린 기반 auth 서버 설계

This commit is contained in:
DongHyeonka
2026-07-24 14:30:18 +09:00
parent 471db0203d
commit 8a1ac1e769
3642 changed files with 275893 additions and 1 deletions
@@ -0,0 +1,96 @@
<?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>UserJpaEntity.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">infrastructure</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.infrastructure.persistence.user.entity</a> &gt; <span class="el_source">UserJpaEntity.java</span></div><h1>UserJpaEntity.java</h1><pre class="source lang-java linenums">package com.project.auth.infrastructure.persistence.user.entity;
import com.project.auth.domain.user.model.AuthProvider;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.Instant;
import java.util.Objects;
import java.util.UUID;
@Entity
@Table(name = &quot;users&quot;)
public class UserJpaEntity {
@Id
@Column(name = &quot;id&quot;, nullable = false, updatable = false)
private UUID id;
@Column(name = &quot;email&quot;, nullable = false, columnDefinition = &quot;text&quot;)
private String email;
@Column(name = &quot;name&quot;, nullable = false, columnDefinition = &quot;text&quot;)
private String name;
@Enumerated(EnumType.STRING)
@Column(name = &quot;provider&quot;, nullable = false, columnDefinition = &quot;text&quot;)
private AuthProvider provider;
@Column(name = &quot;provider_subject&quot;, nullable = false, columnDefinition = &quot;text&quot;)
private String providerSubject;
@Column(name = &quot;created_at&quot;, nullable = false, updatable = false)
private Instant createdAt;
@Column(name = &quot;updated_at&quot;, nullable = false, insertable = false, updatable = false)
private Instant updatedAt;
<span class="fc" id="L42"> protected UserJpaEntity() {</span>
<span class="fc" id="L43"> }</span>
private UserJpaEntity(
UUID id,
String email,
String name,
AuthProvider provider,
String providerSubject,
Instant createdAt
<span class="fc" id="L52"> ) {</span>
<span class="fc" id="L53"> this.id = Objects.requireNonNull(id, &quot;id must not be null&quot;);</span>
<span class="fc" id="L54"> this.email = Objects.requireNonNull(email, &quot;email must not be null&quot;);</span>
<span class="fc" id="L55"> this.name = Objects.requireNonNull(name, &quot;name must not be null&quot;);</span>
<span class="fc" id="L56"> this.provider = Objects.requireNonNull(provider, &quot;provider must not be null&quot;);</span>
<span class="fc" id="L57"> this.providerSubject = Objects.requireNonNull(providerSubject, &quot;providerSubject must not be null&quot;);</span>
<span class="fc" id="L58"> this.createdAt = Objects.requireNonNull(createdAt, &quot;createdAt must not be null&quot;);</span>
<span class="fc" id="L59"> }</span>
public static UserJpaEntity of(
UUID id,
String email,
String name,
AuthProvider provider,
String providerSubject,
Instant createdAt
) {
<span class="fc" id="L69"> return new UserJpaEntity(id, email, name, provider, providerSubject, createdAt);</span>
}
public UUID getId() {
<span class="fc" id="L73"> return id;</span>
}
public String getEmail() {
<span class="fc" id="L77"> return email;</span>
}
public String getName() {
<span class="fc" id="L81"> return name;</span>
}
public AuthProvider getProvider() {
<span class="fc" id="L85"> return provider;</span>
}
public String getProviderSubject() {
<span class="fc" id="L89"> return providerSubject;</span>
}
public Instant getCreatedAt() {
<span class="fc" id="L93"> return createdAt;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user.entity</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user.entity</span></div><h1>com.project.auth.infrastructure.persistence.user.entity</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 70</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserJpaEntity.html" class="el_class">UserJpaEntity</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user.entity</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user.entity</span></div><h1>com.project.auth.infrastructure.persistence.user.entity</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 70</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserJpaEntity.java.html" class="el_source">UserJpaEntity.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">9</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>UserPersistenceMapper</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><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">infrastructure</a> &gt; <a href="index.html" class="el_package">com.project.auth.infrastructure.persistence.user.mapper</a> &gt; <span class="el_class">UserPersistenceMapper</span></div><h1>UserPersistenceMapper</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 40</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserPersistenceMapper.java.html#L26" class="el_method">toDomain(UserJpaEntity)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="UserPersistenceMapper.java.html#L14" class="el_method">toEntity(User)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="73" height="10" title="14" alt="14"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="UserPersistenceMapper.java.html#L11" class="el_method">UserPersistenceMapper()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,42 @@
<?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>UserPersistenceMapper.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">infrastructure</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.infrastructure.persistence.user.mapper</a> &gt; <span class="el_source">UserPersistenceMapper.java</span></div><h1>UserPersistenceMapper.java</h1><pre class="source lang-java linenums">package com.project.auth.infrastructure.persistence.user.mapper;
import com.project.auth.domain.user.exception.DomainException;
import com.project.auth.domain.user.model.User;
import com.project.auth.domain.user.model.UserEmail;
import com.project.auth.domain.user.model.UserName;
import com.project.auth.infrastructure.persistence.user.entity.UserJpaEntity;
import com.project.auth.infrastructure.support.exception.InfrastructureErrorCode;
import com.project.auth.infrastructure.support.exception.InfrastructureException;
<span class="fc" id="L11">public class UserPersistenceMapper {</span>
public UserJpaEntity toEntity(User user) {
<span class="fc" id="L14"> return UserJpaEntity.of(</span>
<span class="fc" id="L15"> user.getId(),</span>
<span class="fc" id="L16"> user.getEmail(),</span>
<span class="fc" id="L17"> user.getName(),</span>
<span class="fc" id="L18"> user.getProvider(),</span>
<span class="fc" id="L19"> user.getProviderSubject(),</span>
<span class="fc" id="L20"> user.getCreatedAt()</span>
);
}
public User toDomain(UserJpaEntity userJpaEntity) {
try {
<span class="fc" id="L26"> return User.restore(</span>
<span class="fc" id="L27"> userJpaEntity.getId(),</span>
<span class="fc" id="L28"> UserEmail.from(userJpaEntity.getEmail()),</span>
<span class="fc" id="L29"> UserName.from(userJpaEntity.getName()),</span>
<span class="fc" id="L30"> userJpaEntity.getProvider(),</span>
<span class="fc" id="L31"> userJpaEntity.getProviderSubject(),</span>
<span class="fc" id="L32"> userJpaEntity.getCreatedAt()</span>
);
<span class="fc" id="L34"> } catch (DomainException | IllegalArgumentException | NullPointerException exception) {</span>
<span class="fc" id="L35"> throw new InfrastructureException(</span>
InfrastructureErrorCode.PERSISTED_DATA_INVALID,
exception
);
}
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user.mapper</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user.mapper</span></div><h1>com.project.auth.infrastructure.persistence.user.mapper</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 40</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserPersistenceMapper.html" class="el_class">UserPersistenceMapper</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="40" alt="40"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user.mapper</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user.mapper</span></div><h1>com.project.auth.infrastructure.persistence.user.mapper</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 40</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">17</td><td class="ctr1">0</td><td class="ctr2">3</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserPersistenceMapper.java.html" class="el_source">UserPersistenceMapper.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="40" alt="40"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">3</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>JpaUserRepositoryAdapter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><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">infrastructure</a> &gt; <a href="index.html" class="el_package">com.project.auth.infrastructure.persistence.user</a> &gt; <span class="el_class">JpaUserRepositoryAdapter</span></div><h1>JpaUserRepositoryAdapter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">28 of 62</td><td class="ctr2">54%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">5</td><td class="ctr2">12</td><td class="ctr1">3</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a1"><a href="JpaUserRepositoryAdapter.java.html#L33" class="el_method">findByProviderAndProviderSubject(AuthProvider, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="82" height="10" title="13" alt="13"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="JpaUserRepositoryAdapter.java.html#L39" class="el_method">existsByEmail(UserEmail)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="69" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="JpaUserRepositoryAdapter.java.html#L46" class="el_method">register(User)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="JpaUserRepositoryAdapter.java.html#L50" class="el_method">save(User)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="JpaUserRepositoryAdapter.java.html#L20" class="el_method">JpaUserRepositoryAdapter(UserJpaRepository, UserPersistenceMapper)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="94" height="10" title="15" alt="15"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,56 @@
<?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>JpaUserRepositoryAdapter.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">infrastructure</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.infrastructure.persistence.user</a> &gt; <span class="el_source">JpaUserRepositoryAdapter.java</span></div><h1>JpaUserRepositoryAdapter.java</h1><pre class="source lang-java linenums">package com.project.auth.infrastructure.persistence.user;
import com.project.auth.application.auth.identity.port.out.LoadKeycloakUserPort;
import com.project.auth.application.auth.identity.port.out.RegisterKeycloakUserPort;
import com.project.auth.domain.user.model.AuthProvider;
import com.project.auth.domain.user.model.User;
import com.project.auth.domain.user.model.UserEmail;
import com.project.auth.infrastructure.persistence.user.entity.UserJpaEntity;
import com.project.auth.infrastructure.persistence.user.mapper.UserPersistenceMapper;
import com.project.auth.infrastructure.persistence.user.repository.UserJpaRepository;
import java.util.Objects;
import java.util.Optional;
public class JpaUserRepositoryAdapter implements LoadKeycloakUserPort, RegisterKeycloakUserPort {
private final UserJpaRepository userJpaRepository;
private final UserPersistenceMapper userPersistenceMapper;
<span class="fc" id="L20"> public JpaUserRepositoryAdapter(UserJpaRepository userJpaRepository, UserPersistenceMapper userPersistenceMapper) {</span>
<span class="fc" id="L21"> this.userJpaRepository = Objects.requireNonNull(userJpaRepository, &quot;userJpaRepository must not be null&quot;);</span>
<span class="fc" id="L22"> this.userPersistenceMapper = Objects.requireNonNull(</span>
userPersistenceMapper,
&quot;userPersistenceMapper must not be null&quot;
);
<span class="fc" id="L26"> }</span>
@Override
public Optional&lt;User&gt; findByProviderAndProviderSubject(
AuthProvider provider,
String providerSubject
) {
<span class="nc" id="L33"> return userJpaRepository.findByProviderAndProviderSubject(provider, providerSubject)</span>
<span class="nc" id="L34"> .map(userPersistenceMapper::toDomain);</span>
}
@Override
public boolean existsByEmail(UserEmail email) {
<span class="nc" id="L39"> UserEmail nonNullEmail = Objects.requireNonNull(email, &quot;email must not be null&quot;);</span>
<span class="nc" id="L41"> return userJpaRepository.existsByEmail(nonNullEmail.value());</span>
}
@Override
public User register(User user) {
<span class="nc" id="L46"> return save(user);</span>
}
public User save(User user) {
<span class="fc" id="L50"> User nonNullUser = Objects.requireNonNull(user, &quot;user must not be null&quot;);</span>
<span class="fc" id="L52"> UserJpaEntity savedUser = userJpaRepository.save(userPersistenceMapper.toEntity(nonNullUser));</span>
<span class="fc" id="L53"> return userPersistenceMapper.toDomain(savedUser);</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user</span></div><h1>com.project.auth.infrastructure.persistence.user</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">28 of 62</td><td class="ctr2">54%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">5</td><td class="ctr2">12</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="JpaUserRepositoryAdapter.html" class="el_class">JpaUserRepositoryAdapter</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="28" alt="28"/><img src="../jacoco-resources/greenbar.gif" width="65" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">54%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.persistence.user</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.persistence.user</span></div><h1>com.project.auth.infrastructure.persistence.user</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">28 of 62</td><td class="ctr2">54%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">5</td><td class="ctr2">12</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="JpaUserRepositoryAdapter.java.html" class="el_source">JpaUserRepositoryAdapter.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="28" alt="28"/><img src="../jacoco-resources/greenbar.gif" width="65" height="10" title="34" alt="34"/></td><td class="ctr2" id="c0">54%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">12</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>InfrastructureErrorCode</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><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">infrastructure</a> &gt; <a href="index.html" class="el_package">com.project.auth.infrastructure.support.exception</a> &gt; <span class="el_class">InfrastructureErrorCode</span></div><h1>InfrastructureErrorCode</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3 of 36</td><td class="ctr2">91%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">9</td><td class="ctr1">1</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="InfrastructureErrorCode.java.html#L23" class="el_method">code()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="InfrastructureErrorCode.java.html#L9" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="InfrastructureErrorCode.java.html#L16" class="el_method">InfrastructureErrorCode(String, int, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="69" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="InfrastructureErrorCode.java.html#L28" class="el_method">message()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,31 @@
<?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>InfrastructureErrorCode.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">infrastructure</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.infrastructure.support.exception</a> &gt; <span class="el_source">InfrastructureErrorCode.java</span></div><h1>InfrastructureErrorCode.java</h1><pre class="source lang-java linenums">package com.project.auth.infrastructure.support.exception;
import com.project.auth.application.support.exception.ExternalErrorCode;
/**
* 내부 전용 인프라 장애 코드. 로그·모니터링·알람 라우팅 분류 용도로만 사용한다.
* 외부 HTTP 응답에서는 의도적으로 COMMON-999로 정규화되어 노출된다.
*/
<span class="fc" id="L9">public enum InfrastructureErrorCode implements ExternalErrorCode {</span>
<span class="fc" id="L10"> PERSISTED_DATA_INVALID(&quot;INFRA-003&quot;, &quot;저장된 데이터가 도메인 규칙에 맞지 않습니다.&quot;),</span>
<span class="fc" id="L11"> EXTERNAL_SERVICE_ERROR(&quot;INFRA-999&quot;, &quot;외부 시스템 연동 중 오류가 발생했습니다.&quot;);</span>
private final String code;
private final String message;
<span class="fc" id="L16"> InfrastructureErrorCode(String code, String message) {</span>
<span class="fc" id="L17"> this.code = code;</span>
<span class="fc" id="L18"> this.message = message;</span>
<span class="fc" id="L19"> }</span>
@Override
public String code() {
<span class="nc" id="L23"> return code;</span>
}
@Override
public String message() {
<span class="fc" id="L28"> return message;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>InfrastructureException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><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">infrastructure</a> &gt; <a href="index.html" class="el_package">com.project.auth.infrastructure.support.exception</a> &gt; <span class="el_class">InfrastructureException</span></div><h1>InfrastructureException</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">23 of 35</td><td class="ctr2">34%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">5</td><td class="ctr1">9</td><td class="ctr2">13</td><td class="ctr1">3</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a1"><a href="InfrastructureException.java.html#L21" class="el_method">InfrastructureException(InfrastructureErrorCode)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="106" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="InfrastructureException.java.html#L36" class="el_method">InfrastructureException(InfrastructureErrorCode, String, Throwable)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="106" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="InfrastructureException.java.html#L26" class="el_method">InfrastructureException(InfrastructureErrorCode, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="InfrastructureException.java.html#L31" class="el_method">InfrastructureException(InfrastructureErrorCode, Throwable)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="InfrastructureException.java.html#L41" class="el_method">getErrorCode()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1,44 @@
<?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>InfrastructureException.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">infrastructure</a> &gt; <a href="index.source.html" class="el_package">com.project.auth.infrastructure.support.exception</a> &gt; <span class="el_source">InfrastructureException.java</span></div><h1>InfrastructureException.java</h1><pre class="source lang-java linenums">package com.project.auth.infrastructure.support.exception;
/**
* 인프라 계층(DB, 외부 HTTP 클라이언트, 시크릿 저장소 등) 장애를 표현하는 내부 전용 예외.
*
* 등록된 @ExceptionHandler는 ERROR 레벨로 전체 스택트레이스와 함께 {@code detailMessage}를
* 로깅한다. 따라서 어댑터는 {@code detailMessage}에 민감 정보를 절대 포함시키면 안 된다.
*
* detailMessage에 금지: 커넥션 문자열, DB 자격 증명, Vault 토큰, JWT 페이로드 내용,
* 정제되지 않은 사용자 입력, 외부 호출의 전체 요청/응답 바디.
*
* detailMessage에 허용: 식별 불가 형태의 상관 ID, 호스트/서비스 이름, 정제된 상태 코드,
* 장애 모드를 설명하는 일반 문장. 이 detail은 운영자 트리아지용이며, 클라이언트는 항상
* COMMON-999만 받는다.
*/
public class InfrastructureException extends RuntimeException {
private final InfrastructureErrorCode errorCode;
public InfrastructureException(InfrastructureErrorCode errorCode) {
<span class="nc" id="L21"> super(errorCode.message());</span>
<span class="nc" id="L22"> this.errorCode = errorCode;</span>
<span class="nc" id="L23"> }</span>
public InfrastructureException(InfrastructureErrorCode errorCode, String detailMessage) {
<span class="nc" id="L26"> super(detailMessage);</span>
<span class="nc" id="L27"> this.errorCode = errorCode;</span>
<span class="nc" id="L28"> }</span>
public InfrastructureException(InfrastructureErrorCode errorCode, Throwable cause) {
<span class="fc" id="L31"> super(errorCode.message(), cause);</span>
<span class="fc" id="L32"> this.errorCode = errorCode;</span>
<span class="fc" id="L33"> }</span>
public InfrastructureException(InfrastructureErrorCode errorCode, String detailMessage, Throwable cause) {
<span class="nc" id="L36"> super(detailMessage, cause);</span>
<span class="nc" id="L37"> this.errorCode = errorCode;</span>
<span class="nc" id="L38"> }</span>
public InfrastructureErrorCode getErrorCode() {
<span class="fc" id="L41"> return errorCode;</span>
}
}
</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.support.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.support.exception</span></div><h1>com.project.auth.infrastructure.support.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">26 of 71</td><td class="ctr2">63%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">9</td><td class="ctr1">10</td><td class="ctr2">22</td><td class="ctr1">4</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="InfrastructureException.html" class="el_class">InfrastructureException</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="76" height="10" title="23" alt="23"/><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">34%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="InfrastructureErrorCode.html" class="el_class">InfrastructureErrorCode</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="110" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">91%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
@@ -0,0 +1 @@
<?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>com.project.auth.infrastructure.support.exception</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">infrastructure</a> &gt; <span class="el_package">com.project.auth.infrastructure.support.exception</span></div><h1>com.project.auth.infrastructure.support.exception</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">26 of 71</td><td class="ctr2">63%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">9</td><td class="ctr1">10</td><td class="ctr2">22</td><td class="ctr1">4</td><td class="ctr2">9</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="InfrastructureException.java.html" class="el_source">InfrastructureException.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="76" height="10" title="23" alt="23"/><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">34%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">3</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="InfrastructureErrorCode.java.html" class="el_source">InfrastructureErrorCode.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="110" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">91%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">4</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.13.202504020838</span></div></body></html>
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

@@ -0,0 +1,13 @@
/* Pretty printing styles. Used with prettify.js. */
.str { color: #2A00FF; }
.kwd { color: #7F0055; font-weight:bold; }
.com { color: #3F5FBF; }
.typ { color: #606; }
.lit { color: #066; }
.pun { color: #660; }
.pln { color: #000; }
.tag { color: #008; }
.atn { color: #606; }
.atv { color: #080; }
.dec { color: #606; }
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

@@ -0,0 +1,243 @@
body, td {
font-family:sans-serif;
font-size:10pt;
}
h1 {
font-weight:bold;
font-size:18pt;
}
.breadcrumb {
border:#d6d3ce 1px solid;
padding:2px 4px 2px 4px;
}
.breadcrumb .info {
float:right;
}
.breadcrumb .info a {
margin-left:8px;
}
.el_report {
padding-left:18px;
background-image:url(report.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_group {
padding-left:18px;
background-image:url(group.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_bundle {
padding-left:18px;
background-image:url(bundle.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_package {
padding-left:18px;
background-image:url(package.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_class {
padding-left:18px;
background-image:url(class.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_source {
padding-left:18px;
background-image:url(source.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_method {
padding-left:18px;
background-image:url(method.gif);
background-position:left center;
background-repeat:no-repeat;
}
.el_session {
padding-left:18px;
background-image:url(session.gif);
background-position:left center;
background-repeat:no-repeat;
}
pre.source {
border:#d6d3ce 1px solid;
font-family:monospace;
}
pre.source ol {
margin-bottom: 0px;
margin-top: 0px;
}
pre.source li {
border-left: 1px solid #D6D3CE;
color: #A0A0A0;
padding-left: 0px;
}
pre.source span.fc {
background-color:#ccffcc;
}
pre.source span.nc {
background-color:#ffaaaa;
}
pre.source span.pc {
background-color:#ffffcc;
}
pre.source span.bfc {
background-image: url(branchfc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bfc:hover {
background-color:#80ff80;
}
pre.source span.bnc {
background-image: url(branchnc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bnc:hover {
background-color:#ff8080;
}
pre.source span.bpc {
background-image: url(branchpc.gif);
background-repeat: no-repeat;
background-position: 2px center;
}
pre.source span.bpc:hover {
background-color:#ffff80;
}
table.coverage {
empty-cells:show;
border-collapse:collapse;
}
table.coverage thead {
background-color:#e0e0e0;
}
table.coverage thead td {
white-space:nowrap;
padding:2px 14px 0px 6px;
border-bottom:#b0b0b0 1px solid;
}
table.coverage thead td.bar {
border-left:#cccccc 1px solid;
}
table.coverage thead td.ctr1 {
text-align:right;
border-left:#cccccc 1px solid;
}
table.coverage thead td.ctr2 {
text-align:right;
padding-left:2px;
}
table.coverage thead td.sortable {
cursor:pointer;
background-image:url(sort.gif);
background-position:right center;
background-repeat:no-repeat;
}
table.coverage thead td.up {
background-image:url(up.gif);
}
table.coverage thead td.down {
background-image:url(down.gif);
}
table.coverage tbody td {
white-space:nowrap;
padding:2px 6px 2px 6px;
border-bottom:#d6d3ce 1px solid;
}
table.coverage tbody tr:hover {
background: #f0f0d0 !important;
}
table.coverage tbody td.bar {
border-left:#e8e8e8 1px solid;
}
table.coverage tbody td.ctr1 {
text-align:right;
padding-right:14px;
border-left:#e8e8e8 1px solid;
}
table.coverage tbody td.ctr2 {
text-align:right;
padding-right:14px;
padding-left:2px;
}
table.coverage tfoot td {
white-space:nowrap;
padding:2px 6px 2px 6px;
}
table.coverage tfoot td.bar {
border-left:#e8e8e8 1px solid;
}
table.coverage tfoot td.ctr1 {
text-align:right;
padding-right:14px;
border-left:#e8e8e8 1px solid;
}
table.coverage tfoot td.ctr2 {
text-align:right;
padding-right:14px;
padding-left:2px;
}
.footer {
margin-top:20px;
border-top:#d6d3ce 1px solid;
padding-top:2px;
font-size:8pt;
color:#a0a0a0;
}
.footer a {
color:#a0a0a0;
}
.right {
float:right;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

@@ -0,0 +1,148 @@
/*******************************************************************************
* Copyright (c) 2009, 2025 Mountainminds GmbH & Co. KG and Contributors
* This program and the accompanying materials are made available under
* the terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
(function () {
/**
* Sets the initial sorting derived from the hash.
*
* @param linkelementids
* list of element ids to search for links to add sort inidcator
* hash links
*/
function initialSort(linkelementids) {
window.linkelementids = linkelementids;
var hash = window.location.hash;
if (hash) {
var m = hash.match(/up-./);
if (m) {
var header = window.document.getElementById(m[0].charAt(3));
if (header) {
sortColumn(header, true);
}
return;
}
var m = hash.match(/dn-./);
if (m) {
var header = window.document.getElementById(m[0].charAt(3));
if (header) {
sortColumn(header, false);
}
return
}
}
}
/**
* Sorts the columns with the given header dependening on the current sort state.
*/
function toggleSort(header) {
var sortup = header.className.indexOf('down ') == 0;
sortColumn(header, sortup);
}
/**
* Sorts the columns with the given header in the given direction.
*/
function sortColumn(header, sortup) {
var table = header.parentNode.parentNode.parentNode;
var body = table.tBodies[0];
var colidx = getNodePosition(header);
resetSortedStyle(table);
var rows = body.rows;
var sortedrows = [];
for (var i = 0; i < rows.length; i++) {
r = rows[i];
sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
}
var hash;
if (sortup) {
for (var i = sortedrows.length - 1; i >= 0; i--) {
body.appendChild(sortedrows[i]);
}
header.className = 'up ' + header.className;
hash = 'up-' + header.id;
} else {
for (var i = 0; i < sortedrows.length; i++) {
body.appendChild(sortedrows[i]);
}
header.className = 'down ' + header.className;
hash = 'dn-' + header.id;
}
setHash(hash);
}
/**
* Adds the sort indicator as a hash to the document URL and all links.
*/
function setHash(hash) {
window.document.location.hash = hash;
ids = window.linkelementids;
for (var i = 0; i < ids.length; i++) {
setHashOnAllLinks(document.getElementById(ids[i]), hash);
}
}
/**
* Extend all links within the given tag with the given hash.
*/
function setHashOnAllLinks(tag, hash) {
links = tag.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
var a = links[i];
var href = a.href;
var hashpos = href.indexOf("#");
if (hashpos != -1) {
href = href.substring(0, hashpos);
}
a.href = href + "#" + hash;
}
}
/**
* Calculates the position of a element within its parent.
*/
function getNodePosition(element) {
var pos = -1;
while (element) {
element = element.previousSibling;
pos++;
}
return pos;
}
/**
* Remove the sorting indicator style from all headers.
*/
function resetSortedStyle(table) {
for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
if (c.className) {
if (c.className.indexOf('down ') == 0) {
c.className = c.className.slice(5);
}
if (c.className.indexOf('up ') == 0) {
c.className = c.className.slice(3);
}
}
}
}
window['initialSort'] = initialSort;
window['toggleSort'] = toggleSort;
})();
Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long