Skip to content

Commit 4958b99

Browse files
authored
Merge pull request #224 from IdiotFrogs/feature/223_create_detail_api
πŸ”€ :: (#223) Detail 쑰회 API 연동
2 parents 22f0c10 + a2909fa commit 4958b99

19 files changed

Lines changed: 290 additions & 142 deletions

File tree

β€Žapp/src/main/java/com/idiotfrogs/memoryseal/MainActivity.ktβ€Ž

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,9 @@ class MainActivity : ComponentActivity() {
7979
entry<Routes.Setting> { SettingRoute() }
8080
entry<Routes.Detail> {
8181
DetailRoute(
82-
title = "ν…ŒμŠ€νŠΈ Title",
83-
date = "2025-11-28",
84-
isMember = true,
85-
isVoteStart = true,
82+
isVoteStart = false,
8683
iSSeal = false,
8784
capsuleId = it.id,
88-
onSealClicked = {},
89-
onVoteClicked = {}
9085
)
9186
}
9287
entry<Routes.Message> {
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,34 @@
11
package com.idiotfrogs.extension
22

3+
import kotlinx.datetime.DayOfWeek
34
import kotlinx.datetime.LocalDateTime
45
import kotlinx.datetime.TimeZone
56
import kotlinx.datetime.number
67
import kotlinx.datetime.todayIn
78
import kotlin.time.Clock
89
import kotlin.time.ExperimentalTime
910

10-
fun LocalDateTime.toYearMonthDay(): String =
11-
"${year}. ${month.number.toString().padStart(2, '0')}. ${day.toString().padStart(2, '0')}"
11+
fun LocalDateTime?.toYearMonthDay(): String =
12+
"${this?.year}. ${this?.month?.number.toString().padStart(2, '0')}. ${this?.day.toString().padStart(2, '0')}"
13+
14+
fun LocalDateTime?.toYearMonthDayWeek(): String =
15+
"${this?.year}. ${this?.month?.number.toString().padStart(2, '0')}. ${this?.day.toString().padStart(2, '0')}. ${this?.dayOfWeek?.toKoreanShort()}"
1216

1317
@OptIn(ExperimentalTime::class)
14-
fun LocalDateTime.toDday(): String {
18+
fun LocalDateTime?.toDday(): String {
1519
val today = Clock.System.todayIn(TimeZone.currentSystemDefault())
16-
val targetDate = this.date
17-
val diff = targetDate.toEpochDays() - today.toEpochDays()
20+
val targetDate = this?.date
21+
val diff = targetDate?.toEpochDays()?.minus(today.toEpochDays())
22+
23+
return "D-$diff"
24+
}
1825

19-
return if (diff == 0L) "D-day" else "D-$diff"
26+
private fun DayOfWeek.toKoreanShort(): String = when (this) {
27+
DayOfWeek.MONDAY -> "(μ›”)"
28+
DayOfWeek.TUESDAY -> "(ν™”)"
29+
DayOfWeek.WEDNESDAY -> "(수)"
30+
DayOfWeek.THURSDAY -> "(λͺ©)"
31+
DayOfWeek.FRIDAY -> "(금)"
32+
DayOfWeek.SATURDAY -> "(ν† )"
33+
DayOfWeek.SUNDAY -> "(일)"
2034
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.idiotfrogs.model.timecapsule
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class TimeCapsuleCollaboratorsResponse(
7+
val contributorRole: TimeCapsuleRole,
8+
val nickname: String,
9+
val bury: Boolean?,
10+
val userId: Long,
11+
val profileImageUrl: String,
12+
val userActiveStatus: Boolean,
13+
val isMe: Boolean,
14+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.idiotfrogs.model.timecapsule
2+
3+
import kotlinx.datetime.LocalDateTime
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class TimeCapsuleResponse(
8+
val title: String,
9+
val description: String?,
10+
val buriedAt: LocalDateTime?,
11+
val createdAt: LocalDateTime,
12+
val openedAt: LocalDateTime,
13+
val mainImageUrl: String,
14+
val timeCapsuleStatus: TimeCapsuleStatus,
15+
val userRole: TimeCapsuleRole,
16+
)

β€Žcore/network/src/main/java/com/idiotfrogs/network/service/TimeCapsuleService.ktβ€Ž

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.idiotfrogs.network.service
22

33
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
4+
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
45
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
56
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
7+
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
68
import okhttp3.MultipartBody
79
import retrofit2.http.DELETE
810
import retrofit2.http.GET
@@ -24,5 +26,11 @@ interface TimeCapsuleService {
2426
suspend fun getMyTimeCapsule(): List<MyTimeCapsuleResponse>
2527

2628
@DELETE("time-capsules/{capsuleId}")
27-
suspend fun deleteCapsule(@Path("capsuleId") capsuleId: Long)
29+
suspend fun deleteTimeCapsule(@Path("capsuleId") capsuleId: Long)
30+
31+
@GET("time-capsules/{capsuleId}")
32+
suspend fun getTimeCapsule(@Path("capsuleId") capsuleId: Long): TimeCapsuleResponse
33+
34+
@GET("time-capsules/{capsuleId}/collaborators")
35+
suspend fun getTimesCapsuleCollaborators(@Path("capsuleId") capsuleId: Long): List<TimeCapsuleCollaboratorsResponse>
2836
}

β€Ždata/src/main/java/com/idiotfrogs/data/datasource/timecapsule/TimeCapsuleDataSource.ktβ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.idiotfrogs.data.datasource.timecapsule
22

33
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
4+
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
45
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
56
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
7+
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
68
import okhttp3.MultipartBody
79

810
interface TimeCapsuleDataSource {
@@ -13,5 +15,9 @@ interface TimeCapsuleDataSource {
1315

1416
suspend fun getMyTimeCapsule(): List<MyTimeCapsuleResponse>
1517

16-
suspend fun deleteCapsule(capsuleId: Long)
18+
suspend fun deleteTimeCapsule(capsuleId: Long)
19+
20+
suspend fun getTimeCapsule(capsuleId: Long): TimeCapsuleResponse
21+
22+
suspend fun getTimesCapsuleCollaborators(capsuleId: Long): List<TimeCapsuleCollaboratorsResponse>
1723
}

β€Ždata/src/main/java/com/idiotfrogs/data/datasource/timecapsule/TimeCapsuleDataSourceImpl.ktβ€Ž

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.idiotfrogs.data.datasource.timecapsule
22

33
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
4+
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
45
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
56
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
7+
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
68
import com.idiotfrogs.network.service.TimeCapsuleService
79
import okhttp3.MultipartBody
810
import javax.inject.Inject
@@ -24,7 +26,15 @@ class TimeCapsuleDataSourceImpl @Inject constructor(
2426
return timeCapsuleService.getMyTimeCapsule()
2527
}
2628

27-
override suspend fun deleteCapsule(capsuleId: Long) {
28-
return timeCapsuleService.deleteCapsule(capsuleId)
29+
override suspend fun deleteTimeCapsule(capsuleId: Long) {
30+
return timeCapsuleService.deleteTimeCapsule(capsuleId)
31+
}
32+
33+
override suspend fun getTimeCapsule(capsuleId: Long): TimeCapsuleResponse {
34+
return timeCapsuleService.getTimeCapsule(capsuleId)
35+
}
36+
37+
override suspend fun getTimesCapsuleCollaborators(capsuleId: Long): List<TimeCapsuleCollaboratorsResponse> {
38+
return timeCapsuleService.getTimesCapsuleCollaborators(capsuleId)
2939
}
3040
}

β€Ždata/src/main/java/com/idiotfrogs/data/repository/timecapsule/TimeCapsuleRepository.ktβ€Ž

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.idiotfrogs.data.repository.timecapsule
22

33
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
4+
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
45
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
56
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
7+
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
68
import java.io.File
79

810
interface TimeCapsuleRepository {
@@ -13,5 +15,9 @@ interface TimeCapsuleRepository {
1315

1416
suspend fun getMyTimeCapsule(): List<MyTimeCapsuleResponse>
1517

16-
suspend fun deleteCapsule(capsuleId: Long)
18+
suspend fun deleteTimeCapsule(capsuleId: Long)
19+
20+
suspend fun getTimeCapsule(capsuleId: Long): TimeCapsuleResponse
21+
22+
suspend fun getTimesCapsuleCollaborators(capsuleId: Long): List<TimeCapsuleCollaboratorsResponse>
1723
}

β€Ždata/src/main/java/com/idiotfrogs/data/repository/timecapsule/TimeCapsuleRepositoryImpl.ktβ€Ž

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package com.idiotfrogs.data.repository.timecapsule
22

33
import com.idiotfrogs.data.datasource.timecapsule.TimeCapsuleDataSource
44
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
5+
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
56
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
67
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
8+
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
79
import okhttp3.MediaType.Companion.toMediaType
810
import okhttp3.MultipartBody
911
import okhttp3.RequestBody.Companion.asRequestBody
@@ -29,7 +31,15 @@ class TimeCapsuleRepositoryImpl @Inject constructor(
2931
return timeCapsuleDataSource.getMyTimeCapsule()
3032
}
3133

32-
override suspend fun deleteCapsule(capsuleId: Long) {
33-
return timeCapsuleDataSource.deleteCapsule(capsuleId)
34+
override suspend fun deleteTimeCapsule(capsuleId: Long) {
35+
return timeCapsuleDataSource.deleteTimeCapsule(capsuleId)
36+
}
37+
38+
override suspend fun getTimeCapsule(capsuleId: Long): TimeCapsuleResponse {
39+
return timeCapsuleDataSource.getTimeCapsule(capsuleId)
40+
}
41+
42+
override suspend fun getTimesCapsuleCollaborators(capsuleId: Long): List<TimeCapsuleCollaboratorsResponse> {
43+
return timeCapsuleDataSource.getTimesCapsuleCollaborators(capsuleId)
3444
}
3545
}

domain/src/main/java/com/idiotfrogs/domain/usecase/timecapsule/DeleteCapsuleUseCase.kt renamed to domain/src/main/java/com/idiotfrogs/domain/usecase/timecapsule/DeleteTimeCapsuleUseCase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import com.idiotfrogs.data.repository.timecapsule.TimeCapsuleRepository
44
import com.idiotfrogs.util.safeCatching
55
import javax.inject.Inject
66

7-
class DeleteCapsuleUseCase @Inject constructor(
7+
class DeleteTimeCapsuleUseCase @Inject constructor(
88
private val timeCapsuleRepository: TimeCapsuleRepository
99
) {
1010
suspend operator fun invoke(capsuleId: Long): Result<Unit> = safeCatching {
11-
timeCapsuleRepository.deleteCapsule(capsuleId)
11+
timeCapsuleRepository.deleteTimeCapsule(capsuleId)
1212
}
1313
}

0 commit comments

Comments
Β (0)