Skip to content

Commit 19bee05

Browse files
authored
v1.0.0 (#264)
* [Test] Auth Controller & Application Layer Test Code (#239) * test: AuthControllerTest RestDocsTest * test: Auth Application Test * [Test] User Controller & Application Layer Test Code (#240) * test: UserControllerTest RestDocsTest * refactor: AuthFixture * test: User Application Test * test: User Application Facade Test * [Test] Suggestion Test Code (#241) * test: SuggestionControllerTest RestDocsTest * test: Suggestion Application Test * fix: prefix * [Test] Report Test Code (#243) * test: ReportControllerTest RestDocsTest * test: Report Application Test * [Test] Visit Test Code (#244) * test: VisitedControllerTest RestDocsTest * test: Visited Application Test * fix&refactor: spot visited event * refactor: SpotVisitedValidator * fix: condition * [Test] Attendance RestDocsTest&Application Test (#247) * [Test] AppVersion Test Code (#248) * [Hotfix] Admin user push-all * [Test] Pet Domain Test Code (#250) * test: PetControllerTest RestDocsTest * refactor: PetControllerTest example * test: Pet, UserPet Application Test * fix: pet point test case * fix: verify updatePointByAction * [Test] History Domain Test Code (#251) * test: History Test Code * fix: lint * [Refactor] fcm-token deletedAt is null condition (#252) * fix: deletedAt is null condition * fix: findAll JpaRepository * [Feature] Report&Suggestion cancel API (#256) * feat: suggestion cancel API * feat: report cancel API * fix: status parameter * fix: verify update * fix: restDocsTest restDocumenation * [Feature] Notifications API (#257) * feat: getNotifications cursor pagenation * refactor: NotificationResponse * feat: notification markAsRead * test: notification Test Code * refactor * feat: notification type column migration * [Fix] Notification message (#260) * [Feature] Suggestion detail API (#261) * [Refacor] Add ReportType (ETC, EMPTY_SPOT) (#262) * refacor: report-type ETC, EMPTY_SPOT * test: testcode * [Feature] Add Apns destination CustomData (#263) * feat: apns custom data, destination * fix: destination * [Hotfix] Suggestion spotName Error Message * [Fix] Notifications nextCursor (#266)
1 parent 390109c commit 19bee05

File tree

164 files changed

+7876
-355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

164 files changed

+7876
-355
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
📦 Sseudam-Server
3030
├── 🎯 sseudam-core/
3131
│ ├── core-api/ # REST API 엔드포인트
32-
│ ├── core-domain/ # 도메인 모델 및 비즈니스 로직
32+
│ ├── core-application/ # 비즈니스 로직 구현
33+
│ ├── core-domain/ # 도메인 모델 정의 (POJO)
3334
│ └── core-contract/ # 공통 DTO 및 예외 처리 정의
3435
├── 💾 sseudam-storage/
3536
│ ├── db-core/ # JPA 엔티티 및 리포지토리

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.sseudam.admin.domain.AdminToken
44
import com.sseudam.admin.domain.AdminUserProfile
55
import com.sseudam.auth.AuthenticationService
66
import com.sseudam.notification.NotificationService
7+
import com.sseudam.notification.NotificationType
78
import com.sseudam.notification.command.CreateNotificationStoredCommand
89
import com.sseudam.notification.command.FirebaseCloudMessageCommand
910
import com.sseudam.notification.fcm.FcmSender
@@ -16,9 +17,9 @@ import com.sseudam.suggestion.SpotSuggestion
1617
import com.sseudam.suggestion.SuggestionService
1718
import com.sseudam.suggestion.SuggestionStatus
1819
import com.sseudam.suggestion.command.UpdateSuggestionCommand
19-
import com.sseudam.support.cursor.OffsetPageRequest
2020
import com.sseudam.support.error.ErrorException
2121
import com.sseudam.support.error.ErrorType
22+
import com.sseudam.support.page.OffsetPageRequest
2223
import com.sseudam.support.page.Page
2324
import com.sseudam.trashspot.TrashSpotService
2425
import com.sseudam.user.UserDeviceService
@@ -104,18 +105,23 @@ class AdminFacade(
104105
topic: String,
105106
contents: String,
106107
) {
107-
val userDevices = userDeviceService.findAll()
108+
val userDevice = userDeviceService.findAll()
109+
val userDevices =
110+
userDevice
111+
.sortedByDescending { it.createdAt }
112+
.filter { it.fcmToken.isNotBlank() && it.fcmToken.isNotEmpty() }
113+
.distinctBy { it.userId }
108114
if (userDevices.isEmpty()) return
109115

110116
val deviceTokenMap = userDevices.associateBy { it.fcmToken }
111117
val messages =
112118
userDevices
113-
.filter { it.fcmToken.isNotBlank() }
114119
.map { device ->
115120
FirebaseCloudMessageCommand(
116121
fcmToken = device.fcmToken,
117122
title = topic,
118123
body = contents,
124+
destination = "HomeView",
119125
)
120126
}.toSet()
121127
fcmSender.sendAll(messages)
@@ -125,8 +131,8 @@ class AdminFacade(
125131
CreateNotificationStoredCommand(
126132
userId = deviceTokenMap[message.fcmToken]?.userId ?: return@mapNotNull null,
127133
notificationStoredKey = "",
128-
type = "ADMIN_PUSH",
129-
parameterValue = "/",
134+
type = NotificationType.ADMIN_PUSH,
135+
parameterValue = "",
130136
topic = message.title,
131137
contents = message.body,
132138
)

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/request/report/AdminUpdateReportRequest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ data class AdminUpdateReportRequest(
1111
@Schema(description = "신고 상태", example = "APPROVE")
1212
val status: ReportStatus,
1313
@Schema(description = "반려 사유", example = "장소가 다름.")
14-
val reason: String? = null,
14+
val rejectReason: String? = null,
1515
) {
1616
fun toCommand(reportId: Long) =
1717
UpdateReportCommand(
1818
reportId = reportId,
1919
spotId = spotId,
2020
status = status,
21-
reason = reason,
21+
rejectReason = rejectReason,
2222
)
2323
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ 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
99
import com.sseudam.report.ReportType
10-
import com.sseudam.support.cursor.OffsetPageRequest
10+
import com.sseudam.support.page.OffsetPageRequest
1111
import io.swagger.v3.oas.annotations.Operation
1212
import org.springframework.web.bind.annotation.GetMapping
1313
import org.springframework.web.bind.annotation.PathVariable

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/v1/suggestion/AdminSuggestionController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.sseudam.admin.presentation.response.suggestion.SpotSuggestionAllAdmin
77
import com.sseudam.admin.presentation.v1.annotation.AdminTagDocs
88
import com.sseudam.admin.presentation.v1.annotation.ApiAdminV1Controller
99
import com.sseudam.suggestion.SuggestionStatus
10-
import com.sseudam.support.cursor.OffsetPageRequest
10+
import com.sseudam.support.page.OffsetPageRequest
1111
import io.swagger.v3.oas.annotations.Operation
1212
import org.springframework.web.bind.annotation.GetMapping
1313
import org.springframework.web.bind.annotation.PathVariable

sseudam-admin/src/main/kotlin/com/sseudam/admin/presentation/v1/user/AdminUserController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.sseudam.admin.presentation.response.user.AdminUserResponse
55
import com.sseudam.admin.presentation.response.user.UserPageAdminResponse
66
import com.sseudam.admin.presentation.v1.annotation.AdminTagDocs
77
import com.sseudam.admin.presentation.v1.annotation.ApiAdminV1Controller
8-
import com.sseudam.support.cursor.OffsetPageRequest
8+
import com.sseudam.support.page.OffsetPageRequest
99
import io.swagger.v3.oas.annotations.Operation
1010
import org.springframework.web.bind.annotation.GetMapping
1111
import org.springframework.web.bind.annotation.PathVariable

sseudam-clients/notification/src/main/kotlin/com/sseudam/client/notification/FcmClientRepository.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,17 @@ class FcmClientRepository(
1616
it.fcmToken,
1717
it.title,
1818
it.body,
19+
it.destination,
1920
)
2021
}.toList()
2122

2223
val tokens = fcmRequests.map { it.fcmToken }
2324
val batchResult =
2425
firebaseCloudMessageSender.sendEachForMulticastAll(
25-
fcmRequests[0].title,
26-
fcmRequests[0].body,
27-
tokens,
26+
title = fcmRequests[0].title,
27+
body = fcmRequests[0].body,
28+
destination = firebaseCloudMessages[0].destination,
29+
fcmTokens = tokens,
2830
)
2931

3032
val result =
@@ -34,6 +36,7 @@ class FcmClientRepository(
3436
fcmToken = pushMessage.fcmToken,
3537
title = pushMessage.title,
3638
body = pushMessage.body,
39+
destination = pushMessage.destination,
3740
tryCount = pushMessage.tryCount + 1,
3841
sent = batchResult?.responses?.get(index)?.isSuccessful ?: false,
3942
)
@@ -47,13 +50,15 @@ class FcmClientRepository(
4750
fcmToken = firebaseCloudMessage.fcmToken,
4851
title = firebaseCloudMessage.title,
4952
body = firebaseCloudMessage.body,
53+
destination = firebaseCloudMessage.destination,
5054
)
5155
val sendResult = firebaseCloudMessageSender.sendAsync(request).get()
5256
return FirebaseCloudMessage(
5357
fcmKey = firebaseCloudMessage.fcmKey,
5458
fcmToken = firebaseCloudMessage.fcmToken,
5559
title = firebaseCloudMessage.title,
5660
body = firebaseCloudMessage.body,
61+
destination = firebaseCloudMessage.destination,
5762
tryCount = firebaseCloudMessage.tryCount + 1,
5863
sent = sendResult.isNotBlank(),
5964
)

sseudam-clients/notification/src/main/kotlin/com/sseudam/client/notification/FcmSendRequest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ data class FcmSendRequest(
44
val fcmToken: String,
55
val title: String,
66
val body: String,
7+
val destination: String, // ex) "sseudam://notification"
78
)

sseudam-clients/notification/src/main/kotlin/com/sseudam/client/notification/FirebaseCloudMessageSender.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ class FirebaseCloudMessageSender(
3535
).setApnsConfig(
3636
ApnsConfig
3737
.builder()
38+
.putCustomData("destination", request.destination)
3839
.setAps(
3940
Aps
4041
.builder()
41-
.setAlert("${request.title}\n${request.body}")
42+
.setAlert(request.body)
4243
.setBadge(1)
4344
.setSound("default")
4445
.build(),
@@ -48,6 +49,7 @@ class FirebaseCloudMessageSender(
4849
fun sendEachForMulticastAll(
4950
title: String,
5051
body: String,
52+
destination: String,
5153
fcmTokens: List<String>,
5254
): BatchResponse? {
5355
val notification =
@@ -64,10 +66,11 @@ class FirebaseCloudMessageSender(
6466
.setApnsConfig(
6567
ApnsConfig
6668
.builder()
69+
.putCustomData("destination", destination)
6770
.setAps(
6871
Aps
6972
.builder()
70-
.setAlert("$title\n$body")
73+
.setAlert(body)
7174
.setBadge(1)
7275
.setSound("default")
7376
.build(),

sseudam-core/core-api/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ dependencies {
161161
testImplementation(project(":sseudam-tests:api-docs"))
162162
testImplementation(project(":sseudam-tests:test-helper"))
163163
testImplementation(testFixtures(project(":sseudam-tests:test-container")))
164+
testImplementation(libs.bundles.openfeign)
164165
}
165166

166167
dependencyManagement {

0 commit comments

Comments
 (0)