Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
aa33ab4
feat :: AI chatbot ν™”λ©΄ κΈ°λ³Έ ꡬ쑰 μΆ”κ°€
ashxom Jul 2, 2026
13f2071
feat :: AI 메인 문ꡬ μΆ”κ°€
ashxom Jul 2, 2026
22263bc
feat :: AI μΆ”μ²œ 질문 λ²„νŠΌ μΆ”κ°€
ashxom Jul 2, 2026
0e60718
feat :: AI 질문 μž…λ ₯μ°½ μΆ”κ°€
ashxom Jul 2, 2026
f8c55fc
feat :: 챗봇 ν™”λ©΄ ν•˜λ‹¨ λ„€λΉ„κ²Œμ΄μ…˜ μΆ”κ°€
ashxom Jul 2, 2026
592efbb
refactor :: 챗봇 μž…λ ₯μ°½ μ»΄ν¬λ„ŒνŠΈ 뢄리
ashxom Jul 2, 2026
284ab9a
refactor :: 챗봇 μΆ”μ²œ 질문 μΉ© μ»΄ν¬λ„ŒνŠΈ 뢄리
ashxom Jul 2, 2026
3dd0cdf
feat :: 챗봇 ν™”λ©΄ μƒνƒœ μΆ”κ°€
ashxom Jul 2, 2026
db88854
feat :: 챗봇 λ·°λͺ¨λΈ μΆ”κ°€
ashxom Jul 2, 2026
cff9cff
feat :: 챗봇 ν•˜λ‹¨ λ„€λΉ„κ²Œμ΄μ…˜ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€
ashxom Jul 2, 2026
30790f3
refactor :: 챗봇 ν™”λ©΄ μ»΄ν¬λ„ŒνŠΈ 적용
ashxom Jul 2, 2026
86a0d14
fix :: 챗봇 μž…λ ₯μ°½ νŒ¨λ”© 였λ₯˜ μˆ˜μ •
ashxom Jul 2, 2026
f9cc421
style :: 챗봇 ν™”λ©΄ 프리뷰 λ ˆμ΄μ•„μ›ƒ μ‘°μ •
ashxom Jul 2, 2026
b436f6a
style :: 챗봇 ν™ˆ ν™”λ©΄ λ ˆμ΄μ•„μ›ƒ μ‘°μ •
ashxom Jul 2, 2026
7b2879e
style :: 챗봇 μž…λ ₯μ°½ 크기 μ‘°μ •
ashxom Jul 2, 2026
b3b7358
style :: 챗봇 μΆ”μ²œ 질문 μΉ© 크기 μ‘°μ •
ashxom Jul 2, 2026
e68ca47
refactor :: 챗봇 ν™”λ©΄ κ°œλ³„ ν•˜λ‹¨λ°” 제거
ashxom Jul 2, 2026
0521153
style :: 챗봇 μΆ”μ²œ 질문 ν…μŠ€νŠΈ λ‘κ»˜μ™€ μŠ€νƒ€μΌ μ‘°μ •
ashxom Jul 2, 2026
f10cd9e
style :: 질문 μΉ© λ””μžμΈ μˆ˜μ •
ashxom Jul 2, 2026
9dcbe1a
style :: 챗봇 μž…λ ₯μ°½ ν…μŠ€νŠΈμ™€ λ²„νŠΌ 크기 μ‘°μ •
ashxom Jul 2, 2026
0f0eb48
style :: 챗봇 ν™”λ©΄ ν”„λ‘œν•„ μ•„μ΄μ½˜ 제거
ashxom Jul 2, 2026
d0be284
feat :: chatbot μ•„μ΄μ½˜ μΆ”κ°€
ashxom Jul 2, 2026
8433a70
feat :: μ„ νƒλœ 챗봇 μ•„μ΄μ½˜ μΆ”κ°€
ashxom Jul 3, 2026
d9cfbc9
feat :: 챗봇 μ•„μ΄μ½˜ λ¦¬μ†ŒμŠ€ 등둝
ashxom Jul 3, 2026
0bd8437
feat :: 챗봇 ν•˜λ‹¨λ°” 메뉴 μΆ”κ°€
ashxom Jul 3, 2026
116161e
feat :: ν•˜λ‹¨λ°”μ— 챗봇 메뉴 λ…ΈμΆœ
ashxom Jul 3, 2026
fe7f02e
feat :: 챗봇 ν™”λ©΄ λ„€λΉ„κ²Œμ΄μ…˜ ν‚€ μΆ”κ°€
ashxom Jul 3, 2026
b9bd842
feat :: 챗봇 ν™”λ©΄ 라우트 μ—°κ²°
ashxom Jul 3, 2026
1d083b6
feat :: 챗봇 ν™”λ©΄ μƒνƒœ λͺ¨λΈ μΆ”κ°€
ashxom Jul 3, 2026
36330e1
feat :: 챗봇 μž…λ ₯쀑 ν‘œμ‹œ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€
ashxom Jul 3, 2026
52af8a1
feat :: 챗봇 λ©”μ‹œμ§€ 말풍선 μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€
ashxom Jul 3, 2026
3ad340f
feat :: 챗봇 질문 λ„€νŠΈμ›Œν¬ λͺ¨λΈ μΆ”κ°€
ashxom Jul 3, 2026
57b69dd
feat :: 챗봇 API μ„œλΉ„μŠ€ μΆ”κ°€
ashxom Jul 3, 2026
5d0f237
feat :: 챗봇 Repository μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€
ashxom Jul 3, 2026
bb5937f
feat :: 챗봇 λ„€νŠΈμ›Œν¬ λ°μ΄ν„°μ†ŒμŠ€ μΆ”κ°€
ashxom Jul 3, 2026
6b35cf2
feat :: 챗봇 λ„€νŠΈμ›Œν¬ λͺ¨λ“ˆ μΆ”κ°€
ashxom Jul 3, 2026
3c4377c
feat :: Repository κ΅¬ν˜„μ²΄ μΆ”κ°€
ashxom Jul 3, 2026
f16eeef
feat :: Repository μ˜μ‘΄μ„± μΆ”κ°€
ashxom Jul 3, 2026
c5af8fc
feat :: 질문 전솑 둜직 μΆ”κ°€
ashxom Jul 3, 2026
0f4c057
feat :: 챗봇 ν™”λ©΄ λ©”μ‹œμ§€ μƒνƒœ μ—°κ²°
ashxom Jul 3, 2026
d0031d6
feat :: μΆ”μ²œ 질문 클릭 이벀트 μΆ”κ°€
ashxom Jul 3, 2026
e018d6c
feat :: μž…λ ₯μ°½ μž…λ ₯ 이벀트 μ—°κ²°
ashxom Jul 3, 2026
99ce764
fix :: Route ViewModel λ…ΈμΆœ 였λ₯˜ μˆ˜μ •
ashxom Jul 3, 2026
19a502e
fix :: λ©”μ‹œμ§€ 말풍선 μ •λ ¬ μˆ˜μ •
ashxom Jul 3, 2026
96b8c09
feat :: μž…λ ₯μ°½ ν‚€λ³΄λ“œ 전솑 처리
ashxom Jul 3, 2026
7d5bf52
fix :: 챗봇 질문 쀑볡 전솑 λ°©μ§€
ashxom Jul 3, 2026
6415307
feat :: λ©”μ‹œμ§€ λͺ©λ‘ 슀크둀 처리
ashxom Jul 3, 2026
921819d
feat :: 질문 전솑 μ‹œ ν‚€λ³΄λ“œ μˆ¨κΉ€ 처리
ashxom Jul 3, 2026
15e96fa
fix :: 챗봇 API μ„œλΉ„μŠ€ Retrofit μ£Όμž… μˆ˜μ •
ashxom Jul 3, 2026
b9f7cfd
fix :: ν•˜λ‹¨λ°” νƒ­ 이동 μ‹œ λŒ€μƒ ν™”λ©΄ μΆ”κ°€
ashxom Jul 3, 2026
bc949a5
fix :: 챗봇 μž…λ ₯μ°½ ν‚€λ³΄λ“œ λŒ€μ‘ 였λ₯˜ μˆ˜μ •
ashxom Jul 5, 2026
4a3bb07
fix :: 챗봇 μ•ˆλ‚΄ 문ꡬ 쀑앙 μ •λ ¬
ashxom Jul 5, 2026
bee28e9
fix :: 챗봇 μž…λ ₯μ°½ ν‚€λ³΄λ“œ μœ„μΉ˜ 처리 정리
ashxom Jul 5, 2026
a47dc31
feat :: μž…λ ₯μ°½ μƒμœ„λ‘œ μ „λ‹¬ν•˜λŠ” 콜백 μΆ”κ°€
ashxom Jul 5, 2026
c6e9e7f
fix :: μž…λ ₯μ°½ 포컀슀 μ‹œ λ„€λΉ„κ²Œμ΄μ…˜ λ°” μˆ¨κΉ€ 처리
ashxom Jul 5, 2026
ce70603
style :: μž…λ ₯μ°½ ν‚€λ³΄λ“œ 간격 μ‘°μ •
ashxom Jul 5, 2026
ac22845
fix :: 챗봇 API에 인증 Retrofit 적용
ashxom Jul 5, 2026
48d4069
fix :: 챗봇 λ©”μ‹œμ§€ 슀크둀 ν•˜λ‹¨ μ—¬λ°± μ‘°μ •
ashxom Jul 5, 2026
51b1208
fix :: API에 인증 Retrofit 적용
ashxom Jul 5, 2026
d879523
fix :: μž…λ ₯μ°½ μœ„μΉ˜ 및 슀크둀 μ—¬λ°± μ‘°μ •
ashxom Jul 5, 2026
4fee05d
fix :: μž…λ ₯ 쀑 ν‘œμ‹œ μ™Όμͺ½ μ •λ ¬ 적용
ashxom Jul 5, 2026
a49a1b0
style :: μž…λ ₯μ°½ 그림자 μŠ€νƒ€μΌ μ‘°μ •
ashxom Jul 5, 2026
d61bfe5
fix :: 포컀슀 콜백 넀이밍 μˆ˜μ •
ashxom Jul 5, 2026
a0cef4d
chore :: μš”μ²­ μ‹€νŒ¨ 둜그 제거
ashxom Jul 5, 2026
49f04fe
chore :: ν™”λ©΄ preview μ½”λ“œ 제거
ashxom Jul 5, 2026
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
Expand Up @@ -27,6 +27,13 @@ sealed class BottomMenu(
title = "μ‹ μ²­",
)

