Skip to content

Commit 968cde9

Browse files
authored
Api-v0.0.4-5
2 parents 15eb066 + 97fff30 commit 968cde9

File tree

14 files changed

+158
-27
lines changed

14 files changed

+158
-27
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.depromeet.whatnow.api.notification.dto
2+
3+
import com.depromeet.whatnow.domains.notification.domain.ArrivalNotification
4+
import com.depromeet.whatnow.domains.notification.domain.NotificationType
5+
import java.time.LocalDateTime
6+
7+
class ArrivalNotificationResponse(
8+
val promiseId: Long,
9+
val senderUserId: Long,
10+
override val createdAt: LocalDateTime,
11+
) : NotificationAbstract(NotificationType.START_SHARING, createdAt) {
12+
companion object {
13+
fun from(notification: ArrivalNotification): ArrivalNotificationResponse {
14+
return ArrivalNotificationResponse(
15+
notification.promiseId,
16+
notification.senderUserId,
17+
notification.createdAt,
18+
)
19+
}
20+
}
21+
}

Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/notification/usecase/NotificationReadUseCase.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.depromeet.whatnow.api.notification.usecase
22

33
import com.depromeet.whatnow.annotation.UseCase
4+
import com.depromeet.whatnow.api.notification.dto.ArrivalNotificationResponse
45
import com.depromeet.whatnow.api.notification.dto.EndSharingNotificationResponse
56
import com.depromeet.whatnow.api.notification.dto.ImageNotificationResponse
67
import com.depromeet.whatnow.api.notification.dto.InteractionAttainmentNotificationResponse
@@ -9,6 +10,7 @@ import com.depromeet.whatnow.api.notification.dto.NotificationResponse
910
import com.depromeet.whatnow.api.notification.dto.StartSharingNotificationResponse
1011
import com.depromeet.whatnow.api.notification.dto.TimeOverNotificationResponse
1112
import com.depromeet.whatnow.config.security.SecurityUtils
13+
import com.depromeet.whatnow.domains.notification.domain.ArrivalNotification
1214
import com.depromeet.whatnow.domains.notification.domain.EndSharingNotification
1315
import com.depromeet.whatnow.domains.notification.domain.ImageNotification
1416
import com.depromeet.whatnow.domains.notification.domain.InteractionAttainmentNotification
@@ -46,6 +48,9 @@ class NotificationReadUseCase(
4648
is TimeOverNotification -> {
4749
TimeOverNotificationResponse.from(notification)
4850
}
51+
is ArrivalNotification -> {
52+
ArrivalNotificationResponse.from(notification)
53+
}
4954
else -> throw UnknownNotificationTypeException.EXCEPTION
5055
}
5156
}

Whatnow-Api/src/main/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCase.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,9 @@ class PromiseReadUseCase(
5050

5151
when (promise?.promiseType) {
5252
PromiseType.BEFORE, PromiseType.END -> {
53-
val promiseType = promise.promiseType
5453
val promiseFindDto = PromiseFindDto.of(promise, participant)
5554

56-
promiseSplitByPromiseTypeDto.getOrPut(promiseType) { mutableListOf() }
55+
promiseSplitByPromiseTypeDto.getOrPut(promise.promiseType) { mutableListOf() }
5756
.add(promiseFindDto)
5857
}
5958

@@ -97,14 +96,14 @@ class PromiseReadUseCase(
9796
promise = promise,
9897
users = participants,
9998
)
100-
}.sortedByDescending { it.endTime }
99+
}.sortedBy { it.endTime }
101100
}
102101

