-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* init: 의존성 추가 - Lombok 의존을 추가했습니다. - MySQL R2DBC Driver를 추가했습니다. * feat: Log DB Entity 구현 - Log DB Entity를 구현했습니다. - DB Entity는 post-fix로 Data를 붙입니다. * feat: Log Domain Entity 구현 - Log Domain Entity를 구현했습니다. - DB 엔티티와 매핑으로만 생성되도록 정적 팩토리 메서드를 활용했습니다. * feat: Log Domain Mapping Service 구현 - DB 엔티티와 도메인 엔티티를 매핑해주는 LogService를 구현했습니다. - 이에 따른 테스트를 추가했습니다.
- Loading branch information
Showing
7 changed files
with
157 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
logbat_view/src/main/java/info/logbat_view/domain/log/domain/Log.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package info.logbat_view.domain.log.domain; | ||
|
||
import info.logbat_view.domain.log.domain.enums.LogLevel; | ||
import java.time.LocalDateTime; | ||
import lombok.AccessLevel; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@AllArgsConstructor(access = AccessLevel.PRIVATE) | ||
public class Log { | ||
|
||
private final Long id; | ||
private final String appKey; | ||
private final LogLevel level; | ||
private final String data; | ||
private final LocalDateTime timestamp; | ||
|
||
public static Log from(LogData logData) { | ||
return new Log(logData.getLogId(), | ||
logData.getAppKey(), | ||
LogLevel.valueOf(logData.getLevel()), | ||
logData.getData(), | ||
logData.getTimestamp()); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
logbat_view/src/main/java/info/logbat_view/domain/log/domain/LogData.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package info.logbat_view.domain.log.domain; | ||
|
||
import java.time.LocalDateTime; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import org.springframework.data.annotation.Id; | ||
import org.springframework.data.relational.core.mapping.Table; | ||
|
||
@Getter | ||
@Table("logs") | ||
@AllArgsConstructor | ||
public class LogData { | ||
|
||
@Id | ||
private Long logId; | ||
private String appKey; | ||
private String level; | ||
private String data; | ||
private LocalDateTime timestamp; | ||
} |
5 changes: 5 additions & 0 deletions
5
logbat_view/src/main/java/info/logbat_view/domain/log/domain/enums/LogLevel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package info.logbat_view.domain.log.domain.enums; | ||
|
||
public enum LogLevel { | ||
INFO, ERROR | ||
} |
19 changes: 19 additions & 0 deletions
19
logbat_view/src/main/java/info/logbat_view/domain/log/domain/service/LogService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package info.logbat_view.domain.log.domain.service; | ||
|
||
import info.logbat_view.domain.log.domain.Log; | ||
import info.logbat_view.domain.log.repository.LogDataRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import reactor.core.publisher.Flux; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class LogService { | ||
|
||
private final LogDataRepository logDataRepository; | ||
|
||
public Flux<Log> findLogsByAppKey(String appKey) { | ||
return logDataRepository.findByAppKey(appKey).map(Log::from); | ||
} | ||
|
||
} |
13 changes: 13 additions & 0 deletions
13
logbat_view/src/main/java/info/logbat_view/domain/log/repository/LogDataRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package info.logbat_view.domain.log.repository; | ||
|
||
import info.logbat_view.domain.log.domain.LogData; | ||
import org.springframework.data.repository.reactive.ReactiveCrudRepository; | ||
import org.springframework.lang.NonNull; | ||
import org.springframework.stereotype.Repository; | ||
import reactor.core.publisher.Flux; | ||
|
||
@Repository | ||
public interface LogDataRepository extends ReactiveCrudRepository<LogData, Long> { | ||
|
||
Flux<LogData> findByAppKey(@NonNull String appKey); | ||
} |
62 changes: 62 additions & 0 deletions
62
logbat_view/src/test/java/info/logbat_view/domain/log/domain/service/LogServiceTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package info.logbat_view.domain.log.domain.service; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
import static org.mockito.ArgumentMatchers.any; | ||
import static org.mockito.BDDMockito.given; | ||
|
||
import info.logbat_view.domain.log.domain.LogData; | ||
import info.logbat_view.domain.log.domain.enums.LogLevel; | ||
import info.logbat_view.domain.log.repository.LogDataRepository; | ||
import java.time.LocalDateTime; | ||
import java.util.UUID; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Nested; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.api.extension.ExtendWith; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.junit.jupiter.MockitoExtension; | ||
import reactor.core.publisher.Flux; | ||
import reactor.test.StepVerifier; | ||
|
||
@ExtendWith(MockitoExtension.class) | ||
@DisplayName("LogService는") | ||
class LogServiceTest { | ||
|
||
@InjectMocks | ||
private LogService logService; | ||
|
||
@Mock | ||
private LogDataRepository logDataRepository; | ||
|
||
private final Long expectedLogDataId = 1L; | ||
private final String expectedAppKey = UUID.randomUUID().toString(); | ||
private final LogLevel expectedLogLevel = LogLevel.ERROR; | ||
private final String expectedData = "data"; | ||
private final LocalDateTime expectedTimestamp = LocalDateTime.of(2024, 8, 15, 12, 0, 0, 0); | ||
private final LogData expectedLogData = new LogData(expectedLogDataId, expectedAppKey, | ||
expectedLogLevel.name(), expectedData, expectedTimestamp); | ||
|
||
@Nested | ||
@DisplayName("AppKey로 Log들을 조회할 때") | ||
class whenGetAppsByAppKey { | ||
|
||
@Test | ||
@DisplayName("조회된 LogData들을 Log로 매핑해서 반환한다.") | ||
void shouldReturnApps() { | ||
// Arrange | ||
given(logDataRepository.findByAppKey(any(String.class))).willReturn( | ||
Flux.just(expectedLogData)); | ||
// Act & Assert | ||
StepVerifier.create(logService.findLogsByAppKey(expectedAppKey)) | ||
.expectNextMatches(log -> { | ||
assertThat(log).extracting("id", "appKey", "level", "data", "timestamp") | ||
.containsExactly(expectedLogDataId, expectedAppKey, expectedLogLevel, | ||
expectedData, expectedTimestamp); | ||
return true; | ||
}) | ||
.verifyComplete(); | ||
} | ||
|
||
} | ||
} |