Skip to content

Commit 1d10436

Browse files
authored
[MERGE] #390 -> develop
[FEAT/#390] ์ผํšŒ์„ฑ FCM ํ† ํฐ / ์„œ๋ฒ„ํ†ต์‹  ๊ตฌํ˜„
2 parents 1cdab6d + e12df0d commit 1d10436

File tree

10 files changed

+67
-1
lines changed

10 files changed

+67
-1
lines changed

โ€Ždata/home/src/main/java/com/terning/data/home/datasource/HomeDataSource.ktโ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.terning.data.home.datasource
33
import com.terning.core.network.BaseResponse
44
import com.terning.core.network.NonDataBaseResponse
55
import com.terning.data.home.dto.request.ChangeFilterRequestDto
6+
import com.terning.data.home.dto.request.FcmTokenRequestDto
67
import com.terning.data.home.dto.response.HomeFilteringInfoResponseDto
78
import com.terning.data.home.dto.response.HomeRecommendInternResponseDto
89
import com.terning.data.home.dto.response.HomeUpcomingInternResponseDto
@@ -18,4 +19,6 @@ interface HomeDataSource {
1819
suspend fun getFilteringInfo(): BaseResponse<HomeFilteringInfoResponseDto>
1920

2021
suspend fun putFilteringInfo(changeFilterRequestDto: ChangeFilterRequestDto): NonDataBaseResponse
22+
23+
suspend fun sendFcmToken(fcmTokenRequestDto: FcmTokenRequestDto): NonDataBaseResponse
2124
}

โ€Ždata/home/src/main/java/com/terning/data/home/datasourceimpl/HomeDataSourceImpl.ktโ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.terning.core.network.BaseResponse
44
import com.terning.core.network.NonDataBaseResponse
55
import com.terning.data.home.datasource.HomeDataSource
66
import com.terning.data.home.dto.request.ChangeFilterRequestDto
7+
import com.terning.data.home.dto.request.FcmTokenRequestDto
78
import com.terning.data.home.dto.response.HomeFilteringInfoResponseDto
89
import com.terning.data.home.dto.response.HomeRecommendInternResponseDto
910
import com.terning.data.home.dto.response.HomeUpcomingInternResponseDto
@@ -30,4 +31,7 @@ class HomeDataSourceImpl @Inject constructor(
3031

3132
override suspend fun putFilteringInfo(changeFilterRequestDto: ChangeFilterRequestDto): NonDataBaseResponse =
3233
homeService.putFilteringInfo(changeFilterRequestDto)
34+
35+
override suspend fun sendFcmToken(fcmTokenRequestDto: FcmTokenRequestDto): NonDataBaseResponse =
36+
homeService.sendFcmToken(fcmTokenRequestDto)
3337
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.terning.data.home.dto.request
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class FcmTokenRequestDto(
8+
@SerialName("fcmToken")
9+
val fcmToken: String
10+
)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.terning.data.home.mapper
2+
3+
import com.terning.data.home.dto.request.FcmTokenRequestDto
4+
import com.terning.domain.home.entity.FcmToken
5+
6+
fun FcmToken.toRequestDto(): FcmTokenRequestDto =
7+
FcmTokenRequestDto(
8+
fcmToken = fcmToken
9+
)

โ€Ždata/home/src/main/java/com/terning/data/home/repositoryimpl/HomeRepositoryImpl.ktโ€Ž

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import com.terning.data.home.dto.request.toChangeFilterRequestDto
99
import com.terning.data.home.mapper.toHomeFilteringInfo
1010
import com.terning.data.home.mapper.toHomeRecommendedIntern
1111
import com.terning.data.home.mapper.toHomeUpcomingInternList
12+
import com.terning.data.home.mapper.toRequestDto
1213
import com.terning.data.home.pagingsource.HomePagingSource
1314
import com.terning.domain.home.entity.ChangeFilteringRequestModel
15+
import com.terning.domain.home.entity.FcmToken
1416
import com.terning.domain.home.entity.HomeFilteringInfo
1517
import com.terning.domain.home.entity.HomeRecommendedIntern
1618
import com.terning.domain.home.entity.HomeUpcomingIntern
@@ -52,4 +54,9 @@ class HomeRepositoryImpl @Inject constructor(
5254
putFilteringRequest.toChangeFilterRequestDto()
5355
)
5456
}
57+
58+
override suspend fun sendFcmToken(fcmTokenRequest: FcmToken): Result<Unit> =
59+
runCatching {
60+
homeDataSource.sendFcmToken(fcmTokenRequest.toRequestDto())
61+
}
5562
}