103102
fun findPromiseDetailByStatus(promiseType: PromiseType): List<PromiseDetailDto> {
104103
val userId: Long = SecurityUtils.currentUserId
105104
val promiseUsersByPromiseId = promiseUserAdaptor.findByUserId(userId)
106105
val promiseIds = promiseUsersByPromiseId.map { it.promiseId }
107-
val promises = promiseAdaptor.queryPromises(promiseIds)
106+
val promises = promiseAdaptor.queryPromises(promiseIds).filter { it.promiseType == promiseType }
108107
val uniqueUsers = promiseUsersByPromiseId.distinctBy { it.userId }
109108
val users = userAdapter.queryUsers(uniqueUsers.map { it.userId })
110109
val result = mutableListOf<PromiseDetailDto>()
@@ -125,7 +124,7 @@ class PromiseReadUseCase(
125124
}
126125

127126
val promiseImagesUrls = promiseImageAdapter.findAllByPromiseId(promise.id!!)
128-
.sortedBy { it.createdAt }
127+
.sortedByDescending { it.createdAt }
129128
.map { it.uri }
130129

131130
val timeOverLocations = promiseUsers.mapNotNull { promiseUser ->
@@ -144,7 +143,7 @@ class PromiseReadUseCase(
144143
)
145144
}
146145

147-
return result.sortedByDescending { it.endTime }
146+
return result.sortedBy { it.endTime }
148147
}
149148

