Skip to content

Commit 62f0976

Browse files
authored
Merge pull request #151 from YAPP-Github/feature/#146-report_history
[Feature/#146] 내 제보 기록 화면 구현
2 parents c3ae2f4 + 18d6f61 commit 62f0976

File tree

30 files changed

+1063
-0
lines changed

30 files changed

+1063
-0
lines changed

app/src/main/java/com/threegap/bitnagil/MainNavHost.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import com.threegap.bitnagil.presentation.onboarding.OnBoardingScreenContainer
1414
import com.threegap.bitnagil.presentation.onboarding.OnBoardingViewModel
1515
import com.threegap.bitnagil.presentation.onboarding.model.navarg.OnBoardingScreenArg
1616
import com.threegap.bitnagil.presentation.report.ReportScreenContainer
17+
import com.threegap.bitnagil.presentation.reporthistory.ReportHistoryScreenContainer
1718
import com.threegap.bitnagil.presentation.routinelist.RoutineListScreenContainer
1819
import com.threegap.bitnagil.presentation.setting.SettingScreenContainer
1920
import com.threegap.bitnagil.presentation.splash.SplashScreenContainer
@@ -140,6 +141,11 @@ fun MainNavHost(
140141
launchSingleTop = true
141142
}
142143
},
144+
navigateToReportHistory = {
145+
navigator.navController.navigate(Route.ReportHistory) {
146+
launchSingleTop = true
147+
}
148+
},
143149
)
144150
}
145151

@@ -305,5 +311,17 @@ fun MainNavHost(
305311
},
306312
)
307313
}
314+
315+
composable<Route.ReportHistory> {
316+
ReportHistoryScreenContainer(
317+
navigateToBack = {
318+
if (navigator.navController.previousBackStackEntry != null) {
319+
navigator.navController.popBackStack()
320+
}
321+
},
322+
navigateToReportDetail = {
323+
},
324+
)
325+
}
308326
}
309327
}

app/src/main/java/com/threegap/bitnagil/Route.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ sealed interface Route {
5151

5252
@Serializable
5353
data object Report : Route
54+
55+
@Serializable
56+
data object ReportHistory : Route
5457
}

app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ fun HomeNavHost(
4444
navigateToEmotion: () -> Unit,
4545
navigateToRoutineList: (String) -> Unit,
4646
navigateToReport: () -> Unit,
47+
navigateToReportHistory: () -> Unit,
4748
) {
4849
val navigator = rememberHomeNavigator()
4950
var showFloatingOverlay by remember { mutableStateOf(false) }
@@ -89,6 +90,7 @@ fun HomeNavHost(
8990
navigateToOnBoarding = navigateToOnBoarding,
9091
navigateToNotice = navigateToNotice,
9192
navigateToQnA = navigateToQnA,
93+
navigateToReportHistory = navigateToReportHistory,
9294
)
9395
}
9496
}

