Skip to content

Commit 9f0d1ff

Browse files
committed
Merge remote-tracking branch 'refs/remotes/origin/develop' into develop
2 parents d5b2a3b + 23ee350 commit 9f0d1ff

File tree

19 files changed

+87
-115
lines changed

19 files changed

+87
-115
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package org.yapp.apis.auth.strategy.withdraw
22

3+
import jakarta.validation.Valid
34
import org.yapp.apis.auth.dto.request.WithdrawStrategyRequest
45
import org.yapp.domain.user.ProviderType
56

67
interface WithdrawStrategy {
78

89
fun getProviderType(): ProviderType
910

10-
fun withdraw(request: WithdrawStrategyRequest)
11+
fun withdraw(@Valid request: WithdrawStrategyRequest)
1112
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package org.yapp.apis.book.service
22

3+
import jakarta.validation.Valid
34
import org.yapp.apis.book.dto.request.BookDetailRequest
45
import org.yapp.apis.book.dto.request.BookSearchRequest
56
import org.yapp.apis.book.dto.response.BookDetailResponse
67
import org.yapp.apis.book.dto.response.BookSearchResponse
78

89
sealed interface BookQueryService {
910
fun searchBooks(request: BookSearchRequest): BookSearchResponse
10-
fun getBookDetail(request: BookDetailRequest): BookDetailResponse
11+
fun getBookDetail(@Valid request: BookDetailRequest): BookDetailResponse
1112
}

apis/src/main/kotlin/org/yapp/apis/book/usecase/BookUseCase.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ package org.yapp.apis.book.usecase
44
import org.springframework.beans.factory.annotation.Qualifier
55
import org.springframework.data.domain.Pageable
66
import org.springframework.transaction.annotation.Transactional
7-
import org.yapp.apis.book.dto.request.UserBooksByIsbn13sRequest
87
import org.yapp.apis.book.dto.request.*
98
import org.yapp.apis.book.dto.response.BookDetailResponse
109
import org.yapp.apis.book.dto.response.BookSearchResponse
11-
import org.yapp.apis.book.dto.response.BookSearchResponse.*
10+
import org.yapp.apis.book.dto.response.BookSearchResponse.BookSummary
1211
import org.yapp.apis.book.dto.response.UserBookPageResponse
1312
import org.yapp.apis.book.dto.response.UserBookResponse
1413
import org.yapp.apis.book.service.BookManagementService

apis/src/main/kotlin/org/yapp/apis/readingrecord/controller/ReadingRecordController.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.yapp.apis.readingrecord.usecase.ReadingRecordUseCase
2020
import org.yapp.domain.readingrecord.ReadingRecordSortType
2121
import java.util.UUID
2222
import jakarta.validation.Valid
23+
import org.yapp.apis.readingrecord.dto.response.SeedStatsResponse
2324

2425
@RestController
2526
@RequestMapping("/api/v1/reading-records")
@@ -69,4 +70,13 @@ class ReadingRecordController(
6970
)
7071
return ResponseEntity.ok(response)
7172
}
73+
74+
@GetMapping("/{userBookId}/seed/stats")
75+
override fun getReadingRecordSeedStats(
76+
@AuthenticationPrincipal userId: UUID,
77+
@PathVariable userBookId: UUID
78+
): ResponseEntity<SeedStatsResponse> {
79+
val stats = readingRecordUseCase.getSeedStats(userId, userBookId)
80+
return ResponseEntity.ok(stats)
81+
}
7282
}

apis/src/main/kotlin/org/yapp/apis/readingrecord/controller/ReadingRecordControllerApi.kt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,13 @@ import org.springframework.data.domain.Sort
1414
import org.springframework.data.web.PageableDefault
1515
import org.springframework.http.ResponseEntity
1616
import org.springframework.security.core.annotation.AuthenticationPrincipal
17-
import org.springframework.web.bind.annotation.GetMapping
18-
import org.springframework.web.bind.annotation.PathVariable
19-
import org.springframework.web.bind.annotation.PostMapping
20-
import org.springframework.web.bind.annotation.RequestBody
21-
import org.springframework.web.bind.annotation.RequestMapping
22-
import org.springframework.web.bind.annotation.RequestParam
17+
import org.springframework.web.bind.annotation.*
2318
import org.yapp.apis.readingrecord.dto.request.CreateReadingRecordRequest
2419
import org.yapp.apis.readingrecord.dto.response.ReadingRecordResponse
20+
import org.yapp.apis.readingrecord.dto.response.SeedStatsResponse
2521
import org.yapp.domain.readingrecord.ReadingRecordSortType
2622
import org.yapp.globalutils.exception.ErrorResponse
27-
import java.util.UUID
23+
import java.util.*
2824