150149
fun findPromiseActive(promiseId: Long): Boolean {
@@ -162,7 +161,7 @@ class PromiseReadUseCase(
162161

163162
private fun findPromisesByUserId(userId: Long): List<Promise> {
164163
val promiseUsers = promiseUserAdaptor.findByUserId(userId)
165-
return promiseUsers.map { promiseAdaptor.queryPromise(it.promiseId) }.sortedByDescending { it.endTime }
164+
return promiseUsers.map { promiseAdaptor.queryPromise(it.promiseId) }
166165
}
167166

168167
fun findByPromiseId(promiseId: Long): PromiseFindDto {

Whatnow-Api/src/test/kotlin/com/depromeet/whatnow/api/promise/usecase/PromiseReadUseCaseTest.kt

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,25 @@ class PromiseReadUseCaseTest {
9797
),
9898
Promise(
9999
id = 2,
100+
title = "Promise A",
101+
endTime = promiseTime1,
102+
mainUserId = 1L,
103+
meetPlace = PlaceVo(
104+
CoordinateVo(352.1, 167.2),
105+
"서울시 강남구",
106+
),
107+
promiseType = PromiseType.BEFORE,
108+
),
109+
Promise(
110+
id = 3,
100111
title = "Promise 2",
101112
endTime = promiseTime2,
102113
mainUserId = 2L,
103114
meetPlace = PlaceVo(
104115
CoordinateVo(123.4, 234.2),
105116
"전라북도 남원시",
106117
),
107-
promiseType = PromiseType.DELETED,
118+
promiseType = PromiseType.END,
108119
),
109120
)
110121
val users = listOf(
@@ -148,17 +159,13 @@ class PromiseReadUseCaseTest {
148159
// Then
149160
Assertions.assertEquals(2, result.size)
150161

151-
Assertions.assertEquals("Promise 2", result[0].title)
152-
Assertions.assertEquals(promiseTime1, result[1].endTime)
162+
Assertions.assertEquals("Promise 1", result[0].title)
163+
Assertions.assertEquals(promiseTime1, result[0].endTime)
153164
Assertions.assertEquals(1, result[1].promiseUsers.size)
154165

155-
Assertions.assertEquals("Promise 1", result[1].title)
156-
Assertions.assertEquals(promiseTime2, result[0].endTime)
157-
Assertions.assertEquals(1, result[0].promiseUsers.size)
158-
159166
// 약속 1번
160-
Assertions.assertEquals(1234, result[1].promiseUsers[0].interactions[0].count)
167+
Assertions.assertEquals(1234, result[0].promiseUsers[0].interactions[0].count)
161168
// 약속 2번
162-
Assertions.assertEquals(2934, result[0].promiseUsers[0].interactions[0].count)
169+
Assertions.assertEquals(2934, result[1].promiseUsers[0].interactions[0].count)
163170
}
164171
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.depromeet.whatnow.domains.notification.domain
2+
3+
import javax.persistence.DiscriminatorValue
4+
import javax.persistence.Entity
5+
6+
@Entity
7+
@DiscriminatorValue("ARRIVAL")
8+
class ArrivalNotification(
9+
var promiseId: Long,
10+
11+
var senderUserId: Long,
12+
13+
override var targetUserId: Long,
14+
) : Notification(targetUserId)

Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/domains/notification/service/NotificationDomainService.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.depromeet.whatnow.domains.notification.service
22

33
import com.depromeet.whatnow.domains.interaction.domain.InteractionType
44
import com.depromeet.whatnow.domains.notification.adapter.NotificationAdapter
5+
import com.depromeet.whatnow.domains.notification.domain.ArrivalNotification
56
import com.depromeet.whatnow.domains.notification.domain.EndSharingNotification
67
import com.depromeet.whatnow.domains.notification.domain.ImageNotification
78
import com.depromeet.whatnow.domains.notification.domain.InteractionAttainmentNotification
@@ -49,6 +50,10 @@ class NotificationDomainService(
4950
notificationAdapter.save(InteractionAttainmentNotification(promiseId, senderUserId, interactionType, targetUserId))
5051
}
5152

53+
fun saveForArrival(promiseId: Long, senderUserId: Long, targetUserId: Long) {
54+
notificationAdapter.save(ArrivalNotification(promiseId, senderUserId, targetUserId))
55+
}
56+
5257
@Transactional(readOnly = true)
5358
fun getMyNotifications(userId: Long, pageable: Pageable): Slice<Notification> {
5459
return notificationAdapter.getMyNotifications(userId, pageable)

Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/events/domainEvent/PromiseUserUpdateLocationEvent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ import com.depromeet.whatnow.common.aop.event.DomainEvent
55
class PromiseUserUpdateLocationEvent(
66
val promiseId: Long,
77
val userId: Long,
8-
val id: Long,
8+
val promiseUserId: Long,
99
) : DomainEvent()

Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/events/handler/ImageRegisterEventHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class ImageRegisterEventHandler(
3737

3838
// 앱 알람 허용한 유저
3939
val appAlarmPermitUsers = usersExcludingSelf.filter { user ->
40-
user.fcmNotification.fcmToken != null && user.fcmNotification.appAlarm
40+
user.fcmNotification.fcmToken != "" && user.fcmNotification.appAlarm
4141
}
4242

4343
val data: MutableMap<String, String> = mutableMapOf()

Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/events/handler/PromiseActivationEventHandler.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ class PromiseActivationEventHandler(
2323

2424
val now = LocalDateTime.now()
2525

26-
// 약속 시작 시간까지 남은 시간(초)
27-
val promiseStartAndTrackingStartTime = Duration.between(now, promise.endTime.minusMinutes(30)).seconds
26+
// 현재 시간부터 약속 트래킹 시작까지 남은 시간 (= 현재시간 - 약속시간 - 1시간)
27+
val promiseStartAndTrackingStartTime = Duration.between(now, promise.endTime.minusHours(1)).seconds
2828

29-
// 약속 종료 시간까지 남은 시간(초)
29+
// 현재 시간부터 약속 종료까지 남은시간 (= 현재시간 - 약속시간)
3030
val promiseEndTime = Duration.between(now, promise.endTime).seconds
3131

32-
// 트래킹 종료 시간까지 남은 시간(초)
32+
// 현재 시간부터 트래킹 종료까지 남은시간 (= 현재시간 - 약속시간 + 30분)
3333
val trackingEndTime = Duration.between(now, promise.endTime.plusMinutes(30)).seconds
3434

3535
promiseActiveAdapter.save(PromiseActiveRedisEntity("EXPIRE_EVENT_PROMISE_TIME_START_${promise.id}", promiseStartAndTrackingStartTime))

Whatnow-Domain/src/main/kotlin/com/depromeet/whatnow/events/handler/PromiseTimeEndEventHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class PromiseTimeEndEventHandler(
5555

5656
// 앱 알람 허용한 유저
5757
val appAlarmPermitUsers = users
58-
.filter { user -> user.fcmNotification.fcmToken != null && user.fcmNotification.appAlarm }
58+
.filter { user -> user.fcmNotification.fcmToken != "" && user.fcmNotification.appAlarm }
5959

6060
val lateData: MutableMap<String, String> = mutableMapOf()
6161
lateData["notificationType"] = NotificationType.TIMEOVER.name

0 commit comments

Comments
 (0)