Skip to content

Commit c74e617

Browse files
authored
v1.0.1
v1.0.1
2 parents 098a1a9 + cbff2cf commit c74e617

File tree

15 files changed

+140
-25
lines changed

15 files changed

+140
-25
lines changed

admin/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ springdoc:
3434
enabled: true
3535
override-with-generic-response: false
3636

37+
app:
38+
module-name: admin
39+
3740
---
3841
spring:
3942
config:

apis/src/main/kotlin/org/yapp/apis/config/InfraConfig.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import org.yapp.infra.InfraBaseConfigGroup
1313
InfraBaseConfigGroup.REST_CLIENT,
1414
InfraBaseConfigGroup.QUERY_DSL,
1515
InfraBaseConfigGroup.PAGE,
16-
InfraBaseConfigGroup.AOP
16+
InfraBaseConfigGroup.AOP,
17+
InfraBaseConfigGroup.SENTRY
1718
]
1819
)
1920
class InfraConfig

apis/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ springdoc:
4242
enabled: true
4343
override-with-generic-response: false
4444

45+
app:
46+
module-name: apis
47+
4548
---
4649
spring:
4750
config:

batch/src/main/resources/application.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ spring:
2323
max-file-size: 10MB
2424
max-request-size: 30MB
2525

26+
app:
27+
module-name: batch
28+
2629
---
2730
spring:
2831
config:

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,9 @@ object Dependencies {
7070
object Prometheus {
7171
const val MICROMETER_PROMETHEUS_REGISTRY = "io.micrometer:micrometer-registry-prometheus"
7272
}
73+
74+
object Sentry {
75+
const val SPRING_BOOT_STARTER = "io.sentry:sentry-spring-boot-starter-jakarta:8.22.0"
76+
const val LOG4J2 = "io.sentry:sentry-log4j2:8.22.0"
77+
}
7378
}

domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,36 @@ class ReadingRecordDomainService(
102102
sort: ReadingRecordSortType?,
103103
pageable: Pageable
104104
): Page<ReadingRecordInfoVO> {
105-
return readingRecordRepository.findReadingRecordsByDynamicCondition(userBookId, sort, pageable)
106-
.map { buildReadingRecordInfoVO(it) }
105+
val readingRecordPage = readingRecordRepository.findReadingRecordsByDynamicCondition(userBookId, sort, pageable)
106+
if (readingRecordPage.isEmpty) {
107+
return Page.empty(pageable)
108+
}
109+
110+
val readingRecords = readingRecordPage.content
111+
val readingRecordIds = readingRecords.map { it.id.value }
112+
113+
val readingRecordTags = readingRecordTagRepository.findByReadingRecordIdIn(readingRecordIds)
114+
val tagIds = readingRecordTags.map { it.tagId.value }
115+
val tagsById = tagRepository.findByIds(tagIds).associateBy { it.id.value }
116+
117+
val tagsByReadingRecordId = readingRecordTags
118+
.groupBy { it.readingRecordId.value }
119+
.mapValues { (_, tags) ->
120+
tags.mapNotNull { tagsById[it.tagId.value] }
121+
}
122+
123+
val userBook = userBookRepository.findById(userBookId)
124+
125+
return readingRecordPage.map { readingRecord ->
126+
ReadingRecordInfoVO.newInstance(
127+
readingRecord = readingRecord,
128+
emotionTags = tagsByReadingRecordId[readingRecord.id.value]?.map { it.name } ?: emptyList(),
129+
bookTitle = userBook?.title,
130+
bookPublisher = userBook?.publisher,
131+
bookCoverImageUrl = userBook?.coverImageUrl,
132+
author = userBook?.author
133+
)
134+
}
107135
}
108136

109137
fun modifyReadingRecord(

domain/src/main/kotlin/org/yapp/domain/readingrecordtag/ReadingRecordTagRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import java.util.UUID
55
interface ReadingRecordTagRepository {
66
fun saveAll(readingRecordTags: List<ReadingRecordTag>): List<ReadingRecordTag>
77
fun findByReadingRecordId(readingRecordId: UUID): List<ReadingRecordTag>
8+
fun findByReadingRecordIdIn(readingRecordIds: List<UUID>): List<ReadingRecordTag>
89
fun deleteAllByReadingRecordId(readingRecordId: UUID)
910
fun countTagsByUserIdAndUserBookIdAndCategories(userId: UUID, userBookId: UUID, categories: List<String>): Map<String, Int>
1011
}

infra/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ dependencies {
1717

1818
implementation(Dependencies.QueryDsl.JPA)
1919

20+
implementation(Dependencies.Sentry.SPRING_BOOT_STARTER)
21+
implementation(Dependencies.Sentry.LOG4J2)
22+
2023
kapt(Dependencies.QueryDsl.APT)
2124

2225
testImplementation(Dependencies.Spring.BOOT_STARTER_TEST)

infra/src/main/kotlin/org/yapp/infra/InfraBaseConfigGroup.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.yapp.infra.config.internal.async.AsyncConfig
77
import org.yapp.infra.config.internal.jpa.JpaConfig
88
import org.yapp.infra.config.internal.page.PageConfig
99
import org.yapp.infra.config.internal.querydsl.QuerydslConfig
10+
import org.yapp.infra.config.external.sentry.SentryConfig
1011

1112
enum class InfraBaseConfigGroup(
1213
val configClass: Class<out InfraBaseConfig>
@@ -17,5 +18,6 @@ enum class InfraBaseConfigGroup(
1718
REDIS(RedisConfig::class.java),
1819
REST_CLIENT(RestClientConfig::class.java),
1920
QUERY_DSL(QuerydslConfig::class.java),
20-
AOP(AopConfig::class.java)
21+
AOP(AopConfig::class.java),
22+
SENTRY(SentryConfig::class.java)
2123
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.yapp.infra.config.external.sentry
2+
3+
import io.sentry.Sentry
4+
import io.sentry.SentryOptions
5+
import org.springframework.beans.factory.annotation.Value
6+
import org.springframework.boot.context.properties.EnableConfigurationProperties
7+
import org.springframework.context.annotation.Bean
8+
import org.springframework.context.annotation.Configuration
9+
import org.yapp.infra.InfraBaseConfig
10+
11+
@Configuration
12+
@EnableConfigurationProperties(SentryProperties::class)
13+
class SentryConfig(
14+
private val sentryProperties: SentryProperties,
15+
@Value("\${app.module-name}")
16+
private val moduleName: String
17+
) : InfraBaseConfig {
18+
19+
@Bean
20+
fun sentryOptionsCustomizer(): Sentry.OptionsConfiguration<SentryOptions> {
21+
return Sentry.OptionsConfiguration { options: SentryOptions ->
22+
if (sentryProperties.dsn.isBlank()) {
23+
options.isEnabled = false
24+
return@OptionsConfiguration
25+
}
26+
27+
options.dsn = sentryProperties.dsn
28+
options.environment = sentryProperties.environment
29+
options.serverName = sentryProperties.serverName
30+
options.setTag("module", moduleName)
31+
}
32+
}
33+
}
34+
35+

0 commit comments

Comments
 (0)