2925
@Tag(name = "Reading Records", description = "독서 기록 관련 API")
3026
@RequestMapping("/api/v1/reading-records")
@@ -110,4 +106,28 @@ interface ReadingRecordControllerApi {
110106
@PageableDefault(size = 10, sort = ["createdAt"], direction = Sort.Direction.DESC)
111107
@Parameter(description = "페이지네이션 정보 (페이지 번호, 페이지 크기, 정렬 방식)") pageable: Pageable
112108
): ResponseEntity<Page<ReadingRecordResponse>>
109+
110+
@Operation(
111+
summary = "씨앗 통계 조회",
112+
description = "사용자가 등록한 책에 기록된 씨앗 개수를 조회합니다."
113+
)
114+
@ApiResponses(
115+
value = [
116+
ApiResponse(
117+
responseCode = "200",
118+
description = "씨앗 통계 조회 성공",
119+
content = [Content(schema = Schema(implementation = SeedStatsResponse::class))]
120+
),
121+
ApiResponse(
122+
responseCode = "404",
123+
description = "사용자를 찾을 수 없음",
124+
content = [Content(schema = Schema(implementation = ErrorResponse::class))]
125+
)
126+
]
127+
)
128+
@GetMapping("/{userBookId}/seed/stats")
129+
fun getReadingRecordSeedStats(
130+
@AuthenticationPrincipal userId: UUID,
131+
@PathVariable userBookId: UUID
132+
): ResponseEntity<SeedStatsResponse>
113133
}

apis/src/main/kotlin/org/yapp/apis/seed/dto/response/SeedStatsResponse.kt renamed to apis/src/main/kotlin/org/yapp/apis/readingrecord/dto/response/SeedStatsResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.yapp.apis.seed.dto.response
1+
package org.yapp.apis.readingrecord.dto.response
22

33
import org.yapp.domain.readingrecordtag.vo.TagStatsVO
44
import org.yapp.globalutils.tag.GeneralEmotionTagCategory

apis/src/main/kotlin/org/yapp/apis/readingrecord/service/ReadingRecordService.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.yapp.apis.readingrecord.service
22

3-
import jakarta.validation.Valid
43
import org.springframework.data.domain.Page
54
import org.springframework.data.domain.Pageable
65
import org.springframework.stereotype.Service
@@ -17,7 +16,6 @@ import java.util.*
1716
class ReadingRecordService(
1817
private val readingRecordDomainService: ReadingRecordDomainService,
1918
) {
20-
2119
fun createReadingRecord(
2220
userId: UUID,
2321
userBookId: UUID,

apis/src/main/kotlin/org/yapp/apis/seed/service/SeedService.kt renamed to apis/src/main/kotlin/org/yapp/apis/readingrecord/service/ReadingRecordTagService.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1-
package org.yapp.apis.seed.service
1+
package org.yapp.apis.readingrecord.service
22

33
import org.springframework.stereotype.Service
4-
import org.yapp.apis.seed.dto.response.SeedStatsResponse
4+
import org.yapp.apis.readingrecord.dto.response.SeedStatsResponse
55
import org.yapp.domain.readingrecordtag.ReadingRecordTagDomainService
66
import org.yapp.globalutils.tag.GeneralEmotionTagCategory
77
import java.util.*
88

99
@Service
10-
class SeedService(
10+
class ReadingRecordTagService(
1111
private val readingRecordTagDomainService: ReadingRecordTagDomainService
1212
) {
13-
fun getSeedStatsByUserId(userId: UUID): SeedStatsResponse {
14-
val tagStatsVO = readingRecordTagDomainService.countTagsByUserIdAndCategories(
13+
fun getSeedStatsByUserIdAndUserBookId(userId: UUID, userBookId: UUID): SeedStatsResponse {
14+
val tagStatsVO = readingRecordTagDomainService.countTagsByUserIdAndUserBookIdAndCategories(
1515
userId = userId,
16+
userBookId = userBookId,
1617
categories = GeneralEmotionTagCategory.entries.map { it.displayName }
1718
)
1819

1920
return SeedStatsResponse.from(tagStatsVO)
2021
}
21-
}
22+
}

apis/src/main/kotlin/org/yapp/apis/readingrecord/usecase/ReadingRecordUseCase.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import org.springframework.transaction.annotation.Transactional
66
import org.yapp.apis.book.service.UserBookService
77
import org.yapp.apis.readingrecord.dto.request.CreateReadingRecordRequest
88
import org.yapp.apis.readingrecord.dto.response.ReadingRecordResponse
9+
import org.yapp.apis.readingrecord.dto.response.SeedStatsResponse
910
import org.yapp.apis.readingrecord.service.ReadingRecordService
11+
import org.yapp.apis.readingrecord.service.ReadingRecordTagService
1012
import org.yapp.apis.user.service.UserService
1113
import org.yapp.domain.readingrecord.ReadingRecordSortType
1214
import org.yapp.globalutils.annotation.UseCase
@@ -16,6 +18,7 @@ import java.util.*
1618
@Transactional(readOnly = true)
1719
class ReadingRecordUseCase(
1820
private val readingRecordService: ReadingRecordService,
21+
private val readingRecordTagService: ReadingRecordTagService,
1922
private val userService: UserService,
2023
private val userBookService: UserBookService,
2124
) {
@@ -62,4 +65,13 @@ class ReadingRecordUseCase(
6265
pageable = pageable
6366
)
6467
}
68+
69+
fun getSeedStats(
70+
userId: UUID,
71+
userBookId: UUID
72+
): SeedStatsResponse {
73+
userService.validateUserExists(userId)
74+
userBookService.validateUserBookExists(userBookId, userId)
75+
return readingRecordTagService.getSeedStatsByUserIdAndUserBookId(userId, userBookId)
76+
}
6577
}

apis/src/main/kotlin/org/yapp/apis/seed/controller/SeedController.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)