Skip to content

Commit 978d99f

Browse files
authored
v1.0.2
v1.0.2
2 parents 44318ca + b1ef800 commit 978d99f

File tree

28 files changed

+242
-71
lines changed

28 files changed

+242
-71
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ arrow_fx = "1.2.1"
1212
jwt = "0.12.6"
1313
bouncycastle = "1.70"
1414
# Spring
15-
spring_boot = "3.4.5"
15+
spring_boot = "3.4.11"
1616
spring_dependency_management = "1.1.7"
1717
spring_cloud_dependencies = "2024.0.0"
1818
jakartaAnnotation = "3.0.0"

sseudam-admin/src/main/kotlin/com/sseudam/admin/application/AdminFacade.kt

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.sseudam.admin.application
22

3+
import com.sseudam.admin.application.report.AdminSpotReportDetail
4+
import com.sseudam.admin.application.suggestion.AdminSpotSuggestionDetail
35
import com.sseudam.admin.domain.AdminToken
46
import com.sseudam.admin.domain.AdminUserProfile
57
import com.sseudam.auth.AuthenticationService
@@ -10,6 +12,7 @@ import com.sseudam.notification.command.FirebaseCloudMessageCommand
1012
import com.sseudam.notification.fcm.FcmSender
1113
import com.sseudam.report.ReportFacade
1214
import com.sseudam.report.ReportService
15+
import com.sseudam.report.ReportStatus
1316
import com.sseudam.report.ReportType
1417
import com.sseudam.report.SpotReport
1518
import com.sseudam.report.command.UpdateReportCommand
@@ -82,16 +85,53 @@ class AdminFacade(
8285
fun findSuggestions(
8386
offsetPageRequest: OffsetPageRequest,
8487
searchStatus: SuggestionStatus?,
85-
): Page<SpotSuggestion.Detail> = suggestionService.findSuggestionsBy(offsetPageRequest, searchStatus)
88+
): Page<AdminSpotSuggestionDetail> {
89+
val pages = suggestionService.findSuggestionsBy(offsetPageRequest, searchStatus)
90+
val users = userService.findAllBy(pages.content.map { it.userId }).associateBy { it.id }
91+
val contents =
92+
pages.content.map { suggestion ->
93+
AdminSpotSuggestionDetail.of(
94+
suggestion,
95+
users[suggestion.userId],
96+
)
97+
}
98+
return Page.of(
99+
content = contents,
100+
totalCount = pages.totalCount,
101+
)
102+
}
86103

87-
fun findSuggestionDetails(suggestionId: Long): SpotSuggestion.Detail = suggestionService.findSpotSuggestionById(suggestionId)
104+
fun findSuggestionDetails(suggestionId: Long): AdminSpotSuggestionDetail {
105+
val detail = suggestionService.findSpotSuggestionById(suggestionId)
106+
val user = userService.getProfile(detail.userId)
107+
return AdminSpotSuggestionDetail.of(detail, user)
108+
}
88109

89110
fun findReports(
90111
offsetPageRequest: OffsetPageRequest,
91112
searchType: ReportType?,
92-
): Page<SpotReport.Detail> = reportService.findReportsBy(offsetPageRequest, searchType)
113+
status: ReportStatus?,
114+
): Page<AdminSpotReportDetail> {
115+
val pages = reportService.findReportsBy(offsetPageRequest, searchType, status)
116+
val users = userService.findAllBy(pages.content.map { it.userId }).associateBy { it.id }
117+
val contents =
118+
pages.content.map { report ->
119+
AdminSpotReportDetail.of(
120+
report,
121+
users[report.userId],
122+
)
123+
}
124+
return Page.of(
125+
content = contents,
126+
totalCount = pages.totalCount,
127+
)
128+
}
93129

94-
fun findReportDetails(reportId: Long): SpotReport.Detail = reportFacade.findReportDetails(reportId)
130+
fun findReportDetails(reportId: Long): AdminSpotReportDetail {
131+
val detail = reportFacade.findReportDetails(reportId)
132+
val user = userService.getProfile(detail.userId)
133+
return AdminSpotReportDetail.of(detail, user)
134+
}
95135