core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ data class BitnagilColors(
1212
val error: Color = Error,
1313
val error10: Color = Error10,
1414
val skyBlue10: Color = SkyBlue10,
15+
val blue300: Color = Blue300,
1516
val purple10: Color = Purple10,
1617
val green10: Color = Green10,
18+
val green300: Color = Green300,
1719
val pink10: Color = Pink10,
1820
val yellow10: Color = Yellow10,
1921
val progressBarGradientStartColor: Color = ProgressBarGradientStartColor,

core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ val Kakao = Color(0xFFFEE500)
88
val Error = Color(0xFFFF6868)
99
val Error10 = Color(0xFFFF5858)
1010
val SkyBlue10 = Color(0xFFDBF1FF)
11+
val Blue300 = Color(0xFF0093F5)
1112
val Purple10 = Color(0xFFE6E2FF)
1213
val Green10 = Color(0xFFE6F5C6)
14+
val Green300 = Color(0xFF3FAF00)
1315
val Pink10 = Color(0xFFFEE3E9)
1416
val Yellow10 = Color(0xFFFFF5C7)
1517
val ProgressBarGradientStartColor = Color(0xFFA9CFFF)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.threegap.bitnagil.designsystem.component.atom
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Box
6+
import androidx.compose.foundation.layout.Column
7+
import androidx.compose.foundation.layout.height
8+
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.shape.RoundedCornerShape
10+
import androidx.compose.material3.Text
11+
import androidx.compose.runtime.Composable
12+
import androidx.compose.ui.Alignment
13+
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.tooling.preview.Preview
15+
import androidx.compose.ui.unit.dp
16+
import com.threegap.bitnagil.designsystem.BitnagilTheme
17+
import com.threegap.bitnagil.designsystem.modifier.clickableWithoutRipple
18+
19+
@Composable
20+
fun BitnagilChip(
21+
title: String,
22+
isSelected: Boolean,
23+
onCategorySelected: () -> Unit,
24+
modifier: Modifier = Modifier,
25+
) {
26+
Box(
27+
contentAlignment = Alignment.Center,
28+
modifier = modifier
29+
.background(
30+
color = if (!isSelected) BitnagilTheme.colors.white else BitnagilTheme.colors.coolGray10,
31+
shape = RoundedCornerShape(20.dp),
32+
)
33+
.height(36.dp)
34+
.clickableWithoutRipple(onClick = onCategorySelected)
35+
.padding(
36+
vertical = 6.dp,
37+
horizontal = 14.dp,
38+
),
39+
) {
40+
Text(
41+
text = title,
42+
color = if (!isSelected) BitnagilTheme.colors.coolGray60 else BitnagilTheme.colors.white,
43+
style = if (!isSelected) BitnagilTheme.typography.caption1Medium else BitnagilTheme.typography.caption1SemiBold,
44+
)
45+
}
46+
}
47+
48+
@Preview
49+
@Composable
50+
private fun RecommendCategoryChipStatesPreview() {
51+
Column(
52+
verticalArrangement = Arrangement.spacedBy(8.dp),
53+
) {
54+
BitnagilChip(
55+
title = "맞춤 추천",
56+
isSelected = true,
57+
onCategorySelected = {},
58+
)
59+
}
60+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.threegap.bitnagil.data.report.datasource
22

33
import com.threegap.bitnagil.data.report.model.request.ReportRequestDto
4+
import com.threegap.bitnagil.data.report.model.response.ReportHistoriesPerDateDto
45

56
interface ReportDataSource {
67
suspend fun submitReport(reportRequestDto: ReportRequestDto): Result<Long>
8+
suspend fun getReports(): Result<ReportHistoriesPerDateDto>
79
}

data/src/main/java/com/threegap/bitnagil/data/report/datasourceImpl/ReportDataSourceImpl.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.threegap.bitnagil.data.report.datasourceImpl
33
import com.threegap.bitnagil.data.common.safeApiCall
44
import com.threegap.bitnagil.data.report.datasource.ReportDataSource
55
import com.threegap.bitnagil.data.report.model.request.ReportRequestDto
6+
import com.threegap.bitnagil.data.report.model.response.ReportHistoriesPerDateDto
67
import com.threegap.bitnagil.data.report.service.ReportService
78
import javax.inject.Inject
89

@@ -12,4 +13,8 @@ class ReportDataSourceImpl @Inject constructor(
1213
override suspend fun submitReport(reportRequestDto: ReportRequestDto): Result<Long> {
1314
return safeApiCall { reportService.submitReport(reportRequestDto) }
1415
}
16+
17+
override suspend fun getReports(): Result<ReportHistoriesPerDateDto> {
18+
return safeApiCall { reportService.getReports() }
19+
}
1520
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.threegap.bitnagil.data.report.model.response
2+
3+
import com.threegap.bitnagil.domain.report.model.ReportItem
4+
import kotlinx.serialization.SerialName
5+
import kotlinx.serialization.Serializable
6+
import java.time.LocalDate
7+
8+
@Serializable
9+
data class ReportHistoriesPerDateDto(
10+
@SerialName("reportInfos")
11+
val reportInfos: Map<String, List<ReportItemDto>>,
12+
)
13+
14+
fun ReportHistoriesPerDateDto.toDomainMap(): Map<LocalDate, List<ReportItem>> =
15+
this.reportInfos
16+
.mapKeys { LocalDate.parse(it.key) }
17+
.mapValues { entry ->
18+
entry.value.map { it.toDomain() }
19+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.threegap.bitnagil.data.report.model.response
2+
3+
import com.threegap.bitnagil.domain.report.model.ReportCategory
4+
import com.threegap.bitnagil.domain.report.model.ReportItem
5+
import com.threegap.bitnagil.domain.report.model.ReportStatus
6+
import kotlinx.serialization.SerialName
7+
import kotlinx.serialization.Serializable
8+
9+
@Serializable
10+
data class ReportItemDto(
11+
@SerialName("reportId")
12+
val reportId: Int,
13+
@SerialName("reportStatus")
14+
val reportStatus: String,
15+
@SerialName("reportTitle")
16+
val reportTitle: String,
17+
@SerialName("reportCategory")
18+
val reportCategory: String,
19+
@SerialName("reportLocation")
20+
val reportLocation: String,
21+
@SerialName("reportImageUrl")
22+
val reportImageUrl: String,
23+
)
24+
25+
fun ReportItemDto.toDomain(): ReportItem =
26+
ReportItem(
27+
id = this.reportId,
28+
status = ReportStatus.fromString(this.reportStatus),
29+
title = this.reportTitle,
30+
category = ReportCategory.fromString(this.reportCategory),
31+
address = this.reportLocation,
32+
imageUrl = this.reportImageUrl,
33+
)

0 commit comments

Comments
 (0)