data object ChatBot : BottomMenu(
route = ChatBotScreenNav,
icon = DmsIcon.ChatBot,
selectedIcon = DmsIcon.ChatBotFill,
title = "챗봇",
)

data object MyPage : BottomMenu(
route = MyPageScreenNav,
icon = DmsIcon.MyPage,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import team.aliens.dms.android.core.designsystem.labelB
private val bottomMenus = listOf(
BottomMenu.Home,
BottomMenu.Application,
BottomMenu.ChatBot,
BottomMenu.MyPage,
)

Expand All @@ -51,9 +52,11 @@ fun BottomNavigationBar(

NavigationBarItem(
selected = selected,
enabled = !selected,
enabled = true,
onClick = {
onNavigate(destination.route)
if (!selected) {
onNavigate(destination.route)
}
},
colors = NavigationBarItemDefaults.colors(
indicatorColor = Color.Transparent,
Expand All @@ -64,7 +67,13 @@ fun BottomNavigationBar(
) {
Icon(
modifier = Modifier.size(32.dp),
painter = painterResource(id = if (selected) destination.selectedIcon else destination.icon),
painter = painterResource(
id = if (selected) {
destination.selectedIcon
} else {
destination.icon
},
),
contentDescription = destination.title,
tint = color,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ data object SignInScreenNav : NavKey
@Serializable
data object HomeScreenNav : NavKey

@Serializable
data object ChatBotScreenNav : NavKey

@Serializable
data object MealScreenNav : NavKey

Expand Down
25 changes: 18 additions & 7 deletions app/src/main/kotlin/team/aliens/dms/android/app/ui/DmsApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
Expand Down Expand Up @@ -84,6 +87,8 @@ import team.aliens.dms.android.app.navigation.SignUpSetPasswordNav
import team.aliens.dms.android.app.navigation.SignUpTermsNav
import team.aliens.dms.android.feature.latestudy.navigation.LateStudyRoute
import java.util.UUID
import team.aliens.dms.android.app.navigation.ChatBotScreenNav
import team.aliens.dms.android.feature.chatbot.ui.ChatBotRoute


@Composable
Expand All @@ -97,12 +102,14 @@ fun DmsApp(

val backStack = rememberNavBackStack(OnboardingScreenNav)
val resultStore = rememberResultStore()
var isChatInputFocused by remember { mutableStateOf(false) }
val currentScreen = backStack.lastOrNull()
val shouldShowBottomBar = currentScreen in listOf(
HomeScreenNav,
ApplicationScreenNav,
ChatBotScreenNav,
MyPageScreenNav,
)
) && !(currentScreen == ChatBotScreenNav && isChatInputFocused)

LaunchedEffect(isStartupResolved, isOnboardingCompleted, isJwtAvailable) {
if (!isStartupResolved) return@LaunchedEffect
Expand Down Expand Up @@ -130,13 +137,10 @@ fun DmsApp(
currentScreen = currentScreen.toString(),
onNavigate = { destination ->
if (currentScreen != destination) {
when (destination) {
is HomeScreenNav -> {
backStack.remove(HomeScreenNav)
}
}
backStack.removeAll {
it is ApplicationScreenNav ||
it is HomeScreenNav ||
it is ApplicationScreenNav ||
it is ChatBotScreenNav ||
it is MyPageScreenNav
}
backStack.add(destination)
Expand Down Expand Up @@ -213,6 +217,13 @@ fun DmsApp(
}
)
}
entry<ChatBotScreenNav> {
ChatBotRoute(
onInputFocusChange = { focused ->
isChatInputFocused = focused
},
)
}
entry<VoteScreenNav> {
VoteRoute(
onNavigateBack = { backStack.remove(VoteScreenNav) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ object DmsIcon {
val HomeFill = R.drawable.ic_home_fill
val CheckCircle = R.drawable.ic_application
val CheckCircleFill = R.drawable.ic_application_fill
val ChatBot = R.drawable.ic_chatbot
val ChatBotFill = R.drawable.ic_chatbot_fill
val MyPage = R.drawable.ic_my_page
val MyPageFill = R.drawable.ic_my_page_fill
val Information = R.drawable.ic_information
Expand Down
22 changes: 22 additions & 0 deletions core/design-system/src/main/res/drawable/ic_chatbot.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M5.714,26.737L10,23.368H24.142C25,23.368 26.235,23.418 27.142,22.526C28.05,21.634 28,19.832 28,19.832V7.705C28,5.937 27.663,5.632 26.714,4.842C25.906,4.17 25.428,4 24.142,4H7.771C5.971,4 5.696,4.018 4.857,4.842C4.018,5.666 4,6.278 4,7.705L4,28L5.714,26.737ZM5.714,7.705V25.053L10,21.684H24.142C24.708,21.684 25.278,21.655 25.681,21.259C26.084,20.863 26.285,20.387 26.285,19.832V7.705C26.285,7.149 26.084,6.674 25.681,6.278C25.278,5.882 24.794,5.684 24.228,5.684H7.771C7.206,5.684 6.721,5.882 6.319,6.278C5.916,6.674 5.714,7.149 5.714,7.705Z"
android:fillColor="#B0B6C1"
android:fillType="evenOdd"/>
<path
android:pathData="M9.828,16H20V14H9.828V16Z"
android:fillColor="#B0B6C1"/>
<path
android:pathData="M9.828,11.747H22.171V9.726H9.828V11.747Z"
android:fillColor="#B0B6C1"/>
<path
android:pathData="M24.142,23.368C23.285,23.368 10,23.368 10,23.368L5.714,26.737L4,28L4,7.705M10,23.368H24.142M28,7.705V19.832C28,19.832 28.05,21.634 27.142,22.526C26.235,23.418 25,23.368 24.142,23.368M28,19.832C28,19.832 28,9.474 28,7.705M7.771,4C9.571,4 22.857,4 24.142,4C25.428,4 25.906,4.17 26.714,4.842C27.663,5.632 28,5.937 28,7.705M24.142,4H7.771M7.771,4C5.971,4 5.696,4.018 4.857,4.842C4.018,5.666 4,6.278 4,7.705M4,7.705C4,9.133 4,28 4,28M5.714,25.053V7.705C5.714,7.149 5.916,6.674 6.319,6.278C6.721,5.882 7.206,5.684 7.771,5.684H24.228C24.794,5.684 25.278,5.882 25.681,6.278C26.084,6.674 26.285,7.149 26.285,7.705V19.832C26.285,20.387 26.084,20.863 25.681,21.259C25.278,21.655 24.708,21.684 24.142,21.684H10L5.714,25.053ZM9.828,16H20V14H9.828V16ZM9.828,11.747H22.171V9.726H9.828V11.747Z"
android:strokeLineJoin="bevel"
android:strokeWidth="0.8"
android:fillColor="#00000000"
android:strokeColor="#B0B6C1"/>
</vector>
14 changes: 14 additions & 0 deletions core/design-system/src/main/res/drawable/ic_chatbot_fill.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M5.714,26.737L10,23.368H24.142C25,23.368 26.235,23.418 27.142,22.526C28.05,21.634 28,19.832 28,19.832V7.705C28,5.937 27.663,5.632 26.714,4.842C25.906,4.17 25.428,4 24.142,4H7.771C5.971,4 5.696,4.018 4.857,4.842C4.018,5.666 4,6.278 4,7.705L4,28L5.714,26.737ZM5.714,7.705V25.053L10,21.684H24.142C24.708,21.684 25.278,21.655 25.681,21.259C26.084,20.863 26.285,20.387 26.285,19.832V7.705C26.285,7.149 26.084,6.674 25.681,6.278C25.278,5.882 24.794,5.684 24.228,5.684H7.771C7.206,5.684 6.721,5.882 6.319,6.278C5.916,6.674 5.714,7.149 5.714,7.705Z"
android:fillColor="#323539"
android:fillType="evenOdd"/>
<path
android:pathData="M5.714,25.053V7.705C5.714,7.149 5.916,6.674 6.319,6.278C6.721,5.882 7.206,5.684 7.771,5.684H24.228C24.794,5.684 25.278,5.882 25.681,6.278C26.084,6.674 26.285,7.149 26.285,7.705V19.832C26.285,20.387 26.084,20.863 25.681,21.259C25.278,21.655 24.708,21.684 24.142,21.684H10L5.714,25.053ZM20,16H9.828V14H20V16ZM22.171,11.747H9.828V9.726H22.171V11.747Z"
android:fillColor="#323539"
android:fillType="evenOdd"/>
</vector>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package team.aliens.dms.android.data.chatbot.di

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import team.aliens.dms.android.data.chatbot.repository.ChatBotRepository
import team.aliens.dms.android.data.chatbot.repository.ChatBotRepositoryImpl
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
internal abstract class ChatBotDataModule {
@Binds
@Singleton
abstract fun bindChatBotRepository(
chatBotRepositoryImpl: ChatBotRepositoryImpl,
): ChatBotRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package team.aliens.dms.android.data.chatbot.repository

interface ChatBotRepository {
suspend fun askQuestion(question: String): String
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package team.aliens.dms.android.data.chatbot.repository

import team.aliens.dms.android.network.chatbot.datasource.NetworkChatBotDataSource
import team.aliens.dms.android.network.chatbot.model.ChatBotQuestionRequest
import javax.inject.Inject

class ChatBotRepositoryImpl @Inject constructor(
private val networkChatBotDataSource: NetworkChatBotDataSource,
) : ChatBotRepository {
override suspend fun askQuestion(question: String): String {
return networkChatBotDataSource.askQuestion(
request = ChatBotQuestionRequest(question = question),
).answer
}
}
Loading
Loading