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
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ proguard/
# Log Files

# Android Studio
/build
/*/build/
/*/local.properties
/*/out
Expand All @@ -91,6 +90,7 @@ obj/
/out/

# User-specific configurations
.idea/
.idea/caches/
.idea/libraries/
.idea/shelf/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import com.goalpanzi.mission_mate.convention.configureHiltAndroid
import com.goalpanzi.mission_mate.convention.libs

plugins {
id("missionmate.android.library")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,4 @@ internal abstract class MissionDataModule {

@Binds
abstract fun bindMissionRepository(impl: MissionRepositoryImpl): MissionRepository

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.goalpanzi.mission_mate.core.mission.mapper

import com.goalpanzi.mission_mate.core.data.common.mapper.toModel
import com.goalpanzi.mission_mate.core.domain.mission.model.VerificationInfoByBlockNumber
import com.goalpanzi.mission_mate.core.network.model.response.VerificationInfoByBlockNumberResponse
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

fun VerificationInfoByBlockNumberResponse.toModel() = VerificationInfoByBlockNumber(
nickname = nickname,
characterType = characterType.toModel(),
imageUrl = imageUrl,
verifiedAt = LocalDateTime.parse(verifiedAt, DateTimeFormatter.ISO_DATE_TIME).toLocalDate()
)
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.goalpanzi.mission_mate.core.domain.mission.model.MissionDetail
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionRank
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionVerification
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionVerifications
import com.goalpanzi.mission_mate.core.domain.mission.model.VerificationInfoByBlockNumber
import com.goalpanzi.mission_mate.core.domain.mission.repository.MissionRepository
import com.goalpanzi.mission_mate.core.network.model.request.CompleteMissionRequest
import com.goalpanzi.mission_mate.core.network.model.request.MissionVerificationsViewRequest
Expand Down Expand Up @@ -73,7 +74,7 @@ class MissionRepositoryImpl @Inject constructor(
override suspend fun getMyMissionVerification(
missionId: Long,
number: Int
): DomainResult<MissionVerification> = handleResult {
): DomainResult<VerificationInfoByBlockNumber> = handleResult {
missionService.getMyMissionVerification(missionId, number)
}.convert {
it.toModel()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,4 @@ import dagger.hilt.components.SingletonComponent
internal abstract class UserDataModule {
@Binds
abstract fun bindUserRepository(impl: UserRepositoryImpl): UserRepository

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.goalpanzi.mission_mate.core.domain.mission.model

import com.goalpanzi.mission_mate.core.domain.common.model.user.CharacterType
import java.time.LocalDate

data class VerificationInfoByBlockNumber(
val nickname: String,
val characterType: CharacterType,
val imageUrl: String,
val verifiedAt: LocalDate
)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.goalpanzi.mission_mate.core.domain.mission.model.MissionDetail
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionRank
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionVerification
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionVerifications
import com.goalpanzi.mission_mate.core.domain.mission.model.VerificationInfoByBlockNumber
import kotlinx.coroutines.flow.Flow
import java.io.File

Expand All @@ -22,7 +23,7 @@ interface MissionRepository {

suspend fun verifyMission(missionId: Long, image: File) : DomainResult<Unit>

suspend fun getMyMissionVerification(missionId: Long, number : Int) : DomainResult<MissionVerification>
suspend fun getMyMissionVerification(missionId: Long, number : Int) : DomainResult<VerificationInfoByBlockNumber>

suspend fun completeMission(missionId : Long) : DomainResult<Unit>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.goalpanzi.mission_mate.core.domain.mission.usecase

import com.goalpanzi.mission_mate.core.domain.common.DomainResult
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionVerification
import com.goalpanzi.mission_mate.core.domain.mission.model.VerificationInfoByBlockNumber
import com.goalpanzi.mission_mate.core.domain.mission.repository.MissionRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
Expand All @@ -13,7 +14,7 @@ class GetMyMissionVerificationUseCase @Inject constructor(
operator fun invoke(
missionId: Long,
number : Int
): Flow<DomainResult<MissionVerification>> = flow {
): Flow<DomainResult<VerificationInfoByBlockNumber>> = flow {
emit(missionRepository.getMyMissionVerification(missionId,number))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,20 @@ sealed interface RouteModel {
@Serializable
data class UserStory(
val userCharacter : String,
val nickname : String,
val verifiedAt : String,
val imageUrl : String
) : MissionRouteModel

@Serializable
data class VerificationPreview(
val missionId : Long,
val imageUrl : String
) : MissionRouteModel

@Serializable
data class MyVerificationHistory(
val missionId : Long,
val number: Int,
val count: Int,
) : MissionRouteModel
}

@Serializable
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.goalpanzi.mission_mate.core.network.model.response

import kotlinx.serialization.Serializable

@Serializable
data class VerificationInfoByBlockNumberResponse(
val nickname: String,
val characterType: CharacterTypeResponse,
val missionVerificationId: Long,
val imageUrl: String,
val verifiedAt: String,
val viewedAt: String
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.goalpanzi.mission_mate.core.network.model.response.MissionDetailRespo
import com.goalpanzi.mission_mate.core.network.model.response.MissionRankResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionVerificationResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionVerificationsResponse
import com.goalpanzi.mission_mate.core.network.model.response.VerificationInfoByBlockNumberResponse
import okhttp3.MultipartBody
import retrofit2.Response
import retrofit2.http.Body
Expand Down Expand Up @@ -61,7 +62,7 @@ interface MissionService {
suspend fun getMyMissionVerification(
@Path("missionId") missionId: Long,
@Path("number") number: Int
) : Response<MissionVerificationResponse>
) : Response<VerificationInfoByBlockNumberResponse>

@POST("/api/mission-members/complete")
suspend fun completeMission(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.goalpanzi.mission_mate.core.network.service

import com.goalpanzi.mission_mate.core.network.model.response.VerificationInfoByBlockNumberResponse
import retrofit2.Response
import retrofit2.http.GET
import retrofit2.http.Path

interface UserStoryService {

@GET("/api/missions/{missionId}/verifications/me/{number}")
suspend fun getVerificationInfoByBlockNumber(
@Path("missionId") missionId: Long,
@Path("number") number: Int,
) : Response<VerificationInfoByBlockNumberResponse>
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@ import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import com.goalpanzi.mission_mate.core.navigation.model.RouteModel.MainTabRoute.MissionRouteModel
import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd
import com.goalpanzi.mission_mate.core.ui.util.slideInFromBottom
import com.goalpanzi.mission_mate.core.ui.util.slideInFromEnd
import com.goalpanzi.mission_mate.core.ui.util.slideOutToBottom
import com.goalpanzi.mission_mate.core.ui.util.slideOutToEnd
import com.goalpanzi.mission_mate.feature.board.model.CharacterUiModel
import com.goalpanzi.mission_mate.feature.board.verification.model.MyVerificationExtra
import com.goalpanzi.mission_mate.feature.board.model.UserStory
import com.goalpanzi.mission_mate.feature.board.screen.BoardFinishRoute
import com.goalpanzi.mission_mate.feature.board.screen.BoardMissionDetailRoute
import com.goalpanzi.mission_mate.feature.board.screen.BoardRoute
import com.goalpanzi.mission_mate.feature.board.screen.UserStoryScreen
import com.goalpanzi.mission_mate.feature.board.screen.VerificationPreviewRoute
import com.goalpanzi.mission_mate.feature.board.verification.screen.MyVerificationHistoryScreen
import com.goalpanzi.mission_mate.feature.board.verification.screen.VerificationPreviewRoute
import java.net.URLEncoder
import java.nio.charset.StandardCharsets

Expand All @@ -37,7 +39,8 @@ fun NavGraphBuilder.boardNavGraph(
onNavigateDetail : (Long) -> Unit,
onNavigateFinish : (Long) -> Unit,
onNavigateStory: (UserStory) -> Unit,
onNavigateToPreview: (Long, Uri) -> Unit
onNavigateToPreview: (Long, Uri) -> Unit,
onNavigateMyVerificationHistory: (MyVerificationExtra) -> Unit
) {
composable<MissionRouteModel.Board> { navBackStackEntry ->
BoardRoute(
Expand All @@ -46,6 +49,7 @@ fun NavGraphBuilder.boardNavGraph(
onNavigateFinish = onNavigateFinish,
onClickStory = onNavigateStory,
onPreviewImage = onNavigateToPreview,
onNavigateMyVerificationHistory = onNavigateMyVerificationHistory
)
}
}
Expand Down Expand Up @@ -92,16 +96,12 @@ fun NavGraphBuilder.boardFinishNavGraph(
}

fun NavController.navigateToUserStory(
userStory: UserStory
) = with(userStory) {
val encodedUrl = URLEncoder.encode(imageUrl, StandardCharsets.UTF_8.toString())
character: CharacterUiModel
) {
this@navigateToUserStory
.navigate(
MissionRouteModel.UserStory(
userCharacter = characterUiModelType.name.uppercase(),
nickname = nickname,
verifiedAt = verifiedAt,
imageUrl = encodedUrl
userCharacter = character.name.uppercase()
)
)
}
Expand All @@ -121,9 +121,6 @@ fun NavGraphBuilder.userStoryNavGraph(
val characterUiModel = userCharacter.let { CharacterUiModel.valueOf(it) }
UserStoryScreen(
characterUiModel = characterUiModel,
nickname = nickname,
verifiedAt = verifiedAt,
imageUrl = imageUrl,
onClickClose = onClickClose
)
}
Expand Down Expand Up @@ -156,3 +153,17 @@ fun NavGraphBuilder.verificationPreviewNavGraph(
)
}
}

fun NavController.navigateToMyVerificationHistory(extra: MyVerificationExtra) {
this.navigate(extra.toRouteModel())
}

fun NavGraphBuilder.myVerificationHistoryNavGraph(
onClickClose: () -> Unit
) {
composable<MissionRouteModel.MyVerificationHistory> {
MyVerificationHistoryScreen(
onClickClose = onClickClose
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.goalpanzi.mission_mate.feature.board.model

data class UserStoryEntry(
val missionId: Long,
val characterUiModel: CharacterUiModel,
val position: Int
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.goalpanzi.mission_mate.feature.board.model.uimodel

import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable

@Stable
sealed interface UserStoryUiModel {
data object Loading : UserStoryUiModel


}
Original file line number Diff line number Diff line change
Expand Up @@ -33,26 +33,27 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.goalpanzi.mission_mate.core.designsystem.component.StableImage
import com.goalpanzi.mission_mate.core.designsystem.theme.ColorWhite_FFFFFFFF
import com.goalpanzi.mission_mate.core.domain.mission.model.BoardReward
import com.goalpanzi.mission_mate.feature.board.R
import com.goalpanzi.mission_mate.feature.board.component.Board
import com.goalpanzi.mission_mate.feature.board.component.BoardBottomView
import com.goalpanzi.mission_mate.feature.board.component.BoardTopView
import com.goalpanzi.mission_mate.feature.board.component.dialog.InvitationCodeDialog
import com.goalpanzi.mission_mate.feature.board.component.dialog.BoardEventDialog
import com.goalpanzi.mission_mate.feature.board.component.dialog.DeleteMissionDialog
import com.goalpanzi.mission_mate.feature.board.component.dialog.InvalidMissionErrorDialog
import com.goalpanzi.mission_mate.feature.board.component.dialog.InvitationCodeDialog
import com.goalpanzi.mission_mate.feature.board.model.BoardPiece
import com.goalpanzi.mission_mate.feature.board.model.MissionError
import com.goalpanzi.mission_mate.feature.board.model.MissionState
import com.goalpanzi.mission_mate.feature.board.verification.model.MyVerificationExtra
import com.goalpanzi.mission_mate.feature.board.model.UserStory
import com.goalpanzi.mission_mate.feature.board.model.toCharacterUiModel
import com.goalpanzi.mission_mate.feature.board.model.toUserStory
import com.goalpanzi.mission_mate.feature.board.model.uimodel.MissionBoardUiModel
import com.goalpanzi.mission_mate.feature.board.model.uimodel.MissionUiModel
import com.goalpanzi.mission_mate.feature.board.model.uimodel.MissionVerificationUiModel
import com.goalpanzi.mission_mate.core.designsystem.component.StableImage
import com.goalpanzi.mission_mate.feature.board.component.dialog.InvalidMissionErrorDialog
import com.goalpanzi.mission_mate.feature.board.model.MissionError
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

Expand All @@ -63,6 +64,7 @@ fun BoardRoute(
onNavigateDetail: (Long) -> Unit,
onNavigateFinish : (Long) -> Unit,
onClickStory: (UserStory) -> Unit,
onNavigateMyVerificationHistory: (MyVerificationExtra) -> Unit,
onPreviewImage: (Long, Uri) -> Unit,
modifier: Modifier = Modifier,
viewModel: BoardViewModel = hiltViewModel()
Expand Down Expand Up @@ -120,7 +122,7 @@ fun BoardRoute(
}
launch {
viewModel.myMissionVerification.collect {
onClickStory(it)
onNavigateMyVerificationHistory(it)
}
}
launch {
Expand Down Expand Up @@ -228,7 +230,7 @@ fun BoardRoute(
}
},
onClickMyVerificationBoardBlock = {
viewModel.getMyMissionVerification(it)
viewModel.navigateToVerificationHistory(it)
}
)

Expand Down
Loading