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
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ dependencies {
implementation(project(":core:data:onboarding"))
implementation(project(":core:data:setting"))
implementation(project(":core:data:user"))
implementation(project(":core:data:history"))
implementation(project(":core:push"))
implementation(project(":core:notification"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ dependencies {
implementation(project(":core:domain:common"))
implementation(project(":core:domain:auth"))
implementation(project(":core:domain:onboarding"))
implementation(project(":core:domain:history"))
implementation(project(":core:ui"))

}
1 change: 1 addition & 0 deletions core/data/history/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
55 changes: 55 additions & 0 deletions core/data/history/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.kotlin.android)
alias(libs.plugins.hilt.android)
alias(libs.plugins.kotlin.ksp)
}

android {
namespace = "com.goalpanzi.mission_mate.core.data.history"
compileSdk = 34

defaultConfig {
minSdk = 26

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
}

dependencies {

implementation(libs.bundles.test)
implementation(libs.bundles.coroutines)
implementation(libs.retrofit)

ksp(libs.hilt.compiler)
implementation(libs.hilt.android)

implementation(project(":core:data:common"))
implementation(project(":core:data:mission"))
implementation(project(":core:domain:common"))
implementation(project(":core:domain:history"))
implementation(project(":core:domain:mission"))
implementation(project(":core:network"))
implementation(project(":core:datastore"))
}
Empty file.
21 changes: 21 additions & 0 deletions core/data/history/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
4 changes: 4 additions & 0 deletions core/data/history/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.goalpanzi.mission_mate.core.data.history.di

import com.goalpanzi.mission_mate.core.data.history.repository.HistoryRepositoryImpl
import com.goalpanzi.mission_mate.core.domain.history.repository.HistoryRepository
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
internal abstract class HistoryDataModule {

@Binds
abstract fun bindHistoryRepository(impl: HistoryRepositoryImpl): HistoryRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.goalpanzi.mission_mate.core.data.history.mapper

import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistories
import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistory
import com.goalpanzi.mission_mate.core.mission.mapper.toModel
import com.goalpanzi.mission_mate.core.network.model.response.MissionHistoriesResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionHistoryResponse

fun MissionHistoryResponse.toModel(): MissionHistory = MissionHistory(
missionId = missionId,
description = description,
missionStartDate = missionStartDate,
missionEndDate = missionEndDate,
myVerificationCount = myVerificationCount,
totalVerificationCount = totalVerificationCount,
rank = rank,
randomImageUrlList = randomImageUrlList,
memberCount = memberCount,
missionMembers = missionMembers.map {
it.toModel()
}
)

fun MissionHistoriesResponse.toModel(): MissionHistories = MissionHistories(
hasNext = hasNext,
resultList = resultList.map {
it.toModel()
}
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.goalpanzi.mission_mate.core.data.history.repository

import com.goalpanzi.mission_mate.core.data.common.handleResult
import com.goalpanzi.mission_mate.core.data.history.mapper.toModel
import com.goalpanzi.mission_mate.core.domain.common.DomainResult
import com.goalpanzi.mission_mate.core.domain.common.convert
import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistories
import com.goalpanzi.mission_mate.core.domain.history.repository.HistoryRepository
import com.goalpanzi.mission_mate.core.network.service.HistoryService
import javax.inject.Inject

class HistoryRepositoryImpl @Inject constructor(
private val historyService: HistoryService
) : HistoryRepository {
override suspend fun getMissionHistories(page: Int): DomainResult<MissionHistories> =
handleResult {
historyService.getMyMissionHistories(page)
}.convert {
it.toModel()
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.goalpanzi.mission_mate.core.data.history

import org.junit.Test

import org.junit.Assert.*

/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,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.BoardReward
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionBoard
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionBoardMembers
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionBoardMember
import com.goalpanzi.mission_mate.core.domain.mission.model.MissionBoards
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.network.model.response.BoardRewardResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionBoardMembersResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionBoardMemberResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionBoardResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionBoardsResponse
import com.goalpanzi.mission_mate.core.network.model.response.MissionDetailResponse
Expand Down Expand Up @@ -41,8 +41,8 @@ fun MissionBoardResponse.toModel() : MissionBoard {
)
}

fun MissionBoardMembersResponse.toModel() : MissionBoardMembers {
return MissionBoardMembers(
fun MissionBoardMemberResponse.toModel() : MissionBoardMember {
return MissionBoardMember(
memberId = memberId,
nickname = nickname,
characterType = characterType.toModel()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.goalpanzi.mission_mate.core.data.onboarding.repository

import com.goalpanzi.mission_mate.core.mission.mapper.toModel
import com.goalpanzi.mission_mate.core.data.common.handleResult
import com.goalpanzi.mission_mate.core.data.onboarding.mapper.toModel
import com.goalpanzi.mission_mate.core.data.onboarding.mapper.toRequest
Expand All @@ -10,6 +9,7 @@ import com.goalpanzi.mission_mate.core.domain.mission.model.MissionDetail
import com.goalpanzi.mission_mate.core.domain.onboarding.model.CreateMissionBody
import com.goalpanzi.mission_mate.core.domain.onboarding.model.Missions
import com.goalpanzi.mission_mate.core.domain.onboarding.repository.OnboardingRepository
import com.goalpanzi.mission_mate.core.mission.mapper.toModel
import com.goalpanzi.mission_mate.core.network.model.request.JoinMissionRequest
import com.goalpanzi.mission_mate.core.network.service.OnboardingService
import javax.inject.Inject
Expand Down
1 change: 1 addition & 0 deletions core/domain/history/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
28 changes: 28 additions & 0 deletions core/domain/history/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
plugins {
id("java-library")
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.ksp)
}

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}

kotlin {
jvmToolchain(17)
}

dependencies {
implementation(libs.bundles.test)
implementation(libs.coroutines.core)
implementation(libs.hilt.core)
ksp(libs.hilt.compiler)

implementation(project(":core:domain:common"))
implementation(project(":core:domain:mission"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.goalpanzi.mission_mate.core.domain.history.model

data class MissionHistories(
val hasNext: Boolean,
val resultList: List<MissionHistory>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.goalpanzi.mission_mate.core.domain.history.model

import com.goalpanzi.mission_mate.core.domain.mission.model.MissionBoardMember

data class MissionHistory(
val missionId: Long,
val description: String,
val missionStartDate: String,
val missionEndDate: String,
val myVerificationCount: Int,
val totalVerificationCount: Int,
val rank: Int,
val randomImageUrlList: List<String>,
val memberCount: Int,
val missionMembers: List<MissionBoardMember>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.goalpanzi.mission_mate.core.domain.history.repository

import com.goalpanzi.mission_mate.core.domain.common.DomainResult
import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistories

interface HistoryRepository {
suspend fun getMissionHistories(page: Int) : DomainResult<MissionHistories>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.goalpanzi.mission_mate.core.domain.history.usecase

import com.goalpanzi.mission_mate.core.domain.common.DomainResult
import com.goalpanzi.mission_mate.core.domain.history.model.MissionHistories
import com.goalpanzi.mission_mate.core.domain.history.repository.HistoryRepository
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import javax.inject.Inject

class GetMissionHistoriesUseCase @Inject constructor(
private val historyRepository: HistoryRepository
) {
operator fun invoke(page: Int) : Flow<DomainResult<MissionHistories>> = flow {
emit(historyRepository.getMissionHistories(page))
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ data class MissionBoard(
val number : Int,
val reward : BoardReward = BoardReward.NONE,
val isMyPosition : Boolean = false,
val missionBoardMembers : List<MissionBoardMembers>
val missionBoardMembers : List<MissionBoardMember>
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package com.goalpanzi.mission_mate.core.domain.mission.model

import com.goalpanzi.mission_mate.core.domain.common.model.user.CharacterType

data class MissionBoardMembers(
data class MissionBoardMember(
val memberId : Long,
val nickname : String,
val characterType : CharacterType = CharacterType.RABBIT
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.goalpanzi.mission_mate.core.network.di

import com.goalpanzi.mission_mate.core.network.service.HistoryService
import com.goalpanzi.mission_mate.core.network.service.LoginService
import com.goalpanzi.mission_mate.core.network.service.MissionService
import com.goalpanzi.mission_mate.core.network.service.OnboardingService
Expand Down Expand Up @@ -55,4 +56,12 @@ object ServiceModule {
) : TokenService {
return retrofit.create(TokenService::class.java)
}

@Provides
@Singleton
fun provideHistoryService(
@TokenRetrofit retrofit: Retrofit
) : HistoryService {
return retrofit.create(HistoryService::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package com.goalpanzi.mission_mate.core.network.model.response
import kotlinx.serialization.Serializable

@Serializable
data class MissionBoardMembersResponse(
data class MissionBoardMemberResponse(
val memberId : Long,
val nickname : String,
val characterType : CharacterTypeResponse = CharacterTypeResponse.RABBIT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ data class MissionBoardResponse(
val number : Int,
val reward : BoardRewardResponse = BoardRewardResponse.NONE,
val isMyPosition : Boolean = false,
val missionBoardMembers : List<MissionBoardMembersResponse>
val missionBoardMembers : List<MissionBoardMemberResponse>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.goalpanzi.mission_mate.core.network.model.response

import kotlinx.serialization.Serializable

@Serializable
data class MissionHistoriesResponse(
val hasNext: Boolean,
val resultList: List<MissionHistoryResponse>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.goalpanzi.mission_mate.core.network.model.response

import kotlinx.serialization.Serializable

@Serializable
data class MissionHistoryResponse(
val missionId: Long,
val description: String,
val missionStartDate: String,
val missionEndDate: String,
val myVerificationCount: Int,
val totalVerificationCount: Int,
val rank: Int,
val randomImageUrlList: List<String>,
val memberCount: Int,
val missionMembers: List<MissionBoardMemberResponse>,
)
Loading