Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.idiotfrogs.model.timecapsule

import kotlinx.serialization.Serializable

@Serializable
data class JoinRequestResponse(
val capsuleId: Long,
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@ package com.idiotfrogs.model.timecapsule
import kotlinx.datetime.LocalDate
import kotlinx.serialization.Serializable

@Serializable
data class MyTimeCapsuleListResponse(
val content: List<MyTimeCapsuleResponse>,
val totalPages: Int,
val totalElements: Int,
val number: Int,
val last: Boolean,
)

@Serializable
data class MyTimeCapsuleResponse(
val timeCapsuleId: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ package com.idiotfrogs.network.service

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.MyCapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleListResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
Expand Down Expand Up @@ -34,7 +35,7 @@ interface TimeCapsuleService {
): TimeCapsuleCreateResponse

@GET("time-capsules/my")
suspend fun getMyTimeCapsule(): List<MyTimeCapsuleResponse>
suspend fun getMyTimeCapsule(@Query("size") size: Int): MyTimeCapsuleListResponse

@DELETE("time-capsules/{capsuleId}")
suspend fun deleteTimeCapsule(@Path("capsuleId") capsuleId: Long)
Expand All @@ -56,7 +57,7 @@ interface TimeCapsuleService {
suspend fun joinTimeCapsule(@Path("capsuleId") capsuleId: Long): TimeCapsuleResponse

@POST("time-capsules/join-request")
suspend fun requestCollaborator(@Body body: PendingCollaboratorsRequest)
suspend fun requestCollaborator(@Body body: PendingCollaboratorsRequest): JoinRequestResponse

@PUT("time-capsules/{capsuleId}/bury")
suspend fun buryTimeCapsule(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.idiotfrogs.data.datasource.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.MyCapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
Expand Down Expand Up @@ -37,7 +38,7 @@ interface TimeCapsuleDataSource {

suspend fun joinTimeCapsule(capsuleId: Long): TimeCapsuleResponse

suspend fun requestCollaborator(body: PendingCollaboratorsRequest)
suspend fun requestCollaborator(body: PendingCollaboratorsRequest): JoinRequestResponse

suspend fun buryTimeCapsule(
capsuleId: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.idiotfrogs.data.datasource.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.MyCapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
Expand Down Expand Up @@ -31,7 +32,7 @@ class TimeCapsuleDataSourceImpl @Inject constructor(
}

override suspend fun getMyTimeCapsule(): List<MyTimeCapsuleResponse> {
return timeCapsuleService.getMyTimeCapsule()
return timeCapsuleService.getMyTimeCapsule(size = 6).content
}

override suspend fun deleteTimeCapsule(capsuleId: Long) {
Expand All @@ -58,7 +59,7 @@ class TimeCapsuleDataSourceImpl @Inject constructor(
return timeCapsuleService.joinTimeCapsule(capsuleId)
}

override suspend fun requestCollaborator(body: PendingCollaboratorsRequest) {
override suspend fun requestCollaborator(body: PendingCollaboratorsRequest): JoinRequestResponse {
return timeCapsuleService.requestCollaborator(body)
}

Expand Down Expand Up @@ -166,4 +167,4 @@ class TimeCapsuleDataSourceImpl @Inject constructor(
override suspend fun watering(capsuleId: Long) {
return timeCapsuleService.watering(capsuleId)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.idiotfrogs.data.repository.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.MyCapsuleContentsData
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
Expand Down Expand Up @@ -36,7 +37,7 @@ interface TimeCapsuleRepository {

suspend fun joinTimeCapsule(capsuleId: Long): TimeCapsuleResponse

suspend fun requestCollaborator(body: PendingCollaboratorsRequest)
suspend fun requestCollaborator(body: PendingCollaboratorsRequest): JoinRequestResponse

suspend fun buryTimeCapsule(
capsuleId: Long,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.idiotfrogs.data.repository.timecapsule
import com.idiotfrogs.data.datasource.timecapsule.TimeCapsuleDataSource
import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.MyCapsuleContentsData
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
Expand Down Expand Up @@ -74,7 +75,7 @@ class TimeCapsuleRepositoryImpl @Inject constructor(
}
}

override suspend fun requestCollaborator(body: PendingCollaboratorsRequest) {
override suspend fun requestCollaborator(body: PendingCollaboratorsRequest): JoinRequestResponse {
return timeCapsuleDataSource.requestCollaborator(body)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.idiotfrogs.domain.usecase.timecapsule

import com.idiotfrogs.data.repository.timecapsule.TimeCapsuleRepository
import com.idiotfrogs.model.timecapsule.JoinRequestResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.util.safeCatching
import javax.inject.Inject

class RequestCollaboratorUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(body: PendingCollaboratorsRequest): Result<Unit> = safeCatching {
suspend operator fun invoke(body: PendingCollaboratorsRequest): Result<JoinRequestResponse> = safeCatching {
timeCapsuleRepository.requestCollaborator(body)
}
}
75 changes: 37 additions & 38 deletions feature/detail/src/main/java/com/idiotfrogs/detail/DetailScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.PaddingValues
Expand Down Expand Up @@ -587,48 +588,46 @@ fun DetailScreen(

Spacer(Modifier.height(20.dp))

FlowRow(
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
visibleCollaborators.forEach { collaborator ->
GlideImage(
modifier = Modifier
.size(48.dp)
.wavyStroke(
color = MSTheme.color.greyG5,
fillColor = MSTheme.color.white,
strokeWidth = 3.dp,
cornerRadius = 24.dp,
amplitude = 1.dp,
spacing = 2.dp,
clipContent = true,
),
imageModel = { collaborator.profileImageUrl },
BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
val columnCount = 6
val gap = 8.dp
val cellSize = (maxWidth - gap * (columnCount - 1)) / columnCount
val avatarModifier = Modifier
.size(cellSize)
.wavyStroke(
color = MSTheme.color.greyG5,
fillColor = MSTheme.color.white,
strokeWidth = 3.dp,
cornerRadius = cellSize / 2,
amplitude = 1.dp,
spacing = 2.dp,
clipContent = true,
)
}

if (hiddenCollaboratorCount > 0) {
Box(
modifier = Modifier
.size(48.dp)
.wavyStroke(
color = MSTheme.color.greyG5,
fillColor = MSTheme.color.white,
strokeWidth = 3.dp,
cornerRadius = 24.dp,
amplitude = 1.dp,
spacing = 2.dp,
clipContent = true,
),
contentAlignment = Alignment.Center,
) {
MSText(
text = "+$hiddenCollaboratorCount",
fontWeight = FontWeight.Medium,
color = Color(0xFF0B0B0B),
FlowRow(
maxItemsInEachRow = columnCount,
horizontalArrangement = Arrangement.spacedBy(gap),
verticalArrangement = Arrangement.spacedBy(gap),
) {
visibleCollaborators.forEach { collaborator ->
GlideImage(
modifier = avatarModifier,
imageModel = { collaborator.profileImageUrl },
)
}

if (hiddenCollaboratorCount > 0) {
Box(
modifier = avatarModifier,
contentAlignment = Alignment.Center,
) {
MSText(
text = "+$hiddenCollaboratorCount",
fontWeight = FontWeight.Medium,
color = Color(0xFF0B0B0B),
)
}
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ class HomeViewModel @Inject constructor(
requestCollaboratorUseCase(body).onSuccess {
intent {
reduce { state.copy(isLoading = false, errorMessage = null) }
postSideEffect(HomeSideEffect.ShowToast)
postSideEffect(HomeSideEffect.NavigateToDetail(it.capsuleId))
fetchHome()
}
}.onFailure {
Expand Down
Loading