Skip to content

Commit 280e237

Browse files
committed
Merge branch 'develop' into feature/97-main-page-list-click-event-handing
2 parents 43a7b2c + 4204f86 commit 280e237

File tree

73 files changed

+1233
-383
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1233
-383
lines changed

app/src/main/java/com/stackknowledge/navigation/StackKnowledgeNavHost.kt

+3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import com.stackknowledge.score_mission.navigation.gradingAnswerScreen
2020
import com.stackknowledge.score_mission.navigation.navigateToGradingAnswer
2121
import com.stackknowledge.score_mission.navigation.navigateToSolvedMission
2222
import com.stackknowledge.score_mission.navigation.solvedMissionScreen
23+
import com.stackknowledge.shop.navigation.shopRoute
2324
import com.stackknowledge.shop.navigation.shopScreen
25+
import com.stackknowledge.shop.navigation.teacherShopRoute
2426
import com.stackknowledge.shop.navigation.teacherShopScreen
2527
import com.stackknowledge.ui.StackKnowledgeAppState
2628
import com.stackkowledge.mission.navigation.createMissionRoute
@@ -83,6 +85,7 @@ fun StackKnowledgeNavHost(
8385
)
8486
gradingAnswerScreen(
8587
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
88+
scoreMissionSuccess = navController::navigateToMain,
8689
)
8790
solvedMissionScreen(
8891
onNavigate = { role, navType -> bottomNavigationNavigate(role, navController, navType) },
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package com.stackknowledge.repository.item
22

3+
import com.stackknowledge.dto.response.item.GetItemResponse
34
import kotlinx.coroutines.flow.Flow
45
import remote.response.item.GetItemResponseModel
56

67
interface ItemRepository {
7-
fun getItem(): Flow<GetItemResponseModel>
8+
fun getItem(): Flow<List<GetItemResponseModel>>
89
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package com.stackknowledge.repository.item
22

33
import com.stackknowledge.datasource.item.ItemDataSource
4+
import com.stackknowledge.mapper.response.item.toModel
45
import kotlinx.coroutines.flow.Flow
6+
import kotlinx.coroutines.flow.map
57
import remote.response.item.GetItemResponseModel
68
import javax.inject.Inject
79

810
class ItemRepositoryImpl @Inject constructor(
911
private val itemDataSource: ItemDataSource
1012
): ItemRepository {
11-
override fun getItem(): Flow<GetItemResponseModel> {
12-
return itemDataSource.getItem()
13+
override fun getItem(): Flow<List<GetItemResponseModel>> {
14+
return itemDataSource.getItem().map { list -> list.map { it.toModel() } }
1315
}
1416
}

core/data/src/main/kotlin/com/stackknowledge/repository/order/OrderRepository.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import remote.request.order.OrderRequestModel
66
import remote.response.order.ViewAllOrderResponseModel
77

88
interface OrderRepository {
9-
fun order(body: OrderRequestModel): Flow<Unit>
9+
fun order(body: List<OrderRequestModel>): Flow<Unit>
1010

11-
fun viewAllOrder(): Flow<ViewAllOrderResponseModel>
11+
fun viewAllOrder(): Flow<List<ViewAllOrderResponseModel>>
1212

13-
fun changeOrderStatus(body: ChangeOrderStatusRequestModel): Flow<Unit>
13+
fun changeOrderStatus(body: List<ChangeOrderStatusRequestModel>): Flow<Unit>
1414
}

core/data/src/main/kotlin/com/stackknowledge/repository/order/OrderRepositoryImpl.kt

+9-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.stackknowledge.repository.order
22

33
import com.stackknowledge.datasource.order.OrderDataSource
44
import com.stackknowledge.mapper.request.order.toDto
5+
import com.stackknowledge.mapper.response.item.toModel
56
import com.stackknowledge.mapper.response.order.toModel
67
import kotlinx.coroutines.flow.Flow
78
import kotlinx.coroutines.flow.map
@@ -11,17 +12,17 @@ import remote.response.order.ViewAllOrderResponseModel
1112
import javax.inject.Inject
1213

1314
class OrderRepositoryImpl @Inject constructor(
14-
private val orderDataSource: OrderDataSource
15-
): OrderRepository {
16-
override fun order(body: OrderRequestModel): Flow<Unit> {
17-
return orderDataSource.order(body = body.toDto())
15+
private val orderDataSource: OrderDataSource,
16+
) : OrderRepository {
17+
override fun order(body: List<OrderRequestModel>): Flow<Unit> {
18+
return orderDataSource.order(body = body.map { it.toDto() })
1819
}
1920

20-
override fun viewAllOrder(): Flow<ViewAllOrderResponseModel> {
21-
return orderDataSource.viewAllOrder().map { it.toModel() }
21+
override fun viewAllOrder(): Flow<List<ViewAllOrderResponseModel>> {
22+
return orderDataSource.viewAllOrder().map { list -> list.map { it.toModel() } }
2223
}
2324

24-
override fun changeOrderStatus(body: ChangeOrderStatusRequestModel): Flow<Unit> {
25-
return orderDataSource.changeOrderStatus(body = body.toDto())
25+
override fun changeOrderStatus(body: List<ChangeOrderStatusRequestModel>): Flow<Unit> {
26+
return orderDataSource.changeOrderStatus(body = body.map { it.toDto() })
2627
}
2728
}

core/design-system/src/main/java/com/stackknowledge/design_system/component/bottomsheet/BottomSheetItem.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.stackknowledge.design_system.theme.StackKnowledgeAndroidTheme
2424

2525
@Composable
2626
fun BottomSheetItem(
27-
modifier: Modifier = Modifier
27+
modifier: Modifier = Modifier,
2828
) {
2929
StackKnowledgeAndroidTheme { colors, typography ->
3030
Row(

core/design-system/src/main/java/com/stackknowledge/design_system/component/button/StackKnowledgeButton.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fun StackKnowledgeButton(
2121
) {
2222
StackKnowledgeAndroidTheme { colors, typography ->
2323
Button(
24-
onClick = onClick,
24+
onClick = { onClick() },
2525
modifier = modifier
2626
.fillMaxWidth()
2727
.clip(shape = RoundedCornerShape(10.dp))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package com.stackknowledge.design_system.component.dialog
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.Spacer
7+
import androidx.compose.foundation.layout.height
8+
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.layout.width
10+
import androidx.compose.foundation.layout.wrapContentHeight
11+
import androidx.compose.foundation.layout.wrapContentWidth
12+
import androidx.compose.foundation.shape.RoundedCornerShape
13+
import androidx.compose.material3.Text
14+
import androidx.compose.runtime.Composable
15+
import androidx.compose.runtime.LaunchedEffect
16+
import androidx.compose.runtime.getValue
17+
import androidx.compose.runtime.mutableStateOf
18+
import androidx.compose.runtime.remember
19+
import androidx.compose.runtime.setValue
20+
import androidx.compose.ui.Alignment
21+
import androidx.compose.ui.Modifier
22+
import androidx.compose.ui.text.style.TextAlign
23+
import androidx.compose.ui.unit.dp
24+
import androidx.compose.ui.window.Dialog
25+
import com.stackknowledge.design_system.theme.StackKnowledgeAndroidTheme
26+
import kotlinx.coroutines.delay
27+
28+
@Composable
29+
fun EmptyButtonDialog(
30+
modifier: Modifier = Modifier,
31+
content: String,
32+
openDialog: Boolean,
33+
onDismiss: () -> Unit,
34+
onStateChange: (Boolean) -> Unit,
35+
) {
36+
var openDialog by remember { mutableStateOf(openDialog) }
37+
38+
LaunchedEffect(openDialog) {
39+
delay(2000L)
40+
onDismiss()
41+
}
42+
43+
if (openDialog) {
44+
StackKnowledgeAndroidTheme { colors, typography ->
45+
Dialog(onDismissRequest = { openDialog = false }) {
46+
Column(
47+
modifier = modifier
48+
.width(280.dp)
49+
.height(150.dp)
50+
.background(
51+
color = colors.WHITE,
52+
shape = RoundedCornerShape(20.dp)
53+
)
54+
.padding(vertical = 16.dp),
55+
horizontalAlignment = Alignment.CenterHorizontally,
56+
verticalArrangement = Arrangement.Center,
57+
) {
58+
Spacer(modifier = modifier.height(4.dp))
59+
Text(
60+
text = content,
61+
style = typography.bodyMedium,
62+
color = colors.BLACK,
63+
modifier = modifier
64+
.wrapContentWidth()
65+
.wrapContentHeight(),
66+
textAlign = TextAlign.Center
67+
)
68+
}
69+
}
70+
}
71+
} else {
72+
onStateChange(openDialog)
73+
}
74+
}

core/design-system/src/main/java/com/stackknowledge/design_system/component/dialog/StackKnowledgeDialog.kt

+6-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.material3.ButtonDefaults
1818
import androidx.compose.material3.OutlinedButton
1919
import androidx.compose.material3.Text
2020
import androidx.compose.runtime.Composable
21+
import androidx.compose.runtime.LaunchedEffect
2122
import androidx.compose.runtime.getValue
2223
import androidx.compose.runtime.mutableStateOf
2324
import androidx.compose.runtime.remember
@@ -31,6 +32,7 @@ import androidx.compose.ui.unit.dp
3132
import androidx.compose.ui.window.Dialog
3233
import com.stackknowledge.design_system.R
3334
import com.stackknowledge.design_system.theme.StackKnowledgeAndroidTheme
35+
import kotlinx.coroutines.delay
3436

3537
@Composable
3638
fun StackKnowledgeDialog(
@@ -41,11 +43,9 @@ fun StackKnowledgeDialog(
4143
openDialog: Boolean,
4244
onStateChange: (Boolean) -> Unit,
4345
) {
44-
var openDialog by remember { mutableStateOf(openDialog) }
45-
4646
if (openDialog) {
4747
StackKnowledgeAndroidTheme { colors, typography ->
48-
Dialog(onDismissRequest = { openDialog = false } ) {
48+
Dialog(onDismissRequest = { onStateChange(false) } ) {
4949
Column(
5050
modifier = modifier
5151
.width(280.dp)
@@ -56,7 +56,7 @@ fun StackKnowledgeDialog(
5656
)
5757
.padding(vertical = 16.dp),
5858
horizontalAlignment = Alignment.CenterHorizontally,
59-
verticalArrangement = Arrangement.SpaceBetween
59+
verticalArrangement = Arrangement.SpaceBetween,
6060
) {
6161
Spacer(modifier = modifier.height(4.dp))
6262
Text(
@@ -68,6 +68,7 @@ fun StackKnowledgeDialog(
6868
.wrapContentHeight(),
6969
textAlign = TextAlign.Center
7070
)
71+
7172
Row() {
7273
Button(
7374
modifier = modifier
@@ -107,8 +108,6 @@ fun StackKnowledgeDialog(
107108
}
108109
}
109110
}
110-
} else {
111-
onStateChange(openDialog)
112111
}
113112
}
114113

@@ -120,6 +119,6 @@ fun StackKnowledgeDialogPre() {
120119
onConfirm = {},
121120
onDismiss = {},
122121
openDialog = false,
123-
onStateChange = {}
122+
onStateChange = {},
124123
)
125124
}

core/design-system/src/main/res/values/strings.xml

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
<string name="student">학생</string>
3535
<string name="teacher">선생님</string>
3636
<string name="select_role_text">사용자가 학생인지\n 선생님인지 선택해주세요.</string>
37+
<string name="order_dialog_text">해당 상품을 구매하시겠습니까?</string>
3738
<string name="select_create_mission">문제를 제출하시겠습니까?</string>
3839
<string name="cancel_select_create_mission">문제 제출을 취소하시겠습니까?\n 취소시 작성한 문제 내용들이 삭제됩니다.</string>
3940
<string name="success_create_mission">문제 출제가 완료되었습니다!</string>
@@ -43,4 +44,5 @@
4344
<string name="success_solve_mission">문제 제출이 완료되었습니다!</string>
4445
<string name="finish_score_mission">문제 채점이 끝나셨습니까?</string>
4546
<string name="success_score_mission">문제 채점이 완료되었습니다!</string>
47+
<string name="discount_ordered_item">상품을 차감하시겠습니까?</string>
4648
</resources>

core/domain/src/main/kotlin/com/stackknowledge/usecase/item/GetItemUseCase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ import javax.inject.Inject
88
class GetItemUseCase @Inject constructor(
99
private val itemRepository: ItemRepository
1010
) {
11-
operator fun invoke(): Flow<GetItemResponseModel> =
11+
operator fun invoke(): Flow<List<GetItemResponseModel>> =
1212
itemRepository.getItem()
1313
}

core/domain/src/main/kotlin/com/stackknowledge/usecase/mission/CreateMissionUseCase.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import javax.inject.Inject
77
class CreateMissionUseCase @Inject constructor(
88
private val missionRepository: MissionRepository
99
) {
10-
operator fun invoke(body: CreateMissionRequestModel) =
10+
operator fun invoke(body: CreateMissionRequestModel) = kotlin.runCatching {
1111
missionRepository.createMission(body = body)
12+
}
1213
}

core/domain/src/main/kotlin/com/stackknowledge/usecase/order/ChangeOrderStatusUseCase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import javax.inject.Inject
77
class ChangeOrderStatusUseCase @Inject constructor(
88
private val orderRepository: OrderRepository
99
) {
10-
operator fun invoke(body: ChangeOrderStatusRequestModel) = runCatching {
10+
operator fun invoke(body: List<ChangeOrderStatusRequestModel>) = kotlin.runCatching {
1111
orderRepository.changeOrderStatus(body = body)
1212
}
1313
}

core/domain/src/main/kotlin/com/stackknowledge/usecase/order/OrderUseCase.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import javax.inject.Inject
77
class OrderUseCase @Inject constructor(
88
private val orderRepository: OrderRepository
99
) {
10-
operator fun invoke(body: OrderRequestModel) = runCatching {
10+
operator fun invoke(body: List<OrderRequestModel>) = kotlin.runCatching {
1111
orderRepository.order(body = body)
1212
}
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package com.stackknowledge.usecase.order
22

33
import com.stackknowledge.repository.order.OrderRepository
4+
import kotlinx.coroutines.flow.Flow
5+
import remote.response.order.ViewAllOrderResponseModel
46
import javax.inject.Inject
57

68
class ViewAllOrderUseCase @Inject constructor(
79
private val orderRepository: OrderRepository
810
) {
9-
operator fun invoke() = runCatching {
11+
operator fun invoke(): Flow<List<ViewAllOrderResponseModel>> =
1012
orderRepository.viewAllOrder()
11-
}
1213
}

core/domain/src/main/kotlin/com/stackknowledge/usecase/solve/SolveUseCase.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import javax.inject.Inject
88
class SolveUseCase @Inject constructor(
99
private val solveRepository: SolveRepository
1010
) {
11-
operator fun invoke(missionId: String, solution: SolveRequestModel) =
11+
operator fun invoke(missionId: String, solution: SolveRequestModel) = kotlin.runCatching {
1212
solveRepository.solveMission(missionId = missionId, solution = solution)
13+
}
1314
}

core/domain/src/main/kotlin/com/stackknowledge/usecase/user/ScoreMissionUseCase.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import javax.inject.Inject
88
class ScoreMissionUseCase @Inject constructor(
99
private val userRepository: UserRepository
1010
) {
11-
operator fun invoke(solveId: String, body: ScoreRequestModel) =
11+
operator fun invoke(solveId: String, body: ScoreRequestModel) = kotlin.runCatching {
1212
userRepository.scoreSolveMission(solveId = solveId, body = body)
13+
}
1314
}

core/model/src/main/kotlin/remote/item/ItemModel.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package remote.item
33
import java.util.UUID
44

55
data class ItemModel(
6-
val id: UUID,
6+
val itemId: String,
77
val name: String,
88
val price: Int,
99
val image: String,
10-
)
10+
)

core/model/src/main/kotlin/remote/request/order/ChangeOrderStatusRequestModel.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ package remote.request.order
33
import java.util.UUID
44

55
data class ChangeOrderStatusRequestModel(
6-
val orderId: UUID,
6+
val orderId: String,
77
val count: Int,
88
)
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package remote.request.order
22

3-
data class OrderRequestModel(
4-
val orders: OrdersModel,
3+
4+
data class OrderRequestModel (
5+
val itemId: String,
6+
val count: Int,
57
)
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package remote.response.item
22

3-
import remote.item.ItemModel
3+
import java.util.UUID
44

55
data class GetItemResponseModel(
6-
val items: ItemModel
6+
val id: String,
7+
val name: String,
8+
val price: Int,
9+
val image: String,
710
)

0 commit comments

Comments
 (0)