โ€Ždata/home/src/main/java/com/terning/data/home/service/HomeService.ktโ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package com.terning.data.home.service
33
import com.terning.core.network.BaseResponse
44
import com.terning.core.network.NonDataBaseResponse
55
import com.terning.data.home.dto.request.ChangeFilterRequestDto
6+
import com.terning.data.home.dto.request.FcmTokenRequestDto
67
import com.terning.data.home.dto.response.HomeFilteringInfoResponseDto
78
import com.terning.data.home.dto.response.HomeRecommendInternResponseDto
89
import com.terning.data.home.dto.response.HomeUpcomingInternResponseDto
910
import retrofit2.http.Body
1011
import retrofit2.http.GET
12+
import retrofit2.http.POST
1113
import retrofit2.http.PUT
1214
import retrofit2.http.Query
1315

@@ -28,4 +30,7 @@ interface HomeService {
2830
suspend fun putFilteringInfo(
2931
@Body body: ChangeFilterRequestDto,
3032
): NonDataBaseResponse
33+
34+
@POST("api/v1/auth/sync-user")
35+
suspend fun sendFcmToken(@Body body: FcmTokenRequestDto): NonDataBaseResponse
3136
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.terning.domain.home.entity
2+
3+
data class FcmToken(
4+
val fcmToken: String
5+
)

โ€Ždomain/home/src/main/java/com/terning/domain/home/repository/HomeRepository.ktโ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.terning.domain.home.repository
22

33
import androidx.paging.PagingData
44
import com.terning.domain.home.entity.ChangeFilteringRequestModel
5+
import com.terning.domain.home.entity.FcmToken
56
import com.terning.domain.home.entity.HomeFilteringInfo
67
import com.terning.domain.home.entity.HomeRecommendedIntern
78
import com.terning.domain.home.entity.HomeUpcomingIntern
@@ -19,4 +20,6 @@ interface HomeRepository {
1920
suspend fun putFilteringInfo(
2021
putFilteringRequest: ChangeFilteringRequestModel,
2122
): Result<Unit>
23+
24+
suspend fun sendFcmToken(fcmTokenRequest: FcmToken): Result<Unit>
2225
}

โ€Žfeature/home/src/main/java/com/terning/feature/home/HomeRoute.ktโ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ fun HomeRoute(
9595
if (!permissionState.status.isGranted && !viewModel.getPermissionRequested()) {
9696
permissionState.launchPermissionRequest()
9797

98+
viewModel.fetchAndSaveFcmToken()
99+
98100
snapshotFlow { permissionState.status }
99101
.map { it is PermissionStatus.Granted }
100102
.distinctUntilChanged()

โ€Žfeature/home/src/main/java/com/terning/feature/home/HomeViewModel.ktโ€Ž

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.paging.map
88
import com.terning.core.designsystem.state.UiState
99
import com.terning.core.designsystem.type.SortBy
1010
import com.terning.domain.home.entity.ChangeFilteringRequestModel
11+
import com.terning.domain.home.entity.FcmToken
1112
import com.terning.domain.home.entity.HomeRecommendIntern
1213
import com.terning.domain.home.entity.HomeRecommendedIntern
1314
import com.terning.domain.home.repository.HomeRepository
@@ -25,6 +26,7 @@ import kotlinx.coroutines.flow.flatMapLatest
2526
import kotlinx.coroutines.flow.flow
2627
import kotlinx.coroutines.flow.update
2728
import kotlinx.coroutines.launch
29+
import timber.log.Timber
2830
import javax.inject.Inject
2931
import com.terning.core.designsystem.R as DesignSystemR
3032

@@ -224,6 +226,22 @@ class HomeViewModel @Inject constructor(
224226
userRepository.setPermissionRequested(requested)
225227
}
226228

227-
fun getPermissionRequested() : Boolean = userRepository.getPermissionRequested()
229+
fun getPermissionRequested(): Boolean = userRepository.getPermissionRequested()
228230

231+
fun fetchAndSaveFcmToken() {
232+
viewModelScope.launch {
233+
userRepository.fetchAndSetFcmToken()
234+
.onSuccess {
235+
sendFcmToken()
236+
}.onFailure(Timber::e)
237+
}
238+
}
239+
240+
private fun sendFcmToken() {
241+
viewModelScope.launch {
242+
homeRepository.sendFcmToken(
243+
FcmToken(userRepository.getFcmToken())
244+
).onFailure(Timber::e)
245+
}
246+
}
229247
}

0 commit comments

Comments
ย (0)