Skip to content
Open
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,18 @@
package com.idiotfrogs.model.timecapsule

import kotlinx.serialization.Serializable

@Serializable
data class TimeCapsuleContentResponse(
val userId: Long,
val nickname: String,
val profileImageUrl: String,
val capsuleContents: List<CapsuleContentsData>,
)

@Serializable
data class CapsuleContentsData(
val contentId: Long,
val content: String?,
val attachedFileUrls: List<String>?,
)
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.idiotfrogs.network.service

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.ProcessCollaboratorRequest
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleInviteCodeResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.DELETE
import retrofit2.http.GET
Expand Down Expand Up @@ -87,4 +90,27 @@ interface TimeCapsuleService {
suspend fun leaveTimeCapsule(
@Path("capsuleId") capsuleId: Long
)

@GET("api/time-capsule-content/{timeCapsuleId}/contents")
suspend fun getTimeCapsuleContent(@Path("timeCapsuleId") timeCapsuleId: Long): List<TimeCapsuleContentResponse>

@GET("api/time-capsule-content/{timeCapsuleId}/my-contents")
suspend fun getMyTimeCapsuleContent(@Path("timeCapsuleId") timeCapsuleId: Long): List<CapsuleContentsData>

@POST("api/time-capsule-content/{timeCapsuleId}")
@Multipart
suspend fun createTimeCapsuleContent(
@Path("timeCapsuleId") timeCapsuleId: Long,
@Part("content") content: RequestBody,
@Part files: List<MultipartBody.Part>,
): CapsuleContentsData

@PUT("api/time-capsule-content/{contentId}")
suspend fun modifyTimeCapsuleContent(
@Path("contentId") contentId: Long,
@Query("content") content: String,
): CapsuleContentsData

@DELETE("api/time-capsule-content")
suspend fun deleteTimeCapsuleContent(@Query("contentIds") contentIds: List<Long>)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.idiotfrogs.data.datasource.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.ProcessCollaboratorRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleInviteCodeResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
import okhttp3.MultipartBody
import okhttp3.RequestBody

interface TimeCapsuleDataSource {
suspend fun createTimeCapsule(
Expand Down Expand Up @@ -58,4 +61,21 @@ interface TimeCapsuleDataSource {
): TimeCapsuleCollaboratorsResponse

suspend fun leaveTimeCapsule(capsuleId: Long)

suspend fun getTimeCapsuleContent(timeCapsuleId: Long): List<TimeCapsuleContentResponse>

suspend fun getMyTimeCapsuleContent(timeCapsuleId: Long): List<CapsuleContentsData>

suspend fun createTimeCapsuleContent(
timeCapsuleId: Long,
content: RequestBody,
files: List<MultipartBody.Part>,
): CapsuleContentsData

suspend fun modifyTimeCapsuleContent(
contentId: Long,
content: String,
): CapsuleContentsData

suspend fun deleteTimeCapsuleContent(contentIds: List<Long>)
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.idiotfrogs.data.datasource.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.ProcessCollaboratorRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleInviteCodeResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
import com.idiotfrogs.network.service.TimeCapsuleService
import okhttp3.MultipartBody
import okhttp3.RequestBody
import javax.inject.Inject

class TimeCapsuleDataSourceImpl @Inject constructor(
Expand Down Expand Up @@ -96,4 +99,38 @@ class TimeCapsuleDataSourceImpl @Inject constructor(
override suspend fun leaveTimeCapsule(capsuleId: Long) {
return timeCapsuleService.leaveTimeCapsule(capsuleId)
}

override suspend fun getTimeCapsuleContent(timeCapsuleId: Long): List<TimeCapsuleContentResponse> {
return timeCapsuleService.getTimeCapsuleContent(timeCapsuleId)
}

override suspend fun getMyTimeCapsuleContent(timeCapsuleId: Long): List<CapsuleContentsData> {
return timeCapsuleService.getMyTimeCapsuleContent(timeCapsuleId)
}

override suspend fun createTimeCapsuleContent(
timeCapsuleId: Long,
content: RequestBody,
files: List<MultipartBody.Part>
): CapsuleContentsData {
return timeCapsuleService.createTimeCapsuleContent(
timeCapsuleId = timeCapsuleId,
content = content,
files = files
)
}

override suspend fun modifyTimeCapsuleContent(
contentId: Long,
content: String
): CapsuleContentsData {
return timeCapsuleService.modifyTimeCapsuleContent(
contentId = contentId,
content = content
)
}

override suspend fun deleteTimeCapsuleContent(contentIds: List<Long>) {
return timeCapsuleService.deleteTimeCapsuleContent(contentIds)
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package com.idiotfrogs.data.repository.timecapsule

import com.idiotfrogs.model.timecapsule.BuryTimeCapsuleRequest
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.model.timecapsule.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.ProcessCollaboratorRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleInviteCodeResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
import okhttp3.MultipartBody
import java.io.File

interface TimeCapsuleRepository {
Expand Down Expand Up @@ -58,4 +61,21 @@ interface TimeCapsuleRepository {
): TimeCapsuleCollaboratorsResponse

suspend fun leaveTimeCapsule(capsuleId: Long)

suspend fun getTimeCapsuleContent(timeCapsuleId: Long): List<TimeCapsuleContentResponse>

suspend fun getMyTimeCapsuleContent(timeCapsuleId: Long): List<CapsuleContentsData>

suspend fun createTimeCapsuleContent(
timeCapsuleId: Long,
content: String,
files: List<File>,
): CapsuleContentsData

suspend fun modifyTimeCapsuleContent(
contentId: Long,
content: String,
): CapsuleContentsData

suspend fun deleteTimeCapsuleContent(contentIds: List<Long>)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,20 @@ 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.MyTimeCapsuleResponse
import com.idiotfrogs.model.timecapsule.PendingCollaboratorsRequest
import com.idiotfrogs.model.timecapsule.ProcessCollaboratorRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCollaboratorsResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleContentResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateRequest
import com.idiotfrogs.model.timecapsule.TimeCapsuleCreateResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleInviteCodeResponse
import com.idiotfrogs.model.timecapsule.TimeCapsuleResponse
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
import javax.inject.Inject

Expand Down Expand Up @@ -101,4 +104,44 @@ class TimeCapsuleRepositoryImpl @Inject constructor(
override suspend fun leaveTimeCapsule(capsuleId: Long) {
return timeCapsuleDataSource.leaveTimeCapsule(capsuleId)
}

override suspend fun getTimeCapsuleContent(timeCapsuleId: Long): List<TimeCapsuleContentResponse> {
return timeCapsuleDataSource.getTimeCapsuleContent(timeCapsuleId)
}

override suspend fun getMyTimeCapsuleContent(timeCapsuleId: Long): List<CapsuleContentsData> {
return timeCapsuleDataSource.getMyTimeCapsuleContent(timeCapsuleId)
}

override suspend fun createTimeCapsuleContent(
timeCapsuleId: Long,
content: String,
files: List<File>
): CapsuleContentsData {
val contentBody = content.toRequestBody("text/plain".toMediaType())
val fileParts = files.map {
val requestBody = it.asRequestBody("image/jpeg".toMediaType())
MultipartBody.Part.createFormData("files", it.name, requestBody)
}

return timeCapsuleDataSource.createTimeCapsuleContent(
timeCapsuleId = timeCapsuleId,
content = contentBody,
files = fileParts
)
}

override suspend fun modifyTimeCapsuleContent(
contentId: Long,
content: String
): CapsuleContentsData {
return timeCapsuleDataSource.modifyTimeCapsuleContent(
contentId = contentId,
content = content
)
}

override suspend fun deleteTimeCapsuleContent(contentIds: List<Long>) {
return timeCapsuleDataSource.deleteTimeCapsuleContent(contentIds)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.idiotfrogs.domain.usecase.timecapsule

import com.idiotfrogs.data.repository.timecapsule.TimeCapsuleRepository
import com.idiotfrogs.model.timecapsule.CapsuleContentsData
import com.idiotfrogs.util.safeCatching
import java.io.File
import javax.inject.Inject

class CreateTimeCapsuleContentUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(
timeCapsuleId: Long,
content: String,
files: List<File>,
): Result<CapsuleContentsData> = safeCatching {
timeCapsuleRepository.createTimeCapsuleContent(
timeCapsuleId = timeCapsuleId,
content = content,
files = files
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.idiotfrogs.domain.usecase.timecapsule

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

class DeleteTimeCapsuleContentUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(contentIds: List<Long>): Result<Unit> = safeCatching {
timeCapsuleRepository.deleteTimeCapsuleContent(contentIds)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.idiotfrogs.domain.usecase.timecapsule

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

class GetMyTimeCapsuleContentUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(timeCapsuleId: Long): Result<List<CapsuleContentsData>> = safeCatching {
timeCapsuleRepository.getMyTimeCapsuleContent(timeCapsuleId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.idiotfrogs.domain.usecase.timecapsule

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

class GetTimeCapsuleContentUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(timeCapsuleId: Long): Result<List<TimeCapsuleContentResponse>> = safeCatching {
timeCapsuleRepository.getTimeCapsuleContent(timeCapsuleId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.idiotfrogs.domain.usecase.timecapsule

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

class ModifyTimeCapsuleContentUseCase @Inject constructor(
private val timeCapsuleRepository: TimeCapsuleRepository
) {
suspend operator fun invoke(
contentId: Long,
content: String,
): Result<CapsuleContentsData> = safeCatching {
timeCapsuleRepository.modifyTimeCapsuleContent(
contentId = contentId,
content = content
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ fun DetailScreen(
)
Spacer(Modifier.height(4.dp))
MSText(
text = "2개 등둝",
text = "${capsule?.myContentCount}개 등둝",
fontSize = 12.dp,
fontWeight = FontWeight.Medium,
color = MSTheme.color.primaryDark,
Expand All @@ -497,7 +497,7 @@ fun DetailScreen(
)
Spacer(Modifier.height(4.dp))
MSText(
text = "12개 등둝",
text = "${capsule?.myImageCount}개 등둝",
fontSize = 12.dp,
fontWeight = FontWeight.Medium,
color = MSTheme.color.primaryDark,
Expand Down
Loading
Loading