96136
fun updateSpotSuggestionStatus(command: UpdateSuggestionCommand) =
97137
SpotSuggestion.UpdateResult.of(
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.sseudam.admin.application.report
2+
3+
import com.sseudam.common.Address
4+
import com.sseudam.common.GeoJson
5+
import com.sseudam.common.Region
6+
import com.sseudam.report.ReportStatus
7+
import com.sseudam.report.ReportType
8+
import com.sseudam.report.SpotReport
9+
import com.sseudam.trashspot.TrashType
10+
import com.sseudam.user.UserProfile
11+
import java.time.LocalDateTime
12+
13+
data class AdminSpotReportDetail(
14+
val id: Long,
15+
val spotId: Long,
16+
val userId: Long,
17+
val userName: String?,
18+
val reportType: ReportType,
19+
val point: GeoJson,
20+
val spotName: String,
21+
val region: Region = Region.UNKNOWN,
22+
val address: Address,
23+
val trashType: TrashType,
24+
val imageUrl: String,
25+
val status: ReportStatus = ReportStatus.WAITING,
26+
val rejectReason: String?,
27+
val reason: String?,
28+
val createdAt: LocalDateTime,
29+
) {
30+
companion object {
31+
fun of(
32+
detail: SpotReport.Detail,
33+
user: UserProfile?,
34+
): AdminSpotReportDetail =
35+
with(detail) {
36+
AdminSpotReportDetail(
37+
id = id,
38+
spotId = spotId,
39+
userId = userId,
40+
userName = user?.name,
41+
reportType = reportType,
42+
point = point,
43+
spotName = spotName,
44+
region = region,
45+
address = address,
46+
trashType = trashType,
47+
imageUrl = imageUrl,
48+
status = status,
49+
rejectReason = rejectReason,
50+
reason = reason,
51+
createdAt = createdAt,
52+
)
53+
}
54+
}
55+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.sseudam.admin.application.suggestion
2+
3+
import com.sseudam.common.Address
4+
import com.sseudam.common.GeoJson
5+
import com.sseudam.common.Region
6+
import com.sseudam.suggestion.SpotSuggestion
7+
import com.sseudam.suggestion.SuggestionStatus
8+
import com.sseudam.trashspot.TrashType
9+
import com.sseudam.user.UserProfile
10+
import java.time.LocalDateTime
11+
12+
data class AdminSpotSuggestionDetail(
13+
val id: Long,
14+
val userId: Long,
15+
val userName: String?,
16+
val spotName: String,
17+
val point: GeoJson,
18+
val region: Region,
19+
val address: Address,
20+
val trashType: TrashType,
21+
val imageUrl: String,
22+
val status: SuggestionStatus = SuggestionStatus.WAITING,
23+
val rejectReason: String?,
24+
val createdAt: LocalDateTime,
25+
) {
26+
companion object {
27+
fun of(
28+
detail: SpotSuggestion.Detail,
29+
user: UserProfile?,
30+
) = AdminSpotSuggestionDetail(
31+
id = detail.id,
32+
userId = detail.userId,
33+
userName = user?.name,
34+
spotName = detail.spotName,
35+
point = detail.point,
36+
region = detail.region,
37+
address = detail.address,
38+
trashType = detail.trashType,
39+
imageUrl = detail.imageUrl,
40+
status = detail.status,
41+
rejectReason = detail.rejectReason,
42+
createdAt = detail.createdAt,
43+
)
44+
}
45+
}

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/response/report/SpotReportAdminResponse.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.sseudam.admin.presentation.response.report
22

3+
import com.sseudam.admin.application.report.AdminSpotReportDetail
34
import com.sseudam.common.Address
45
import com.sseudam.common.GeoJson
56
import com.sseudam.report.ReportStatus
67
import com.sseudam.report.ReportType
7-
import com.sseudam.report.SpotReport
88
import com.sseudam.trashspot.TrashType
99
import io.swagger.v3.oas.annotations.media.Schema
1010
import java.time.LocalDateTime
@@ -17,6 +17,8 @@ data class SpotReportAdminResponse(
1717
val spotId: Long,
1818
@Schema(description = "신고자 ID")
1919
val userId: Long,
20+
@Schema(description = "신고자 이름")
21+
val userName: String?,
2022
@Schema(description = "신고 타입")
2123
val reportType: ReportType,
2224
@Schema(description = "신고 위치")
@@ -37,11 +39,12 @@ data class SpotReportAdminResponse(
3739
val createdAt: LocalDateTime,
3840
) {
3941
companion object {
40-
fun of(detail: SpotReport.Detail) =
42+
fun of(detail: AdminSpotReportDetail) =
4143
SpotReportAdminResponse(
4244
id = detail.id,
4345
spotId = detail.spotId,
4446
userId = detail.userId,
47+
userName = detail.userName,
4548
reportType = detail.reportType,
4649
point = detail.point,
4750
address = detail.address,

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/response/report/SpotReportAllAdminResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.sseudam.admin.presentation.response.report
22

3-
import com.sseudam.report.SpotReport
3+
import com.sseudam.admin.application.report.AdminSpotReportDetail
44
import com.sseudam.support.page.Page
55
import io.swagger.v3.oas.annotations.media.Schema
66

@@ -10,7 +10,7 @@ data class SpotReportAllAdminResponse(
1010
val totalCount: Long,
1111
) {
1212
companion object {
13-
fun of(page: Page<SpotReport.Detail>): SpotReportAllAdminResponse =
13+
fun of(page: Page<AdminSpotReportDetail>): SpotReportAllAdminResponse =
1414
SpotReportAllAdminResponse(
1515
list = page.content.map { SpotReportAdminResponse.of(it) },
1616
totalCount = page.totalCount,

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/response/suggestion/SpotSuggestionAdminResponse.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.sseudam.admin.presentation.response.suggestion
22

3+
import com.sseudam.admin.application.suggestion.AdminSpotSuggestionDetail
34
import com.sseudam.common.Address
45
import com.sseudam.common.GeoJson
56
import com.sseudam.common.Region
6-
import com.sseudam.suggestion.SpotSuggestion
77
import com.sseudam.suggestion.SuggestionStatus
88
import com.sseudam.trashspot.TrashType
99
import io.swagger.v3.oas.annotations.media.Schema
@@ -13,6 +13,10 @@ import java.time.LocalDateTime
1313
data class SpotSuggestionAdminResponse(
1414
@Schema(description = "제보 ID")
1515
val id: Long,
16+
@Schema(description = "제보자 ID")
17+
val userId: Long,
18+
@Schema(description = "제보자 이름")
19+
val userName: String?,
1620
@Schema(description = "제보 위치")
1721
val point: GeoJson,
1822
@Schema(description = "제보 장소 이름")
@@ -33,9 +37,11 @@ data class SpotSuggestionAdminResponse(
3337
val createdAt: LocalDateTime,
3438
) {
3539
companion object {
36-
fun of(suggestion: SpotSuggestion.Detail) =
40+
fun of(suggestion: AdminSpotSuggestionDetail) =
3741
SpotSuggestionAdminResponse(
3842
id = suggestion.id,
43+
userId = suggestion.userId,
44+
userName = suggestion.userName,
3945
point = suggestion.point,
4046
spotName = suggestion.spotName,
4147
region = suggestion.region,

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/response/suggestion/SpotSuggestionAllAdminResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.sseudam.admin.presentation.response.suggestion
22

3-
import com.sseudam.suggestion.SpotSuggestion
3+
import com.sseudam.admin.application.suggestion.AdminSpotSuggestionDetail
44
import com.sseudam.support.page.Page
55

66
data class SpotSuggestionAllAdminResponse(
77
val list: List<SpotSuggestionAdminResponse>,
88
val totalCount: Long,
99
) {
1010
companion object {
11-
fun of(page: Page<SpotSuggestion.Detail>) =
11+
fun of(page: Page<AdminSpotSuggestionDetail>) =
1212
SpotSuggestionAllAdminResponse(
1313
list = page.content.map { SpotSuggestionAdminResponse.of(it) },
1414
totalCount = page.totalCount,

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/v1/report/AdminReportController.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.sseudam.admin.presentation.response.report.SpotReportAdminResponse
66
import com.sseudam.admin.presentation.response.report.SpotReportAllAdminResponse
77
import com.sseudam.admin.presentation.v1.annotation.AdminTagDocs
88
import com.sseudam.admin.presentation.v1.annotation.ApiAdminV1Controller
9+
import com.sseudam.report.ReportStatus
910
import com.sseudam.report.ReportType
1011
import com.sseudam.support.page.OffsetPageRequest
1112
import io.swagger.v3.oas.annotations.Operation
@@ -27,9 +28,10 @@ class AdminReportController(
2728
@RequestParam(defaultValue = "0") page: Int,
2829
@RequestParam(defaultValue = "20") size: Int,
2930
@RequestParam(required = false) searchType: ReportType?,
31+
@RequestParam(required = false) status: ReportStatus?,
3032
): SpotReportAllAdminResponse =
3133
SpotReportAllAdminResponse.of(
32-
adminFacade.findReports(OffsetPageRequest(page, size), searchType),
34+
adminFacade.findReports(OffsetPageRequest(page, size), searchType, status),
3335
)
3436

3537
@Operation(summary = "신고 내역 상세 조회", description = "신고 내역을 상세 조회합니다.")

sseudam-clients/aws/src/main/kotlin/com/sseudam/image/ImageS3Processor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ImageS3Processor(
2929
awsProperties.s3.bucket,
3030
imageFilePath,
3131
imageFileName,
32-
Duration.ofSeconds(30),
32+
Duration.ofMinutes(10),
3333
)
3434
return S3ImageUrl(
3535
presignedUrl,

0 commit comments

Comments
 (0)