From b5d157a635295d2cdd4df21fe2f656890da01211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Tue, 23 Dec 2025 23:32:56 +0900 Subject: [PATCH 01/11] =?UTF-8?q?refactor=20::=20prod=20ui=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EA=B2=BD=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/android/app/MainActivityViewModel.kt | 2 +- .../core/ui/composable/FloatingNotice.kt | 6 +++--- .../android/core/widget/MealWidgetReceiver.kt | 1 + .../dms/android/core/widget/MealWorker.kt | 7 +++++-- .../feature/main/home/ui/HomeScreen.kt | 9 --------- .../editpassword/ConfirmPasswordScreen.kt | 16 +++++++-------- .../editpassword/EditPasswordViewModel.kt | 8 ++++---- .../feature/editpassword/SetPasswordScreen.kt | 18 ++++++++--------- .../editprofile/EditProfileImageScreen.kt | 6 +++--- .../editprofile/EditProfileImageViewModel.kt | 8 ++++---- .../android/feature/findid/FindIdScreen.kt | 16 +++++++-------- .../android/feature/findid/FindIdViewModel.kt | 8 ++++---- .../announcement/AnnouncementListScreen.kt | 10 +++++----- .../announcement/AnnouncementListViewModel.kt | 8 ++++---- .../main/application/ApplicationScreen.kt | 10 +++++----- .../main/application/ApplicationViewModel.kt | 8 ++++---- .../android/feature/main/home/HomeScreen.kt | 18 ++++++++--------- .../feature/main/home/HomeViewModel.kt | 8 ++++---- .../feature/main/mypage/MyPageScreen.kt | 18 ++++++++--------- .../feature/main/mypage/MyPageViewModel.kt | 8 ++++---- .../feature/notice/NoticeDetailsScreen.kt | 8 ++++---- .../feature/notice/NoticeDetailsViewModel.kt | 8 ++++---- .../notification/box/NotificationBoxScreen.kt | 6 +++--- .../box/NotificationBoxViewModel.kt | 8 ++++---- .../settings/NotificationSettingsScreen.kt | 6 +++--- .../settings/NotificationSettingsViewModel.kt | 8 ++++---- .../feature/outing/OutingApplicationScreen.kt | 20 +++++++++---------- .../feature/outing/OutingStatusScreen.kt | 16 +++++++-------- .../android/feature/outing/OutingViewModel.kt | 8 ++++---- .../feature/point/PointHistoryScreen.kt | 14 ++++++------- .../feature/point/PointHistoryViewModel.kt | 8 ++++---- .../remains/RemainsApplicationScreen.kt | 12 +++++------ .../remains/RemainsApplicationViewModel.kt | 8 ++++---- .../AccountVerificationScreen.kt | 18 ++++++++--------- ...asswordEnterEmailVerificationCodeScreen.kt | 16 +++++++-------- .../resetpassword/ResetPasswordViewModel.kt | 8 ++++---- .../resetpassword/SetPasswordScreen.kt | 18 ++++++++--------- .../android/feature/signin/SignInScreen.kt | 20 +++++++++---------- .../android/feature/signin/SignInViewModel.kt | 8 ++++---- .../feature/signup/EnterEmailScreen.kt | 14 ++++++------- .../EnterEmailVerificationCodeScreen.kt | 16 +++++++-------- .../EnterSchoolVerificationCodeScreen.kt | 14 ++++++------- .../EnterSchoolVerificationQuestionScreen.kt | 16 +++++++-------- .../dms/android/feature/signup/SetIdScreen.kt | 20 +++++++++---------- .../feature/signup/SetPasswordScreen.kt | 18 ++++++++--------- .../feature/signup/SetProfileImageScreen.kt | 16 +++++++-------- .../android/feature/signup/SignUpViewModel.kt | 8 ++++---- .../dms/android/feature/signup/TermsScreen.kt | 10 +++++----- .../dms/android/feature/studyroom/Common.kt | 12 +++++------ .../details/StudyRoomDetailsScreen.kt | 16 +++++++-------- .../details/StudyRoomDetailsViewModel.kt | 8 ++++---- .../studyroom/list/StudyRoomListScreen.kt | 10 +++++----- .../studyroom/list/StudyRoomListViewModel.kt | 8 ++++---- .../feature/volunteers/VolunteersViewModel.kt | 8 ++++---- .../feature/voting/VotingApprovalScreen.kt | 4 ++-- .../voting/VotingModelStudentScreen.kt | 4 ++-- .../feature/voting/VotingSelectedScreen.kt | 4 ++-- .../feature/voting/VotingStudentScreen.kt | 4 ++-- .../android/feature/voting/VotingViewModel.kt | 8 ++++---- 59 files changed, 312 insertions(+), 317 deletions(-) diff --git a/app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt b/app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt index 671b6f8b2..9cdfdc876 100644 --- a/app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt +++ b/app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt @@ -5,7 +5,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import team.aliens.dms.android.core.jwt.JwtProvider -import ui.viewmodel.BaseViewModel +import team.aliens.dms.android.core.ui.viewmodel.BaseViewModel import javax.inject.Inject @HiltViewModel diff --git a/core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt b/core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt index 019e508ae..a89a5eca6 100644 --- a/core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt +++ b/core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt @@ -16,9 +16,9 @@ import androidx.compose.ui.unit.dp import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.R import team.aliens.dms.android.core.designsystem.shadow -import team.aliens.dms.android.core.designsystem.PaddingDefaults -import team.aliens.dms.android.core.designsystem.horizontalPadding -import team.aliens.dms.android.core.designsystem.verticalPadding +import team.aliens.dms.android.core.ui.PaddingDefaults +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.verticalPadding @Composable fun FloatingNotice( diff --git a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWidgetReceiver.kt b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWidgetReceiver.kt index bbf99b5b7..0423ececb 100644 --- a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWidgetReceiver.kt +++ b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWidgetReceiver.kt @@ -3,6 +3,7 @@ package team.aliens.dms.android.core.widget.meal import android.content.Context import androidx.glance.appwidget.GlanceAppWidget import androidx.glance.appwidget.GlanceAppWidgetReceiver +import team.aliens.dms.android.core.widget.MealWorker class MealWidgetReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget: GlanceAppWidget diff --git a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt index b208a6256..652a9c685 100644 --- a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt +++ b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt @@ -1,4 +1,4 @@ -package team.aliens.dms.android.core.widget.meal +package team.aliens.dms.android.core.widget import android.content.Context import android.os.Build @@ -15,6 +15,9 @@ import androidx.work.WorkManager import androidx.work.WorkerParameters import dagger.assisted.Assisted import dagger.assisted.AssistedInject +import team.aliens.dms.android.core.widget.meal.MealGlanceWidget +import team.aliens.dms.android.core.widget.meal.MealInfo +import team.aliens.dms.android.core.widget.meal.MealInfoStateDefinition import team.aliens.dms.android.core.widget.meal.mapper.toEntity import team.aliens.dms.android.data.meal.repository.MealRepository import team.aliens.dms.android.shared.date.util.now @@ -65,7 +68,7 @@ class MealWorker @AssistedInject constructor( try { val mealDate = if (now.hour >= 19) today.plusDays(1) else today - val response = mealRepository.fetchMeal(mealDate) + val response = mealRepository.fetchMeal(mealDate).getOrThrow() setWidgetState(glanceIds, response.toEntity()) } catch (e: Exception) { Result.failure() diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/ui/HomeScreen.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/ui/HomeScreen.kt index e47c818e5..dc273f34f 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/ui/HomeScreen.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/ui/HomeScreen.kt @@ -1,24 +1,17 @@ package team.aliens.dms.android.feature.main.home.ui -import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.BlurredEdgeTreatment -import androidx.compose.ui.draw.blur import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource @@ -28,7 +21,6 @@ import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.R import team.aliens.dms.android.core.designsystem.button.DmsItemButton import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBarType -import team.aliens.dms.android.core.designsystem.topPadding import team.aliens.dms.android.data.point.model.PointType import team.aliens.dms.android.feature.main.home.model.AnnouncementButton import team.aliens.dms.android.feature.main.home.model.DmsPointContent @@ -138,5 +130,4 @@ private fun HomeScreen( ) } } - } diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/ConfirmPasswordScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/ConfirmPasswordScreen.kt index a408cc558..9c7830dc2 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/ConfirmPasswordScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/ConfirmPasswordScreen.kt @@ -23,14 +23,14 @@ import team.aliens.dms.android.core.designsystem.ContainedButton import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold -import ui.Banner -import ui.BannerDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.PasswordTextField -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.PasswordTextField +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.editpassword.navigation.EditPasswordNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/EditPasswordViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/EditPasswordViewModel.kt index 178a75fcb..c6b6da203 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/EditPasswordViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/EditPasswordViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.user.repository.UserRepository import team.aliens.dms.android.shared.validator.checkIfPasswordValid import javax.inject.Inject diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/SetPasswordScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/SetPasswordScreen.kt index b00f31239..e0d6c679b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/SetPasswordScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/SetPasswordScreen.kt @@ -30,15 +30,15 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.PasswordTextField -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.PasswordTextField +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.editpassword.navigation.EditPasswordNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt index 7eb0666ac..84d8d10b7 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt @@ -40,9 +40,9 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.editprofile.navigation.EditProfileNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageViewModel.kt index dda9555bd..28fb94e2c 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageViewModel.kt @@ -6,10 +6,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.file.repository.FileRepository import team.aliens.dms.android.data.student.repository.StudentRepository import java.io.File diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdScreen.kt index c23825955..3ad542c4e 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdScreen.kt @@ -43,14 +43,14 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextField import team.aliens.dms.android.core.designsystem.clickable -import ui.Banner -import ui.BannerDefaults -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.findid.navigator.FindIdNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdViewModel.kt index aca184aab..e61cbc15a 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.school.model.School import team.aliens.dms.android.data.school.repository.SchoolRepository import team.aliens.dms.android.data.student.repository.StudentRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt index 62f3fa18a..859e95224 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt @@ -29,12 +29,12 @@ import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.notice.model.Notice import team.aliens.dms.android.feature.R import team.aliens.dms.android.shared.model.Order diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt index d842ec7e5..cfcb64dac 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.notice.model.Notice import team.aliens.dms.android.data.notice.repository.NoticeRepository import team.aliens.dms.android.shared.model.Order diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt index 9c6d92e96..eca006f56 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt @@ -49,12 +49,12 @@ import team.aliens.dms.android.core.designsystem.RoundedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow -import ui.ExtraLargeVerticalSpace +import team.aliens.dms.android.core.ui.ExtraLargeVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.voting.model.AllVoteSearch import team.aliens.dms.android.feature.R import java.util.UUID diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt index 8bc52add5..57b82f7d3 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt @@ -6,10 +6,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.remains.model.AppliedRemainsOption import team.aliens.dms.android.data.remains.repository.RemainsRepository import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt index 039ae6849..0b77c874d 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt @@ -79,16 +79,16 @@ import team.aliens.dms.android.core.designsystem.ShadowDefaults import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.AppLogo -import ui.composable.FloatingNotice -import ui.endPadding -import ui.horizontalPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.AppLogo +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.data.meal.model.Meal import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.main.home.MealCardType.BREAKFAST diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt index deb2861af..1223197da 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt @@ -5,10 +5,10 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.time.LocalDate -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.meal.exception.CannotFindMealException import team.aliens.dms.android.data.meal.model.Meal import team.aliens.dms.android.data.meal.repository.MealRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt index 4670949a3..b6fab7ea3 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt @@ -55,16 +55,16 @@ import team.aliens.dms.android.core.designsystem.ShadowDefaults import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace -import ui.LargeVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.LargeVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.point.model.PointType import team.aliens.dms.android.feature.R import team.aliens.dms.android.shared.model.Sex diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt index 3c917a112..0d1f38b1b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.auth.repository.AuthRepository import team.aliens.dms.android.data.student.model.MyPage import team.aliens.dms.android.data.student.repository.StudentRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsScreen.kt index 2760b7a39..71f55f485 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsScreen.kt @@ -29,10 +29,10 @@ import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerticallyFadedColumn -import ui.DefaultVerticalSpace -import ui.horizontalPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.notice.navigation.NoticeNavigator import java.util.UUID diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsViewModel.kt index 35b232fe5..531742731 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsViewModel.kt @@ -5,10 +5,10 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.time.LocalDateTime -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.notice.repository.NoticeRepository import java.util.UUID import javax.inject.Inject diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt index 4c862bde7..e395a5b97 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt @@ -35,9 +35,9 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.data.notification.model.Notification import team.aliens.dms.android.data.notification.model.NotificationTopic import team.aliens.dms.android.feature.R diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxViewModel.kt index 94e39d3ba..f7f460ae6 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.notification.model.Notification import team.aliens.dms.android.data.notification.model.NotificationTopic import team.aliens.dms.android.data.notification.repository.NotificationRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt index 96b192306..0336635f9 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt @@ -38,9 +38,9 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.Switch import team.aliens.dms.android.core.notification.notificationPermissionGranted import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.data.notification.model.NotificationTopicGroup import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.notification.navigation.NotificationSettingsNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsViewModel.kt index 6f3d06796..461b73256 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.notification.model.NotificationTopic import team.aliens.dms.android.data.notification.model.NotificationTopicGroup import team.aliens.dms.android.data.notification.repository.NotificationRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt index cc0bcfa28..48e35f5e0 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt @@ -67,17 +67,17 @@ import team.aliens.dms.android.core.designsystem.ShadowDefaults import team.aliens.dms.android.core.designsystem.TextField import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.rememberPickerState -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.FloatingNotice -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.student.model.Student import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.outing.navigation.OutingNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt index a3cb3f94c..ef9900569 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt @@ -40,15 +40,15 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.composable.FloatingNotice -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.outing.navigation.OutingNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingViewModel.kt index a0fbcb589..f879a423b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingViewModel.kt @@ -6,10 +6,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.time.LocalDate import java.time.LocalTime -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.outing.model.CurrentAppliedOutingApplication import team.aliens.dms.android.data.outing.model.OutingApplicationTime import team.aliens.dms.android.data.outing.repository.OutingRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt index ea86340f9..ef7d5ef1f 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt @@ -32,14 +32,14 @@ import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.point.model.Point import team.aliens.dms.android.data.point.model.PointType import team.aliens.dms.android.feature.R diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryViewModel.kt index 494433944..7688c2de9 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.point.model.Point import team.aliens.dms.android.data.point.model.PointType import team.aliens.dms.android.data.point.repository.PointRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt index 36adc0cc5..6fc086828 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt @@ -43,13 +43,13 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.composable.FloatingNotice -import ui.horizontalPadding -import ui.startPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.remains.model.RemainsOption import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.remains.navigator.RemainsNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationViewModel.kt index db9841ff6..02aa03742 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.remains.model.AppliedRemainsOption import team.aliens.dms.android.data.remains.model.RemainsApplicationTime import team.aliens.dms.android.data.remains.model.RemainsOption diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/AccountVerificationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/AccountVerificationScreen.kt index f6eb85c20..74bff0b93 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/AccountVerificationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/AccountVerificationScreen.kt @@ -36,15 +36,15 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.ShadowDefaults import team.aliens.dms.android.core.designsystem.TextField -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.resetpassword.navigation.ResetPasswordNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordEnterEmailVerificationCodeScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordEnterEmailVerificationCodeScreen.kt index 524dd4113..bb95eaa50 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordEnterEmailVerificationCodeScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordEnterEmailVerificationCodeScreen.kt @@ -34,14 +34,14 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.VerificationCodeInput import team.aliens.dms.android.core.designsystem.VerificationCodeInputDefaults -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.resetpassword.navigation.ResetPasswordNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordViewModel.kt index f0ee211ff..eae1238c6 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordViewModel.kt @@ -8,10 +8,10 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.auth.model.EmailVerificationType import team.aliens.dms.android.data.auth.repository.AuthRepository import team.aliens.dms.android.data.student.repository.StudentRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/SetPasswordScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/SetPasswordScreen.kt index 5a4baddb7..88447570e 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/SetPasswordScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/SetPasswordScreen.kt @@ -28,15 +28,15 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.PasswordTextField -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.PasswordTextField +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.resetpassword.navigation.ResetPasswordNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt index d7acea72c..8e2ebe46b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt @@ -58,17 +58,17 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextField import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.notification.notificationPermissionGranted -import ui.Banner -import ui.BannerDefaults -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.PasswordTextField -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.PasswordTextField +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.data.auth.exception.AuthException import team.aliens.dms.android.data.auth.exception.BadRequestException import team.aliens.dms.android.data.auth.exception.PasswordMismatchException diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInViewModel.kt index af4fc1265..1ad900b31 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.auth.exception.AuthException import team.aliens.dms.android.data.auth.exception.BadRequestException import team.aliens.dms.android.data.auth.exception.PasswordMismatchException diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailScreen.kt index 9b2d856d3..cdefd617c 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailScreen.kt @@ -30,13 +30,13 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.TextField -import ui.Banner -import ui.BannerDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator import team.aliens.dms.android.shared.validator.checkIfEmailValid diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailVerificationCodeScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailVerificationCodeScreen.kt index b6d3150e4..175daa207 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailVerificationCodeScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailVerificationCodeScreen.kt @@ -35,14 +35,14 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.VerificationCodeInput import team.aliens.dms.android.core.designsystem.VerificationCodeInputDefaults -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationCodeScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationCodeScreen.kt index d54d4cb02..68b9cc68a 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationCodeScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationCodeScreen.kt @@ -26,13 +26,13 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerificationCodeInput import team.aliens.dms.android.core.designsystem.VerificationCodeInputDefaults -import ui.Banner -import ui.BannerDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationQuestionScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationQuestionScreen.kt index 5affe0a91..d6ab62d32 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationQuestionScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationQuestionScreen.kt @@ -24,14 +24,14 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextField -import ui.Banner -import ui.BannerDefaults -import ui.DefaultHorizontalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetIdScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetIdScreen.kt index 5cb38680b..855704b13 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetIdScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetIdScreen.kt @@ -46,16 +46,16 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.ShadowDefaults import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.TextField -import ui.Banner -import ui.BannerDefaults -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetPasswordScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetPasswordScreen.kt index 42b316cd6..189ee4ca8 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetPasswordScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetPasswordScreen.kt @@ -29,15 +29,15 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.composable.PasswordTextField -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.composable.PasswordTextField +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt index fa162d3f1..d70753f57 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt @@ -40,15 +40,15 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable -import ui.Banner -import ui.BannerDefaults -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.Banner +import team.aliens.dms.android.core.ui.BannerDefaults +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SignUpViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SignUpViewModel.kt index 9bb45c62e..6669e592c 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SignUpViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SignUpViewModel.kt @@ -6,10 +6,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.auth.model.EmailVerificationType import team.aliens.dms.android.data.auth.repository.AuthRepository import team.aliens.dms.android.data.file.repository.FileRepository diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/TermsScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/TermsScreen.kt index 8078ed5de..1c14da98d 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/TermsScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/TermsScreen.kt @@ -31,11 +31,11 @@ import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.signup.navigation.SignUpNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt index 39d20b7ac..fbfee36ca 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt @@ -13,13 +13,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.shadow -import ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding +import team.aliens.dms.android.core.ui.verticalPadding import team.aliens.dms.android.data.studyroom.model.StudyRoom import team.aliens.dms.android.feature.R import team.aliens.dms.android.shared.model.Sex diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsScreen.kt index a50578959..2e54ceb83 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsScreen.kt @@ -52,14 +52,14 @@ import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.ShadowDefaults -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace -import ui.bottomPadding -import ui.composable.FloatingNotice -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.endPadding +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding +import team.aliens.dms.android.core.ui.topPadding import team.aliens.dms.android.data.studyroom.model.StudyRoom import team.aliens.dms.android.data.studyroom.model.toStudyRoom import team.aliens.dms.android.feature.R diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsViewModel.kt index ef0893a5b..61401b0ff 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.studyroom.model.StudyRoom import team.aliens.dms.android.data.studyroom.repository.StudyRoomRepository import java.util.UUID diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt index 4b6923516..ab6d4b90c 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt @@ -36,12 +36,12 @@ import team.aliens.dms.android.core.designsystem.ModalBottomSheet import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn -import ui.DefaultHorizontalSpace -import ui.DefaultVerticalSpace +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.composable.FloatingNotice -import ui.horizontalPadding -import ui.startPadding +import team.aliens.dms.android.core.ui.composable.FloatingNotice +import team.aliens.dms.android.core.ui.horizontalPadding +import team.aliens.dms.android.core.ui.startPadding import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.studyroom.StudyRoomCard diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListViewModel.kt index d18f0a858..a092e2c00 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListViewModel.kt @@ -4,10 +4,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime import team.aliens.dms.android.data.studyroom.model.StudyRoom import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/volunteers/VolunteersViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/volunteers/VolunteersViewModel.kt index 2b10b12b0..8badd8510 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/volunteers/VolunteersViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/volunteers/VolunteersViewModel.kt @@ -5,10 +5,10 @@ import dagger.hilt.android.lifecycle.HiltViewModel import team.aliens.dms.android.core.jwt.AccessToken import team.aliens.dms.android.core.jwt.RefreshToken import team.aliens.dms.android.core.jwt.datastore.JwtDataStoreDataSource -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import javax.inject.Inject @HiltViewModel diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt index 6399b92c7..f82c75453 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt @@ -42,8 +42,8 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.voting.navigation.VotingNavigator import java.util.UUID diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt index 69241a0be..b118e1c78 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt @@ -55,8 +55,8 @@ import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.data.voting.model.StudentGcnInfo import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.voting.navigation.VotingNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt index 5a9027fff..2522b92d0 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt @@ -43,8 +43,8 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.voting.navigation.VotingNavigator import java.util.UUID diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt index 325f43319..570675eae 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt @@ -53,8 +53,8 @@ import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding +import team.aliens.dms.android.core.ui.bottomPadding +import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.data.voting.model.StudentGcnInfo import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.voting.navigation.VotingNavigator diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingViewModel.kt index da8de7eff..7fbe82b03 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingViewModel.kt @@ -5,10 +5,10 @@ import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.time.LocalDate -import ui.mvi.BaseMviViewModel -import ui.mvi.Intent -import ui.mvi.SideEffect -import ui.mvi.UiState +import team.aliens.dms.android.core.ui.mvi.BaseMviViewModel +import team.aliens.dms.android.core.ui.mvi.Intent +import team.aliens.dms.android.core.ui.mvi.SideEffect +import team.aliens.dms.android.core.ui.mvi.UiState import team.aliens.dms.android.data.student.model.Student import team.aliens.dms.android.data.student.repository.StudentRepository import team.aliens.dms.android.data.voting.model.AllVoteSearch From 96da1aea989e7b92dfd0a52624d44b9b2d77fa64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 10:50:29 +0900 Subject: [PATCH 02/11] =?UTF-8?q?refactor=20::=20ui=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=20paddingDefault=20=EA=B2=BD=EB=A1=9C=20=EC=9E=AC=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/feature/editprofile/EditProfileImageScreen.kt | 2 +- .../kotlin/team/aliens/dms/android/feature/main/Main.kt | 2 +- .../feature/main/announcement/AnnouncementListScreen.kt | 2 +- .../android/feature/main/application/ApplicationScreen.kt | 2 +- .../aliens/dms/android/feature/main/home/HomeScreen.kt | 2 +- .../aliens/dms/android/feature/main/home/HomeViewModel.kt | 8 ++------ .../dms/android/feature/main/mypage/MyPageScreen.kt | 6 +++--- .../feature/notification/box/NotificationBoxScreen.kt | 2 +- .../notification/settings/NotificationSettingsScreen.kt | 2 +- .../dms/android/feature/outing/OutingApplicationScreen.kt | 2 +- .../dms/android/feature/outing/OutingStatusScreen.kt | 2 +- .../dms/android/feature/point/PointHistoryScreen.kt | 2 +- .../android/feature/remains/RemainsApplicationScreen.kt | 2 +- .../aliens/dms/android/feature/signin/SignInScreen.kt | 2 +- .../dms/android/feature/signup/SetProfileImageScreen.kt | 2 +- .../team/aliens/dms/android/feature/studyroom/Common.kt | 2 +- .../android/feature/studyroom/list/StudyRoomListScreen.kt | 2 +- .../dms/android/feature/voting/VotingApprovalScreen.kt | 2 +- .../android/feature/voting/VotingModelStudentScreen.kt | 2 +- .../dms/android/feature/voting/VotingSelectedScreen.kt | 2 +- .../dms/android/feature/voting/VotingStudentScreen.kt | 2 +- 21 files changed, 24 insertions(+), 28 deletions(-) diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt index 84d8d10b7..782c5b141 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt @@ -39,7 +39,7 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.horizontalPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/Main.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/Main.kt index fa8aa8b71..5e22ef216 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/Main.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/Main.kt @@ -44,7 +44,7 @@ import team.aliens.dms.android.core.designsystem.slideInFromEnd import team.aliens.dms.android.core.designsystem.slideInFromStart import team.aliens.dms.android.core.designsystem.slideOutFromEnd import team.aliens.dms.android.core.designsystem.slideOutFromStart -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.feature.R import team.aliens.dms.android.feature.main.announcement.AnnouncementListScreen import team.aliens.dms.android.feature.main.application.ApplicationScreen diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt index 859e95224..cd90ba298 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt @@ -30,7 +30,7 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.topPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt index eca006f56..747c6043c 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt @@ -50,7 +50,7 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.ExtraLargeVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.topPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt index 0b77c874d..2689a8f6f 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt @@ -81,7 +81,7 @@ import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.composable.AppLogo diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt index 1223197da..43d769031 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt @@ -47,9 +47,7 @@ internal class HomeViewModel @Inject constructor( private fun updateDate(date: LocalDate) { viewModelScope.launch(Dispatchers.IO) { - runCatching { - mealRepository.fetchMeal(date) - }.onSuccess { meal -> + mealRepository.fetchMeal(date).onSuccess { meal -> reduce( newState = stateFlow.value.copy( selectedDate = date, @@ -68,9 +66,7 @@ internal class HomeViewModel @Inject constructor( viewModelScope.launch(Dispatchers.IO) { println("LOGLOG1") val capturedDate = stateFlow.value.selectedDate - runCatching { - mealRepository.updateMeal(capturedDate) - }.onSuccess { meal -> + mealRepository.updateMeal(capturedDate).onSuccess { meal -> reduce( newState = stateFlow.value.copy( selectedDate = capturedDate, diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt index b6fab7ea3..32a5111e8 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt @@ -57,7 +57,7 @@ import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.LargeVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.endPadding @@ -160,8 +160,8 @@ internal fun MyPageScreen( ) { UserInformation( modifier = Modifier.fillMaxWidth(), - gradeClassNumber = uiState.myPage?.gradeClassNumber, - studentName = uiState.myPage?.studentName, + gradeClassNumber = uiState.myPage?.gcn, + studentName = uiState.myPage?.name, sex = uiState.myPage?.sex, schoolName = uiState.myPage?.schoolName, profileImageUrl = uiState.myPage?.profileImageUrl, diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt index e395a5b97..4746223f7 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt @@ -34,7 +34,7 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.shadow -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.topPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt index 0336635f9..e15218492 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt @@ -37,7 +37,7 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.Switch import team.aliens.dms.android.core.notification.notificationPermissionGranted -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.topPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt index 48e35f5e0..0071f9929 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt @@ -69,7 +69,7 @@ import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.rememberPickerState import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.composable.FloatingNotice diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt index ef9900569..6114f07ec 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt @@ -42,7 +42,7 @@ import team.aliens.dms.android.core.designsystem.TextButton import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.composable.FloatingNotice import team.aliens.dms.android.core.ui.horizontalPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt index ef7d5ef1f..eac848c0b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt @@ -34,7 +34,7 @@ import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.startPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt index 6fc086828..940fc4c8b 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt @@ -44,7 +44,7 @@ import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.composable.FloatingNotice import team.aliens.dms.android.core.ui.horizontalPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt index 8e2ebe46b..3c36ce4a8 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt @@ -62,7 +62,7 @@ import team.aliens.dms.android.core.ui.Banner import team.aliens.dms.android.core.ui.BannerDefaults import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.composable.PasswordTextField diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt index d70753f57..40f1ba280 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt @@ -43,7 +43,7 @@ import team.aliens.dms.android.core.designsystem.clickable import team.aliens.dms.android.core.ui.Banner import team.aliens.dms.android.core.ui.BannerDefaults import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.collectInLaunchedEffectWithLifecycle import team.aliens.dms.android.core.ui.horizontalPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt index fbfee36ca..af535891f 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.res.stringResource import team.aliens.dms.android.core.designsystem.DmsTheme import team.aliens.dms.android.core.designsystem.shadow import team.aliens.dms.android.core.ui.DefaultHorizontalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.endPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.startPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt index ab6d4b90c..4c7fbf934 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt @@ -38,7 +38,7 @@ import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.VerticallyFadedLazyColumn import team.aliens.dms.android.core.ui.DefaultHorizontalSpace import team.aliens.dms.android.core.ui.DefaultVerticalSpace -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.composable.FloatingNotice import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.core.ui.startPadding diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt index f82c75453..a07c7c4e9 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingApprovalScreen.kt @@ -41,7 +41,7 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.clickable -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt index b118e1c78..84c6ae34d 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingModelStudentScreen.kt @@ -54,7 +54,7 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.data.voting.model.StudentGcnInfo diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt index 2522b92d0..9a014ef28 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingSelectedScreen.kt @@ -42,7 +42,7 @@ import team.aliens.dms.android.core.designsystem.DmsTopAppBar import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.feature.R diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt index 570675eae..8b848c1c1 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/voting/VotingStudentScreen.kt @@ -52,7 +52,7 @@ import team.aliens.dms.android.core.designsystem.LocalToast import team.aliens.dms.android.core.designsystem.OutlinedButton import team.aliens.dms.android.core.designsystem.Scaffold import team.aliens.dms.android.core.designsystem.TextButton -import team.aliens.dms.android.core.designsystem.PaddingDefaults +import team.aliens.dms.android.core.ui.PaddingDefaults import team.aliens.dms.android.core.ui.bottomPadding import team.aliens.dms.android.core.ui.horizontalPadding import team.aliens.dms.android.data.voting.model.StudentGcnInfo From 670131e24f701de8140def7542c9696c7487f2cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 11:01:43 +0900 Subject: [PATCH 03/11] =?UTF-8?q?refactor=20::=20=EB=84=A4=ED=8A=B8?= =?UTF-8?q?=EC=9B=8C=ED=81=AC=20=EA=B4=80=EB=A0=A8=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=ED=94=8C=EB=9E=98=EC=9D=B4=EB=B2=84=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/jwt/build.gradle.kts | 11 +++++++++++ core/network/build.gradle.kts | 11 +++++++++++ core/school/build.gradle.kts | 11 +++++++++++ data/build.gradle.kts | 11 +++++++++++ network/build.gradle.kts | 11 +++++++++++ 5 files changed, 55 insertions(+) diff --git a/core/jwt/build.gradle.kts b/core/jwt/build.gradle.kts index f394c3a3e..cc8019900 100644 --- a/core/jwt/build.gradle.kts +++ b/core/jwt/build.gradle.kts @@ -39,6 +39,17 @@ android { kotlinOptions { jvmTarget = Versions.java.toString() } + + flavorDimensions += "environment" + + productFlavors { + create("dev") { + dimension = "environment" + } + create("prod") { + dimension = "environment" + } + } } dependencies { diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 04cf4e52c..0fcea83f6 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -43,6 +43,17 @@ android { kotlinOptions { jvmTarget = Versions.java.toString() } + + flavorDimensions += "environment" + + productFlavors { + create("dev") { + dimension = "environment" + } + create("prod") { + dimension = "environment" + } + } } dependencies { diff --git a/core/school/build.gradle.kts b/core/school/build.gradle.kts index c320e9488..47d2645b1 100644 --- a/core/school/build.gradle.kts +++ b/core/school/build.gradle.kts @@ -39,6 +39,17 @@ android { kotlinOptions { jvmTarget = Versions.java.toString() } + + flavorDimensions += "environment" + + productFlavors { + create("dev") { + dimension = "environment" + } + create("prod") { + dimension = "environment" + } + } } dependencies { diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 753f15148..0cd43d399 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -38,6 +38,17 @@ android { kotlinOptions { jvmTarget = Versions.java.toString() } + + flavorDimensions += "environment" + + productFlavors { + create("dev") { + dimension = "environment" + } + create("prod") { + dimension = "environment" + } + } } dependencies { diff --git a/network/build.gradle.kts b/network/build.gradle.kts index 2a9fae4ac..46e72b2e0 100644 --- a/network/build.gradle.kts +++ b/network/build.gradle.kts @@ -69,6 +69,17 @@ android { kotlinOptions { jvmTarget = Versions.java.toString() } + + flavorDimensions += "environment" + + productFlavors { + create("dev") { + dimension = "environment" + } + create("prod") { + dimension = "environment" + } + } } dependencies { From 389f972e82e4a9731f11954ecde9a64f28ec6079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 11:08:04 +0900 Subject: [PATCH 04/11] =?UTF-8?q?refactor=20::=20network=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=ED=94=8C=EB=9E=98=EC=9D=B4=EB=B2=84=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meal/apiservice/MealApiService.kt | 0 .../meal/datasource/NetworkMealDataSource.kt | 0 .../datasource/NetworkMealDataSourceImpl.kt | 0 .../meal/di/ApiServiceModule.kt | 0 .../meal/di/DataSourceModule.kt | 0 .../meal/model/FetchMealsResponse.kt | 0 .../auth/apiservice/AuthApiService.kt | 0 .../auth/datasource/NetworkAuthDataSource.kt | 0 .../datasource/NetworkAuthDataSourceImpl.kt | 0 .../auth/di/ApiServiceModule.kt | 0 .../auth/di/DataSourceModule.kt | 0 .../auth/model/CheckIdExistsResponse.kt | 0 .../model/SendEmailVerificationCodeRequest.kt | 0 .../auth/model/SignInRequest.kt | 0 .../auth/model/SignInResponse.kt | 0 .../file/apiservice/FileApiService.kt | 0 .../file/datasource/NetworkFileDataSource.kt | 0 .../datasource/NetworkFileDataSourceImpl.kt | 0 .../file/di/ApiServiceModule.kt | 0 .../file/di/DataSourceModule.kt | 0 .../file/model/FetchPresignedUrlResponse.kt | 0 .../file/model/UploadFileResponse.kt | 0 .../meal/apiservice/MealApiService.kt | 14 +++++++++++++ .../meal/datasource/NetworkMealDataSource.kt | 8 ++++++++ .../datasource/NetworkMealDataSourceImpl.kt | 14 +++++++++++++ .../meal/di/ApiServiceModule.kt | 20 +++++++++++++++++++ .../meal/di/DataSourceModule.kt | 18 +++++++++++++++++ .../meal/model/FetchMealsResponse.kt | 14 +++++++++++++ .../notice/apiservice/NoticeApiService.kt | 0 .../datasource/NetworkNoticeDataSource.kt | 0 .../datasource/NetworkNoticeDataSourceImpl.kt | 0 .../notice/di/ApiServiceModule.kt | 0 .../notice/di/DataSourceModule.kt | 0 .../model/FetchNoticeDetailsResponse.kt | 0 .../notice/model/FetchNoticesResponse.kt | 0 .../FetchWhetherNewNoticesExistResponse.kt | 0 .../apiservice/NotificationApiService.kt | 0 .../NetworkNotificationDataSource.kt | 0 .../NetworkNotificationDataSourceImpl.kt | 0 .../notification/di/ApiServiceModule.kt | 0 .../notification/di/DataSourceModule.kt | 0 .../BatchUpdateNotificationTopicRequest.kt | 0 ...CancelFcmDeviceTokenRegistrationRequest.kt | 0 .../FetchNotificationTopicStatusResponse.kt | 0 .../model/FetchNotificationsResponse.kt | 0 .../model/NotificationTopicGroup.kt | 0 .../model/RegisterFcmDeviceTokenRequest.kt | 0 .../SubscribeNotificationTopicRequest.kt | 0 .../UnsubscribeNotificationTopicRequest.kt | 0 .../outing/apiservice/OutingApiService.kt | 0 .../datasource/OutingNetworkDataSource.kt | 0 .../datasource/OutingNetworkDataSourceImpl.kt | 0 .../outing/di/ApiServiceModule.kt | 0 .../outing/di/DataSourceModule.kt | 0 .../outing/model/ApplyOutingRequest.kt | 0 .../outing/model/ApplyOutingResponse.kt | 0 ...CurrentAppliedOutingApplicationResponse.kt | 0 .../FetchOutingApplicationDetailsResponse.kt | 0 .../outing/model/FetchOutingTypesResponse.kt | 0 .../model/OutingAvailableTimeResponse.kt | 0 .../point/apiservice/PointApiService.kt | 0 .../datasource/NetworkPointDataSource.kt | 0 .../datasource/NetworkPointDataSourceImpl.kt | 0 .../point/di/ApiServiceModule.kt | 0 .../point/di/DataSourceModule.kt | 0 .../point/model/FetchPointsResponse.kt | 0 .../remains/apiservice/RemainsApiService.kt | 0 .../datasource/NetworkRemainsDataSource.kt | 0 .../NetworkRemainsDataSourceImpl.kt | 0 .../remains/di/ApiServiceModule.kt | 0 .../remains/di/DataSourceModule.kt | 0 .../FetchAppliedRemainsOptionResponse.kt | 0 .../FetchRemainsApplicationTimeResponse.kt | 0 .../model/FetchRemainsOptionsResponse.kt | 0 .../school/apiservice/SchoolApiService.kt | 0 .../datasource/NetworkSchoolDataSource.kt | 0 .../datasource/NetworkSchoolDataSourceImpl.kt | 0 .../school/di/ApiServiceModule.kt | 0 .../school/di/DataSourceModule.kt | 0 .../ExamineSchoolVerificationCodeResponse.kt | 0 ...FetchSchoolVerificationQuestionResponse.kt | 0 .../school/model/FetchSchoolsResponse.kt | 0 .../student/apiservice/StudentApiService.kt | 0 .../datasource/NetworkStudentDataSource.kt | 0 .../NetworkStudentDataSourceImpl.kt | 0 .../student/di/ApiServiceModule.kt | 0 .../student/di/DataSourceModule.kt | 0 .../student/model/EditProfileRequest.kt | 0 .../model/ExamineStudentNumberResponse.kt | 0 .../student/model/FetchMyPageResponse.kt | 0 .../student/model/FetchStudentsResponse.kt | 0 .../student/model/FindIdResponse.kt | 0 .../student/model/ResetPasswordRequest.kt | 0 .../student/model/SignUpRequest.kt | 0 .../student/model/SignUpResponse.kt | 0 .../apiservice/StudyRoomApiService.kt | 0 .../datasource/NetworkStudyRoomDataSource.kt | 0 .../NetworkStudyRoomDataSourceImpl.kt | 0 .../studyroom/di/ApiServiceModule.kt | 0 .../studyroom/di/DataSourceModule.kt | 0 .../model/FetchAppliedStudyRoomResponse.kt | 0 .../FetchAvailableStudyRoomTimesResponse.kt | 0 .../studyroom/model/FetchSeatTypesResponse.kt | 0 .../FetchStudyRoomApplicationTimeResponse.kt | 0 .../model/FetchStudyRoomDetailsResponse.kt | 0 .../model/FetchStudyRoomsResponse.kt | 0 .../user/apiservice/UserApiService.kt | 0 .../user/datasource/NetworkUserDataSource.kt | 0 .../datasource/NetworkUserDataSourceImpl.kt | 0 .../user/di/ApiServiceModule.kt | 0 .../user/di/DataSourceModule.kt | 0 .../exception/PasswordMismatchException.kt | 0 .../user/model/EditPasswordRequest.kt | 0 .../voting/apiservice/VotingApiService.kt | 0 .../datasource/NetworkVotingDataSource.kt | 0 .../datasource/NetworkVotingDataSourceImpl.kt | 0 .../voting/di/ApiServiceModule.kt | 0 .../voting/di/DataSourceModule.kt | 0 .../model/FetchAllVoteSearchResponse.kt | 0 .../model/FetchCheckVotingItemResponse.kt | 0 .../FetchModelStudentCandidatesResponse.kt | 0 121 files changed, 88 insertions(+) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/apiservice/MealApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/datasource/NetworkMealDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/datasource/NetworkMealDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => dev/kotlin/team.aliens.dms.android.network}/meal/model/FetchMealsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/apiservice/AuthApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/datasource/NetworkAuthDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/datasource/NetworkAuthDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/model/CheckIdExistsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/model/SendEmailVerificationCodeRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/model/SignInRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/auth/model/SignInResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/apiservice/FileApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/datasource/NetworkFileDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/datasource/NetworkFileDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/model/FetchPresignedUrlResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/file/model/UploadFileResponse.kt (100%) create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt create mode 100644 network/src/prod/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/apiservice/NoticeApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/datasource/NetworkNoticeDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/datasource/NetworkNoticeDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/model/FetchNoticeDetailsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/model/FetchNoticesResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notice/model/FetchWhetherNewNoticesExistResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/apiservice/NotificationApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/datasource/NetworkNotificationDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/datasource/NetworkNotificationDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/BatchUpdateNotificationTopicRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/FetchNotificationTopicStatusResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/FetchNotificationsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/NotificationTopicGroup.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/RegisterFcmDeviceTokenRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/SubscribeNotificationTopicRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/notification/model/UnsubscribeNotificationTopicRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/apiservice/OutingApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/datasource/OutingNetworkDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/datasource/OutingNetworkDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/ApplyOutingRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/ApplyOutingResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/FetchOutingApplicationDetailsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/FetchOutingTypesResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/outing/model/OutingAvailableTimeResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/apiservice/PointApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/datasource/NetworkPointDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/datasource/NetworkPointDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/point/model/FetchPointsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/apiservice/RemainsApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/datasource/NetworkRemainsDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/datasource/NetworkRemainsDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/model/FetchAppliedRemainsOptionResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/model/FetchRemainsApplicationTimeResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/remains/model/FetchRemainsOptionsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/apiservice/SchoolApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/datasource/NetworkSchoolDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/datasource/NetworkSchoolDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/model/ExamineSchoolVerificationCodeResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/model/FetchSchoolVerificationQuestionResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/school/model/FetchSchoolsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/apiservice/StudentApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/datasource/NetworkStudentDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/datasource/NetworkStudentDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/EditProfileRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/ExamineStudentNumberResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/FetchMyPageResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/FetchStudentsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/FindIdResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/ResetPasswordRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/SignUpRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/student/model/SignUpResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/apiservice/StudyRoomApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/datasource/NetworkStudyRoomDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchAppliedStudyRoomResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchSeatTypesResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchStudyRoomDetailsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/studyroom/model/FetchStudyRoomsResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/apiservice/UserApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/datasource/NetworkUserDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/datasource/NetworkUserDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/exception/PasswordMismatchException.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/user/model/EditPasswordRequest.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/apiservice/VotingApiService.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/datasource/NetworkVotingDataSource.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/datasource/NetworkVotingDataSourceImpl.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/di/ApiServiceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/di/DataSourceModule.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/model/FetchAllVoteSearchResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/model/FetchCheckVotingItemResponse.kt (100%) rename network/src/{main/java/team/aliens/dms/android/network => prod/kotlin/team.aliens.dms.android.network}/voting/model/FetchModelStudentCandidatesResponse.kt (100%) diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/apiservice/MealApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/apiservice/MealApiService.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/datasource/NetworkMealDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/datasource/NetworkMealDataSource.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/datasource/NetworkMealDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/datasource/NetworkMealDataSourceImpl.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/di/ApiServiceModule.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/di/DataSourceModule.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/meal/model/FetchMealsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/meal/model/FetchMealsResponse.kt rename to network/src/dev/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/apiservice/AuthApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/apiservice/AuthApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/datasource/NetworkAuthDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/datasource/NetworkAuthDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/datasource/NetworkAuthDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/datasource/NetworkAuthDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/model/CheckIdExistsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/model/CheckIdExistsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/model/SendEmailVerificationCodeRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/model/SendEmailVerificationCodeRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/model/SignInRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/model/SignInRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/model/SignInResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/auth/model/SignInResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/apiservice/FileApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/apiservice/FileApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/datasource/NetworkFileDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/datasource/NetworkFileDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/datasource/NetworkFileDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/datasource/NetworkFileDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/model/FetchPresignedUrlResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/model/FetchPresignedUrlResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/file/model/UploadFileResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/file/model/UploadFileResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt new file mode 100644 index 000000000..aeb2f741c --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/apiservice/MealApiService.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.meal.apiservice + +import java.time.LocalDate +import retrofit2.http.GET +import retrofit2.http.Path +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.meal.model.FetchMealsResponse + +internal interface MealApiService { + + @GET("/meals/{date}") + @RequiresAccessToken + suspend fun fetchMeals(@Path("date") date: LocalDate): FetchMealsResponse +} diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt new file mode 100644 index 000000000..0e068c1af --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSource.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.meal.datasource + +import java.time.LocalDate +import team.aliens.dms.android.network.meal.model.FetchMealsResponse + +abstract class NetworkMealDataSource { + abstract suspend fun fetchMeals(date: LocalDate): FetchMealsResponse +} diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt new file mode 100644 index 000000000..5394c00c8 --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/datasource/NetworkMealDataSourceImpl.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.meal.datasource + +import java.time.LocalDate +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.meal.apiservice.MealApiService +import team.aliens.dms.android.network.meal.model.FetchMealsResponse +import javax.inject.Inject + +internal class NetworkMealDataSourceImpl @Inject constructor( + private val mealApiService: MealApiService, +) : NetworkMealDataSource() { + override suspend fun fetchMeals(date: LocalDate): FetchMealsResponse = + handleNetworkRequest { mealApiService.fetchMeals(date) } +} diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt new file mode 100644 index 000000000..86e81cae4 --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.meal.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.meal.apiservice.MealApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideMealApiService(@GlobalRetrofitClient retrofit: Retrofit): MealApiService = + retrofit.create(MealApiService::class.java) +} diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt new file mode 100644 index 000000000..d35c14332 --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.meal.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.meal.datasource.NetworkMealDataSource +import team.aliens.dms.android.network.meal.datasource.NetworkMealDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkMealDataSource(impl: NetworkMealDataSourceImpl): NetworkMealDataSource +} diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt new file mode 100644 index 000000000..9cdd0bcb8 --- /dev/null +++ b/network/src/prod/kotlin/team.aliens.dms.android.network/meal/model/FetchMealsResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.meal.model + +import com.google.gson.annotations.SerializedName + +data class FetchMealsResponse( + @SerializedName("meals") val meals: List, +) { + data class MealResponse( + @SerializedName("date") val date: String, + @SerializedName("breakfast") val breakfast: List, + @SerializedName("lunch") val lunch: List, + @SerializedName("dinner") val dinner: List, + ) +} diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/apiservice/NoticeApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/apiservice/NoticeApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/datasource/NetworkNoticeDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/datasource/NetworkNoticeDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/datasource/NetworkNoticeDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/datasource/NetworkNoticeDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/model/FetchNoticeDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/model/FetchNoticeDetailsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/model/FetchNoticesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/model/FetchNoticesResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notice/model/FetchWhetherNewNoticesExistResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notice/model/FetchWhetherNewNoticesExistResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/apiservice/NotificationApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/apiservice/NotificationApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/datasource/NetworkNotificationDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/datasource/NetworkNotificationDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/datasource/NetworkNotificationDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/datasource/NetworkNotificationDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/BatchUpdateNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/BatchUpdateNotificationTopicRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/FetchNotificationTopicStatusResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/FetchNotificationTopicStatusResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/FetchNotificationsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/FetchNotificationsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/NotificationTopicGroup.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/NotificationTopicGroup.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/RegisterFcmDeviceTokenRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/RegisterFcmDeviceTokenRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/SubscribeNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/SubscribeNotificationTopicRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/notification/model/UnsubscribeNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/notification/model/UnsubscribeNotificationTopicRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/apiservice/OutingApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/apiservice/OutingApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/datasource/OutingNetworkDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/datasource/OutingNetworkDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/datasource/OutingNetworkDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/datasource/OutingNetworkDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/ApplyOutingRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/ApplyOutingRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/ApplyOutingResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/ApplyOutingResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/FetchOutingApplicationDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/FetchOutingApplicationDetailsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/FetchOutingTypesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/FetchOutingTypesResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/outing/model/OutingAvailableTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/outing/model/OutingAvailableTimeResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/apiservice/PointApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/apiservice/PointApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/datasource/NetworkPointDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/datasource/NetworkPointDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/datasource/NetworkPointDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/datasource/NetworkPointDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/point/model/FetchPointsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/point/model/FetchPointsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/apiservice/RemainsApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/apiservice/RemainsApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/datasource/NetworkRemainsDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/datasource/NetworkRemainsDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/datasource/NetworkRemainsDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/datasource/NetworkRemainsDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/model/FetchAppliedRemainsOptionResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/model/FetchAppliedRemainsOptionResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/model/FetchRemainsApplicationTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/model/FetchRemainsApplicationTimeResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/remains/model/FetchRemainsOptionsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/remains/model/FetchRemainsOptionsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/apiservice/SchoolApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/apiservice/SchoolApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/datasource/NetworkSchoolDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/datasource/NetworkSchoolDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/datasource/NetworkSchoolDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/datasource/NetworkSchoolDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/model/ExamineSchoolVerificationCodeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/model/ExamineSchoolVerificationCodeResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/model/FetchSchoolVerificationQuestionResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/model/FetchSchoolVerificationQuestionResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/school/model/FetchSchoolsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/school/model/FetchSchoolsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/apiservice/StudentApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/apiservice/StudentApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/datasource/NetworkStudentDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/datasource/NetworkStudentDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/datasource/NetworkStudentDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/datasource/NetworkStudentDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/EditProfileRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/EditProfileRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/ExamineStudentNumberResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/ExamineStudentNumberResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/FetchMyPageResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/FetchMyPageResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/FetchStudentsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/FetchStudentsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/FindIdResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/FindIdResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/ResetPasswordRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/ResetPasswordRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/SignUpRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/SignUpRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/student/model/SignUpResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/student/model/SignUpResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/apiservice/StudyRoomApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/apiservice/StudyRoomApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/datasource/NetworkStudyRoomDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/datasource/NetworkStudyRoomDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchAppliedStudyRoomResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchAppliedStudyRoomResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchSeatTypesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchSeatTypesResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomDetailsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/studyroom/model/FetchStudyRoomsResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/apiservice/UserApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/apiservice/UserApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/datasource/NetworkUserDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/datasource/NetworkUserDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/datasource/NetworkUserDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/datasource/NetworkUserDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/exception/PasswordMismatchException.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/exception/PasswordMismatchException.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/user/model/EditPasswordRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/user/model/EditPasswordRequest.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/apiservice/VotingApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/apiservice/VotingApiService.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/datasource/NetworkVotingDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/datasource/NetworkVotingDataSource.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/datasource/NetworkVotingDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/datasource/NetworkVotingDataSourceImpl.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/di/ApiServiceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/di/DataSourceModule.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/model/FetchAllVoteSearchResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/model/FetchAllVoteSearchResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/model/FetchCheckVotingItemResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/model/FetchCheckVotingItemResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt diff --git a/network/src/main/java/team/aliens/dms/android/network/voting/model/FetchModelStudentCandidatesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt similarity index 100% rename from network/src/main/java/team/aliens/dms/android/network/voting/model/FetchModelStudentCandidatesResponse.kt rename to network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt From 4a37500a28516efd95a4121c675da69b3b12f64a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 11:16:02 +0900 Subject: [PATCH 05/11] =?UTF-8?q?refactor=20::=20core:data=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=ED=94=8C=EB=9E=98=EC=9D=B4=EB=B2=84=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../meal/di/RepositoryModule.kt | 0 .../meal/exception/CannotFindMealException.kt | 0 .../meal/exception/MealException.kt | 0 .../meal/mapper/MealMapper.kt | 0 .../meal/model/Meal.kt | 0 .../meal/repository/MealRepository.kt | 0 .../meal/repository/MealRepositoryImpl.kt | 0 .../team/aliens/dms/android/data/.gitkeep | 0 .../android/data/auth/di/RepositoryModule.kt | 0 .../data/auth/exception/AuthException.kt | 0 .../auth/exception/BadRequestException.kt | 0 .../exception/PasswordMismatchException.kt | 0 .../auth/exception/UserNotFoundException.kt | 0 .../android/data/auth/mapper/AuthMapper.kt | 0 .../data/auth/model/EmailVerificationType.kt | 0 .../android/data/auth/model/HashedEmail.kt | 0 .../data/auth/repository/AuthRepository.kt | 0 .../auth/repository/AuthRepositoryImpl.kt | 0 .../android/data/file/di/RepositoryModule.kt | 0 .../android/data/file/mapper/FileMapper.kt | 0 .../dms/android/data/file/model/FileUrl.kt | 0 .../data/file/model/PresignedFileUrl.kt | 0 .../data/file/repository/FileRepository.kt | 0 .../file/repository/FileRepositoryImpl.kt | 0 .../android/data/meal/di/RepositoryModule.kt | 17 ++++++++ .../meal/exception/CannotFindMealException.kt | 3 ++ .../data/meal/exception/MealException.kt | 3 ++ .../android/data/meal/mapper/MealMapper.kt | 43 +++++++++++++++++++ .../dms/android/data/meal/model/Meal.kt | 14 ++++++ .../data/meal/repository/MealRepository.kt | 11 +++++ .../meal/repository/MealRepositoryImpl.kt | 27 ++++++++++++ .../data/notice/di/RepositoryModule.kt | 0 .../data/notice/mapper/NoticeMapper.kt | 0 .../dms/android/data/notice/model/Notice.kt | 0 .../notice/repository/NoticeRepository.kt | 0 .../notice/repository/NoticeRepositoryImpl.kt | 0 .../data/notification/di/RepositoryModule.kt | 0 .../data/notification/model/Notification.kt | 0 .../notification/model/NotificationTopic.kt | 0 .../model/NotificationTopicGroup.kt | 0 .../repository/NotificationRepository.kt | 0 .../repository/NotificationRepositoryImpl.kt | 0 .../data/outing/di/RepositoryModule.kt | 0 .../model/CurrentAppliedOutingApplication.kt | 0 .../data/outing/model/OutingApplicationId.kt | 0 .../outing/model/OutingApplicationTime.kt | 0 .../outing/repository/OutingRepository.kt | 0 .../outing/repository/OutingRepositoryImpl.kt | 0 .../android/data/point/di/RepositoryModule.kt | 0 .../android/data/point/mapper/PointMapper.kt | 0 .../dms/android/data/point/model/Point.kt | 0 .../android/data/point/model/PointStatus.kt | 0 .../dms/android/data/point/model/PointType.kt | 0 .../data/point/repository/PointRepository.kt | 0 .../point/repository/PointRepositoryImpl.kt | 0 .../data/remains/di/RepositoryModule.kt | 0 .../data/remains/mapper/RemainsMapper.kt | 0 .../remains/model/AppliedRemainsOption.kt | 0 .../remains/model/RemainsApplicationTime.kt | 0 .../data/remains/model/RemainsOption.kt | 0 .../remains/repository/RemainsRepository.kt | 0 .../repository/RemainsRepositoryImpl.kt | 0 .../data/school/di/RepositoryModule.kt | 0 .../data/school/mapper/SchoolMapper.kt | 0 .../dms/android/data/school/model/School.kt | 0 .../dms/android/data/school/model/SchoolId.kt | 0 .../model/SchoolVerificationQuestion.kt | 0 .../school/repository/SchoolRepository.kt | 0 .../school/repository/SchoolRepositoryImpl.kt | 0 .../data/student/di/RepositoryModule.kt | 0 .../data/student/mapper/StudentMapper.kt | 0 .../android/data/student/model/HashedEmail.kt | 0 .../dms/android/data/student/model/MyPage.kt | 0 .../dms/android/data/student/model/Student.kt | 0 .../android/data/student/model/StudentName.kt | 0 .../student/repository/StudentRepository.kt | 0 .../repository/StudentRepositoryImpl.kt | 0 .../data/studyroom/di/RepositoryModule.kt | 0 .../data/studyroom/mapper/StudyRoomMapper.kt | 0 .../data/studyroom/model/AppliedStudyRoom.kt | 0 .../studyroom/model/AvailableStudyRoomTime.kt | 0 .../android/data/studyroom/model/StudyRoom.kt | 0 .../model/StudyRoomApplicationTime.kt | 0 .../repository/StudyRoomRepository.kt | 0 .../repository/StudyRoomRepositoryImpl.kt | 0 .../android/data/user/di/RepositoryModule.kt | 0 .../data/user/repository/UserRepository.kt | 0 .../user/repository/UserRepositoryImpl.kt | 0 .../data/voting/di/RepositoryModule.kt | 0 .../data/voting/mapper/VotingMapper.kt | 0 .../data/voting/model/AllVoteSearch.kt | 0 .../voting/model/ModelStudentCandidates.kt | 0 .../data/voting/model/StudentGcnInfo.kt | 0 .../dms/android/data/voting/model/Vote.kt | 0 .../android/data/voting/model/VotingItem.kt | 0 .../voting/repository/VotingRepository.kt | 0 .../voting/repository/VotingRepositoryImpl.kt | 0 97 files changed, 118 insertions(+) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/di/RepositoryModule.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/exception/CannotFindMealException.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/exception/MealException.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/mapper/MealMapper.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/model/Meal.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/repository/MealRepository.kt (100%) rename data/src/{main/java/team/aliens/dms/android/data => dev/kotlin/team.aliens.dms.android.data}/meal/repository/MealRepositoryImpl.kt (100%) delete mode 100644 data/src/main/java/team/aliens/dms/android/data/.gitkeep rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/exception/AuthException.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/exception/BadRequestException.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/model/HashedEmail.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/repository/AuthRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/auth/repository/AuthRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/mapper/FileMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/model/FileUrl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/model/PresignedFileUrl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/repository/FileRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/file/repository/FileRepositoryImpl.kt (100%) create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/di/RepositoryModule.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/MealException.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/mapper/MealMapper.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/model/Meal.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt create mode 100644 data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notice/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notice/mapper/NoticeMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notice/model/Notice.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notice/repository/NoticeRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notice/repository/NoticeRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/model/Notification.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/model/NotificationTopic.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/model/CurrentAppliedOutingApplication.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/model/OutingApplicationId.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/model/OutingApplicationTime.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/repository/OutingRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/outing/repository/OutingRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/mapper/PointMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/model/Point.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/model/PointStatus.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/model/PointType.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/repository/PointRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/point/repository/PointRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/mapper/RemainsMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/model/AppliedRemainsOption.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/model/RemainsApplicationTime.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/model/RemainsOption.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/repository/RemainsRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/remains/repository/RemainsRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/mapper/SchoolMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/model/School.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/model/SchoolId.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/model/SchoolVerificationQuestion.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/repository/SchoolRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/school/repository/SchoolRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/mapper/StudentMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/model/HashedEmail.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/model/MyPage.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/model/Student.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/model/StudentName.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/repository/StudentRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/student/repository/StudentRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/mapper/StudyRoomMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/model/AppliedStudyRoom.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/model/AvailableStudyRoomTime.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/model/StudyRoom.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/model/StudyRoomApplicationTime.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/user/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/user/repository/UserRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/user/repository/UserRepositoryImpl.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/di/RepositoryModule.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/mapper/VotingMapper.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/model/AllVoteSearch.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/model/ModelStudentCandidates.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/model/StudentGcnInfo.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/model/Vote.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/model/VotingItem.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/repository/VotingRepository.kt (100%) rename data/src/{main/java => prod/kotlin}/team/aliens/dms/android/data/voting/repository/VotingRepositoryImpl.kt (100%) diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/di/RepositoryModule.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/exception/CannotFindMealException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/exception/CannotFindMealException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/exception/MealException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/exception/MealException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/exception/MealException.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/exception/MealException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/mapper/MealMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/mapper/MealMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/mapper/MealMapper.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/mapper/MealMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/model/Meal.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/model/Meal.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/model/Meal.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/model/Meal.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/repository/MealRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/repository/MealRepository.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/.gitkeep b/data/src/main/java/team/aliens/dms/android/data/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/exception/AuthException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/AuthException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/exception/AuthException.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/AuthException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/exception/BadRequestException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/BadRequestException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/exception/BadRequestException.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/BadRequestException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/model/HashedEmail.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/HashedEmail.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/model/HashedEmail.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/HashedEmail.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/repository/AuthRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/repository/AuthRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/repository/AuthRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/repository/AuthRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/auth/repository/AuthRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/repository/AuthRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/auth/repository/AuthRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/auth/repository/AuthRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/mapper/FileMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/mapper/FileMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/mapper/FileMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/mapper/FileMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/model/FileUrl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/model/FileUrl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/model/FileUrl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/model/FileUrl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/model/PresignedFileUrl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/model/PresignedFileUrl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/model/PresignedFileUrl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/model/PresignedFileUrl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/repository/FileRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/repository/FileRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/repository/FileRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/repository/FileRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/file/repository/FileRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/file/repository/FileRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/file/repository/FileRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/file/repository/FileRepositoryImpl.kt diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/di/RepositoryModule.kt new file mode 100644 index 000000000..e7684ebb3 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/di/RepositoryModule.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.data.meal.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import team.aliens.dms.android.data.meal.repository.MealRepository +import team.aliens.dms.android.data.meal.repository.MealRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(dagger.hilt.components.SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindMealRepository(impl: MealRepositoryImpl): MealRepository +} diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt new file mode 100644 index 000000000..8daf59f84 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/CannotFindMealException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.meal.exception + +class CannotFindMealException : MealException("Cannot find meal") diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/MealException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/MealException.kt new file mode 100644 index 000000000..d0458b5b6 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/exception/MealException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.meal.exception + +sealed class MealException(message: String?) : RuntimeException(message) diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/mapper/MealMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/mapper/MealMapper.kt new file mode 100644 index 000000000..4d8e921e2 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/mapper/MealMapper.kt @@ -0,0 +1,43 @@ +package team.aliens.dms.android.data.meal.mapper + +import team.aliens.dms.android.core.database.entity.MealEntity +import team.aliens.dms.android.data.meal.model.Meal +import team.aliens.dms.android.network.meal.model.FetchMealsResponse +import team.aliens.dms.android.shared.date.toLocalDate + +internal fun MealEntity.toModel() = Meal( + date = this.date, + breakfast = this.breakfast, + kcalOfBreakfast = this.kcalOfBreakfast, + lunch = this.lunch, + kcalOfLunch = this.kcalOfLunch, + dinner = this.dinner, + kcalOfDinner = this.kcalOfDinner, +) + +internal fun List.toEntity() = this.map(Meal::toEntity) + +private fun Meal.toEntity() = MealEntity( + date = this.date, + breakfast = this.breakfast, + kcalOfBreakfast = this.kcalOfBreakfast, + lunch = this.lunch, + kcalOfLunch = this.kcalOfLunch, + dinner = this.dinner, + kcalOfDinner = this.kcalOfDinner, +) + +internal fun FetchMealsResponse.toModel(): List = this.meals.toModel() + +private fun List.toModel(): List = + this.map(FetchMealsResponse.MealResponse::toModel) + +private fun FetchMealsResponse.MealResponse.toModel(): Meal = Meal( + date = this.date.toLocalDate(), + breakfast = this.breakfast.dropLast(1), + kcalOfBreakfast = this.breakfast.last(), + lunch = this.lunch.dropLast(1), + kcalOfLunch = this.lunch.last(), + dinner = this.dinner.dropLast(1), + kcalOfDinner = this.dinner.last(), +) diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/model/Meal.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/model/Meal.kt new file mode 100644 index 000000000..dc74767c7 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/model/Meal.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.data.meal.model + +import java.time.LocalDate +import team.aliens.dms.android.shared.date.util.today + +data class Meal( + val date: LocalDate = today, + val breakfast: List = emptyList(), + val kcalOfBreakfast: String? = null, + val lunch: List = emptyList(), + val kcalOfLunch: String? = null, + val dinner: List = emptyList(), + val kcalOfDinner: String? = null, +) diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt new file mode 100644 index 000000000..baa6bdec4 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.data.meal.repository + +import java.time.LocalDate +import team.aliens.dms.android.data.meal.model.Meal + +abstract class MealRepository { + + abstract suspend fun fetchMeal(date: LocalDate): Result + + abstract suspend fun updateMeal(date: LocalDate): Result +} diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt new file mode 100644 index 000000000..930bb3e3d --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt @@ -0,0 +1,27 @@ +package team.aliens.dms.android.data.meal.repository + +import java.time.LocalDate +import team.aliens.dms.android.data.meal.exception.CannotFindMealException +import team.aliens.dms.android.data.meal.mapper.toEntity +import team.aliens.dms.android.data.meal.mapper.toModel +import team.aliens.dms.android.data.meal.model.Meal +import team.aliens.dms.android.database.meal.datasource.DatabaseMealDataSource +import team.aliens.dms.android.network.meal.datasource.NetworkMealDataSource +import javax.inject.Inject + +internal class MealRepositoryImpl @Inject constructor( + private val databaseMealDataSource: DatabaseMealDataSource, + private val networkMealDataSource: NetworkMealDataSource, +) : MealRepository() { + override suspend fun fetchMeal(date: LocalDate): Result = runCatching { + databaseMealDataSource.queryMeal(date).toModel() + }.recoverCatching { + updateMeal(date = date).getOrElse { throw CannotFindMealException() } + } + + override suspend fun updateMeal(date: LocalDate): Result = runCatching { + networkMealDataSource.fetchMeals(date).toModel().also { meals -> + databaseMealDataSource.saveMeals(meals.toEntity()) + }.find { it.date == date }!! + } +} diff --git a/data/src/main/java/team/aliens/dms/android/data/notice/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notice/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notice/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notice/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notice/mapper/NoticeMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notice/mapper/NoticeMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notice/mapper/NoticeMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notice/mapper/NoticeMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notice/model/Notice.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notice/model/Notice.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notice/model/Notice.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notice/model/Notice.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notice/repository/NoticeRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notice/repository/NoticeRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notice/repository/NoticeRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notice/repository/NoticeRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notice/repository/NoticeRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notice/repository/NoticeRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notice/repository/NoticeRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notice/repository/NoticeRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/model/Notification.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/Notification.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/model/Notification.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/Notification.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/model/NotificationTopic.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopic.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/model/NotificationTopic.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopic.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/model/CurrentAppliedOutingApplication.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/CurrentAppliedOutingApplication.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/model/CurrentAppliedOutingApplication.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/CurrentAppliedOutingApplication.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/model/OutingApplicationId.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/OutingApplicationId.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/model/OutingApplicationId.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/OutingApplicationId.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/model/OutingApplicationTime.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/OutingApplicationTime.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/model/OutingApplicationTime.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/model/OutingApplicationTime.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/repository/OutingRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/repository/OutingRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/repository/OutingRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/repository/OutingRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/outing/repository/OutingRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/outing/repository/OutingRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/outing/repository/OutingRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/outing/repository/OutingRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/mapper/PointMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/mapper/PointMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/mapper/PointMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/mapper/PointMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/model/Point.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/Point.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/model/Point.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/model/Point.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/model/PointStatus.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointStatus.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/model/PointStatus.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointStatus.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/model/PointType.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointType.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/model/PointType.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointType.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/repository/PointRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/repository/PointRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/repository/PointRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/repository/PointRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/point/repository/PointRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/repository/PointRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/point/repository/PointRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/point/repository/PointRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/mapper/RemainsMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/mapper/RemainsMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/mapper/RemainsMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/mapper/RemainsMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/model/AppliedRemainsOption.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/AppliedRemainsOption.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/model/AppliedRemainsOption.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/AppliedRemainsOption.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/model/RemainsApplicationTime.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/RemainsApplicationTime.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/model/RemainsApplicationTime.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/RemainsApplicationTime.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/model/RemainsOption.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/RemainsOption.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/model/RemainsOption.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/model/RemainsOption.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/repository/RemainsRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/repository/RemainsRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/repository/RemainsRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/repository/RemainsRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/remains/repository/RemainsRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/remains/repository/RemainsRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/remains/repository/RemainsRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/remains/repository/RemainsRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/mapper/SchoolMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/mapper/SchoolMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/mapper/SchoolMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/mapper/SchoolMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/model/School.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/model/School.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/model/School.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/model/School.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/model/SchoolId.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/model/SchoolId.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/model/SchoolId.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/model/SchoolId.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/model/SchoolVerificationQuestion.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/model/SchoolVerificationQuestion.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/model/SchoolVerificationQuestion.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/model/SchoolVerificationQuestion.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/repository/SchoolRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/repository/SchoolRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/repository/SchoolRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/repository/SchoolRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/school/repository/SchoolRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/school/repository/SchoolRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/school/repository/SchoolRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/school/repository/SchoolRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/mapper/StudentMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/mapper/StudentMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/mapper/StudentMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/mapper/StudentMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/model/HashedEmail.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/HashedEmail.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/model/HashedEmail.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/model/HashedEmail.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/model/MyPage.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/MyPage.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/model/MyPage.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/model/MyPage.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/model/Student.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/Student.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/model/Student.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/model/Student.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/model/StudentName.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/StudentName.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/model/StudentName.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/model/StudentName.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/repository/StudentRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/repository/StudentRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/repository/StudentRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/repository/StudentRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/student/repository/StudentRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/repository/StudentRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/student/repository/StudentRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/student/repository/StudentRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/mapper/StudyRoomMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/mapper/StudyRoomMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/mapper/StudyRoomMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/mapper/StudyRoomMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/model/AppliedStudyRoom.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/AppliedStudyRoom.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/model/AppliedStudyRoom.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/AppliedStudyRoom.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/model/AvailableStudyRoomTime.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/AvailableStudyRoomTime.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/model/AvailableStudyRoomTime.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/AvailableStudyRoomTime.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/model/StudyRoom.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/StudyRoom.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/model/StudyRoom.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/StudyRoom.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/model/StudyRoomApplicationTime.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/StudyRoomApplicationTime.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/model/StudyRoomApplicationTime.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/model/StudyRoomApplicationTime.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/studyroom/repository/StudyRoomRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/user/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/user/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/user/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/user/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/user/repository/UserRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/user/repository/UserRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/user/repository/UserRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/user/repository/UserRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/user/repository/UserRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/user/repository/UserRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/user/repository/UserRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/user/repository/UserRepositoryImpl.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/di/RepositoryModule.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/di/RepositoryModule.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/di/RepositoryModule.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/mapper/VotingMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/mapper/VotingMapper.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/mapper/VotingMapper.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/mapper/VotingMapper.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/model/AllVoteSearch.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/AllVoteSearch.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/model/AllVoteSearch.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/AllVoteSearch.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/model/ModelStudentCandidates.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/ModelStudentCandidates.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/model/ModelStudentCandidates.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/ModelStudentCandidates.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/model/StudentGcnInfo.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/StudentGcnInfo.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/model/StudentGcnInfo.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/StudentGcnInfo.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/model/Vote.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/Vote.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/model/Vote.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/Vote.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/model/VotingItem.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/VotingItem.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/model/VotingItem.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/model/VotingItem.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/repository/VotingRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/repository/VotingRepository.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/repository/VotingRepository.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/repository/VotingRepository.kt diff --git a/data/src/main/java/team/aliens/dms/android/data/voting/repository/VotingRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/voting/repository/VotingRepositoryImpl.kt similarity index 100% rename from data/src/main/java/team/aliens/dms/android/data/voting/repository/VotingRepositoryImpl.kt rename to data/src/prod/kotlin/team/aliens/dms/android/data/voting/repository/VotingRepositoryImpl.kt From 04a5513568d4d6f8c37c7cd927f418d44d8303fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 11:16:18 +0900 Subject: [PATCH 06/11] =?UTF-8?q?refactor=20::=20=EA=B8=B0=EC=A1=B4=20meal?= =?UTF-8?q?=20=EB=B0=98=ED=99=98=20=ED=98=95=EC=8B=9D=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dms/android/core/widget/MealWorker.kt | 2 +- .../data/meal/repository/MealRepository.kt | 4 ++-- .../data/meal/repository/MealRepositoryImpl.kt | 17 +++++++++++------ .../android/feature/main/home/HomeViewModel.kt | 8 ++++++-- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt index 652a9c685..65a86293c 100644 --- a/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt +++ b/core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealWorker.kt @@ -68,7 +68,7 @@ class MealWorker @AssistedInject constructor( try { val mealDate = if (now.hour >= 19) today.plusDays(1) else today - val response = mealRepository.fetchMeal(mealDate).getOrThrow() + val response = mealRepository.fetchMeal(mealDate) setWidgetState(glanceIds, response.toEntity()) } catch (e: Exception) { Result.failure() diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt index baa6bdec4..9504d1789 100644 --- a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepository.kt @@ -5,7 +5,7 @@ import team.aliens.dms.android.data.meal.model.Meal abstract class MealRepository { - abstract suspend fun fetchMeal(date: LocalDate): Result + abstract suspend fun fetchMeal(date: LocalDate): Meal - abstract suspend fun updateMeal(date: LocalDate): Result + abstract suspend fun updateMeal(date: LocalDate): Meal } diff --git a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt index 930bb3e3d..7b46c6181 100644 --- a/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt @@ -13,15 +13,20 @@ internal class MealRepositoryImpl @Inject constructor( private val databaseMealDataSource: DatabaseMealDataSource, private val networkMealDataSource: NetworkMealDataSource, ) : MealRepository() { - override suspend fun fetchMeal(date: LocalDate): Result = runCatching { + override suspend fun fetchMeal(date: LocalDate): Meal = try { databaseMealDataSource.queryMeal(date).toModel() - }.recoverCatching { - updateMeal(date = date).getOrElse { throw CannotFindMealException() } + } catch (_: Exception) { + try { + this.updateMeal(date = date) + } catch (_: Exception) { + throw CannotFindMealException() + } } - override suspend fun updateMeal(date: LocalDate): Result = runCatching { - networkMealDataSource.fetchMeals(date).toModel().also { meals -> + override suspend fun updateMeal(date: LocalDate): Meal { + return networkMealDataSource.fetchMeals(date).toModel().also { meals -> databaseMealDataSource.saveMeals(meals.toEntity()) - }.find { it.date == date }!! + } + .find { it.date == date }!! } } diff --git a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt index 43d769031..1223197da 100644 --- a/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt +++ b/feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt @@ -47,7 +47,9 @@ internal class HomeViewModel @Inject constructor( private fun updateDate(date: LocalDate) { viewModelScope.launch(Dispatchers.IO) { - mealRepository.fetchMeal(date).onSuccess { meal -> + runCatching { + mealRepository.fetchMeal(date) + }.onSuccess { meal -> reduce( newState = stateFlow.value.copy( selectedDate = date, @@ -66,7 +68,9 @@ internal class HomeViewModel @Inject constructor( viewModelScope.launch(Dispatchers.IO) { println("LOGLOG1") val capturedDate = stateFlow.value.selectedDate - mealRepository.updateMeal(capturedDate).onSuccess { meal -> + runCatching { + mealRepository.updateMeal(capturedDate) + }.onSuccess { meal -> reduce( newState = stateFlow.value.copy( selectedDate = capturedDate, From 5a566b57a30778285ad8e4565f7097f33448566b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 16:56:35 +0900 Subject: [PATCH 07/11] =?UTF-8?q?refactor=20::=20dev=20=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EB=B2=84=20network=20=EC=93=B0=EC=9D=B4=EB=8A=94=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/di/RepositoryModule.kt | 18 +++ .../auth/exception/AuthException.kt | 3 + .../auth/exception/BadRequestException.kt | 3 + .../exception/PasswordMismatchException.kt | 3 + .../auth/exception/UserNotFoundException.kt | 3 + .../auth/mapper/AuthMapper.kt | 27 ++++ .../auth/model/EmailVerificationType.kt | 6 + .../auth/model/HashedEmail.kt | 3 + .../auth/repository/AuthRepository.kt | 29 ++++ .../auth/repository/AuthRepositoryImpl.kt | 86 ++++++++++++ .../meal/repository/MealRepository.kt | 4 +- .../meal/repository/MealRepositoryImpl.kt | 17 ++- .../notification/di/RepositoryModule.kt | 18 +++ .../notification/model/Notification.kt | 29 ++++ .../notification/model/NotificationTopic.kt | 22 +++ .../model/NotificationTopicGroup.kt | 42 ++++++ .../repository/NotificationRepository.kt | 37 +++++ .../repository/NotificationRepositoryImpl.kt | 68 ++++++++++ .../student/di/RepositoryModule.kt | 18 +++ .../student/mapper/StudentMapper.kt | 16 +++ .../student/model/HashedEmail.kt | 3 + .../student/model/MyPage.kt | 14 ++ .../student/model/Student.kt | 21 +++ .../student/model/StudentName.kt | 3 + .../student/repository/StudentRepository.kt | 58 ++++++++ .../repository/StudentRepositoryImpl.kt | 127 ++++++++++++++++++ .../auth/apiservice/AuthApiService.kt | 29 ++++ .../auth/datasource/NetworkAuthDataSource.kt | 21 +++ .../datasource/NetworkAuthDataSourceImpl.kt | 28 ++++ .../auth/di/ApiServiceModule.kt | 20 +++ .../auth/di/DataSourceModule.kt | 18 +++ .../auth/model/CheckIdExistsResponse.kt | 7 + .../model/SendEmailVerificationCodeRequest.kt | 8 ++ .../auth/model/SignInRequest.kt | 9 ++ .../auth/model/SignInResponse.kt | 19 +++ .../apiservice/NotificationApiService.kt | 52 +++++++ .../NetworkNotificationDataSource.kt | 26 ++++ .../NetworkNotificationDataSourceImpl.kt | 37 +++++ .../notification/di/ApiServiceModule.kt | 21 +++ .../notification/di/DataSourceModule.kt | 18 +++ .../BatchUpdateNotificationTopicRequest.kt | 12 ++ ...CancelFcmDeviceTokenRegistrationRequest.kt | 7 + .../FetchNotificationTopicStatusResponse.kt | 18 +++ .../model/FetchNotificationsResponse.kt | 18 +++ .../model/NotificationTopicGroup.kt | 6 + .../model/RegisterFcmDeviceTokenRequest.kt | 7 + .../SubscribeNotificationTopicRequest.kt | 8 ++ .../UnsubscribeNotificationTopicRequest.kt | 8 ++ .../student/di/RepositoryModule.kt | 18 +++ .../student/mapper/StudentMapper.kt | 16 +++ .../student/model/HashedEmail.kt | 3 + .../student/model/MyPage.kt | 14 ++ .../student/model/Student.kt | 21 +++ .../student/model/StudentName.kt | 3 + .../student/repository/StudentRepository.kt | 58 ++++++++ .../repository/StudentRepositoryImpl.kt | 127 ++++++++++++++++++ 56 files changed, 1327 insertions(+), 8 deletions(-) create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/AuthException.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/BadRequestException.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/PasswordMismatchException.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/UserNotFoundException.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/mapper/AuthMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/EmailVerificationType.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/HashedEmail.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/Notification.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopic.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopicGroup.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/mapper/StudentMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/model/HashedEmail.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/model/MyPage.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/model/Student.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/model/StudentName.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/di/RepositoryModule.kt new file mode 100644 index 000000000..233f8f350 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.auth.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.auth.repository.AuthRepository +import team.aliens.dms.android.data.auth.repository.AuthRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindAuthRepository(impl: AuthRepositoryImpl): AuthRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/AuthException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/AuthException.kt new file mode 100644 index 000000000..dddeb40ba --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/AuthException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.auth.exception + +sealed class AuthException(message: String?) : RuntimeException(message) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/BadRequestException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/BadRequestException.kt new file mode 100644 index 000000000..981b71a2f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/BadRequestException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.auth.exception + +class BadRequestException : AuthException("Bad request") diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/PasswordMismatchException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/PasswordMismatchException.kt new file mode 100644 index 000000000..1479d7a5d --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/PasswordMismatchException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.auth.exception + +class PasswordMismatchException : AuthException("Password mismatch") diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/UserNotFoundException.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/UserNotFoundException.kt new file mode 100644 index 000000000..fa3f24e73 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/exception/UserNotFoundException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.auth.exception + +class UserNotFoundException : AuthException("User not found") diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/mapper/AuthMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/mapper/AuthMapper.kt new file mode 100644 index 000000000..07fd3f585 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/mapper/AuthMapper.kt @@ -0,0 +1,27 @@ +package team.aliens.dms.android.data.auth.mapper + +import team.aliens.dms.android.core.jwt.AccessToken +import team.aliens.dms.android.core.jwt.RefreshToken +import team.aliens.dms.android.core.jwt.Tokens +import team.aliens.dms.android.core.school.Features +import team.aliens.dms.android.network.auth.model.SignInResponse +import team.aliens.dms.android.shared.date.toLocalDateTime + +internal fun SignInResponse.extractTokens(): Tokens = Tokens( + accessToken = AccessToken( + value = this.accessToken, + expiration = this.accessTokenExpiration.toLocalDateTime(), + ), + refreshToken = RefreshToken( + value = this.refreshToken, + expiration = this.refreshTokenExpiration.toLocalDateTime(), + ), +) + +internal fun SignInResponse.extractFeatures(): Features = Features( + mealService = this.features.mealService, + noticeService = this.features.noticeService, + pointService = this.features.pointService, + studyRoomService = this.features.studyRoomService, + remainsService = this.features.remainsService, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/EmailVerificationType.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/EmailVerificationType.kt new file mode 100644 index 000000000..fcd5b758d --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/EmailVerificationType.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.auth.model + +enum class EmailVerificationType { + SIGNUP, PASSWORD, + ; +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/HashedEmail.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/HashedEmail.kt new file mode 100644 index 000000000..e88ecdfa4 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/model/HashedEmail.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.auth.model + +typealias HashedEmail = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt new file mode 100644 index 000000000..d1ab33a8d --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt @@ -0,0 +1,29 @@ +package team.aliens.dms.android.data.auth.repository + +import team.aliens.dms.android.data.auth.model.EmailVerificationType +import team.aliens.dms.android.data.auth.model.HashedEmail + +abstract class AuthRepository { + + abstract suspend fun signIn( + accountId: String, + password: String, + deviceToken: String, + autoSignIn: Boolean = true, + ) + + abstract suspend fun sendEmailVerificationCode( + email: String, + type: EmailVerificationType, + ) + + abstract suspend fun checkEmailVerificationCode( + email: String, + code: String, + type: EmailVerificationType, + ) + + abstract suspend fun checkIdExists(accountId: String): HashedEmail + + abstract suspend fun signOut() +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt new file mode 100644 index 000000000..5d21cb328 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt @@ -0,0 +1,86 @@ +package team.aliens.dms.android.data.auth.repository + +import team.aliens.dms.android.core.jwt.JwtProvider +import team.aliens.dms.android.core.network.util.statusMapping +import team.aliens.dms.android.core.school.SchoolProvider +import team.aliens.dms.android.data.auth.exception.BadRequestException +import team.aliens.dms.android.data.auth.exception.PasswordMismatchException +import team.aliens.dms.android.data.auth.exception.UserNotFoundException +import team.aliens.dms.android.data.auth.mapper.extractFeatures +import team.aliens.dms.android.data.auth.mapper.extractTokens +import team.aliens.dms.android.data.auth.model.EmailVerificationType +import team.aliens.dms.android.data.auth.model.HashedEmail +import team.aliens.dms.android.network.auth.datasource.NetworkAuthDataSource +import team.aliens.dms.android.network.auth.model.SendEmailVerificationCodeRequest +import team.aliens.dms.android.network.auth.model.SignInRequest +import javax.inject.Inject + +internal class AuthRepositoryImpl @Inject constructor( + private val networkAuthDataSource: NetworkAuthDataSource, + private val jwtProvider: JwtProvider, + private val schoolProvider: SchoolProvider, +) : AuthRepository() { + + override suspend fun signIn( + accountId: String, + password: String, + deviceToken: String, + autoSignIn: Boolean, + ) { + val signInResponse = statusMapping( + onBadRequest = { throw BadRequestException() }, + onUnauthorized = { throw PasswordMismatchException() }, + onNotFound = { throw UserNotFoundException() }, + ) { + networkAuthDataSource.signIn( + request = SignInRequest( + accountId = accountId, + password = password, + deviceToken = deviceToken, + ), + ) + } + + // FIXME: 만약 자동 로그인을 하지 않은 상태에서 토큰 재발급은 어떻게 처리하는가? + if (autoSignIn) { + val tokens = signInResponse.extractTokens() + val features = signInResponse.extractFeatures() + jwtProvider.updateTokens(tokens) + schoolProvider.updateFeatures(features) + } + } + + override suspend fun sendEmailVerificationCode( + email: String, + type: EmailVerificationType, + ) { + networkAuthDataSource.sendEmailVerificationCode( + request = SendEmailVerificationCodeRequest( + email = email, + type = type.name, + ), + ) + } + + override suspend fun checkEmailVerificationCode( + email: String, + code: String, + type: EmailVerificationType, + ) { + networkAuthDataSource.checkEmailVerificationCode( + email = email, + code = code, + type = type.name, + ) + } + + override suspend fun checkIdExists(accountId: String): HashedEmail = + networkAuthDataSource.checkIdExists( + accountId = accountId, + ).email + + override suspend fun signOut() { + jwtProvider.clearCaches() + schoolProvider.clearCaches() + } +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt index baa6bdec4..9504d1789 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt @@ -5,7 +5,7 @@ import team.aliens.dms.android.data.meal.model.Meal abstract class MealRepository { - abstract suspend fun fetchMeal(date: LocalDate): Result + abstract suspend fun fetchMeal(date: LocalDate): Meal - abstract suspend fun updateMeal(date: LocalDate): Result + abstract suspend fun updateMeal(date: LocalDate): Meal } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt index 930bb3e3d..7b46c6181 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt @@ -13,15 +13,20 @@ internal class MealRepositoryImpl @Inject constructor( private val databaseMealDataSource: DatabaseMealDataSource, private val networkMealDataSource: NetworkMealDataSource, ) : MealRepository() { - override suspend fun fetchMeal(date: LocalDate): Result = runCatching { + override suspend fun fetchMeal(date: LocalDate): Meal = try { databaseMealDataSource.queryMeal(date).toModel() - }.recoverCatching { - updateMeal(date = date).getOrElse { throw CannotFindMealException() } + } catch (_: Exception) { + try { + this.updateMeal(date = date) + } catch (_: Exception) { + throw CannotFindMealException() + } } - override suspend fun updateMeal(date: LocalDate): Result = runCatching { - networkMealDataSource.fetchMeals(date).toModel().also { meals -> + override suspend fun updateMeal(date: LocalDate): Meal { + return networkMealDataSource.fetchMeals(date).toModel().also { meals -> databaseMealDataSource.saveMeals(meals.toEntity()) - }.find { it.date == date }!! + } + .find { it.date == date }!! } } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/di/RepositoryModule.kt new file mode 100644 index 000000000..941558dd0 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.notification.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.notification.repository.NotificationRepository +import team.aliens.dms.android.data.notification.repository.NotificationRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindNotificationRepository(impl: NotificationRepositoryImpl): NotificationRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/Notification.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/Notification.kt new file mode 100644 index 000000000..3149c6b37 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/Notification.kt @@ -0,0 +1,29 @@ +package team.aliens.dms.android.data.notification.model + +import java.time.LocalDateTime +import team.aliens.dms.android.network.notification.model.FetchNotificationsResponse +import team.aliens.dms.android.shared.date.toLocalDateTime +import java.util.UUID + +data class Notification( + val id: UUID, + val topic: NotificationTopic, + val linkId: UUID, + val title: String, + val content: String, + val createdAt: LocalDateTime, + val isRead: Boolean, +) + +fun FetchNotificationsResponse.toModel(): List = + this.notifications.map(FetchNotificationsResponse.NotificationResponse::toModel) + +private fun FetchNotificationsResponse.NotificationResponse.toModel(): Notification = Notification( + id = this.id, + topic = NotificationTopic.valueOf(this.topic), + linkId = this.linkId, + title = this.title, + content = this.content, + createdAt = this.createdAt.toLocalDateTime(), + isRead = this.isRead, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopic.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopic.kt new file mode 100644 index 000000000..d7fe9a9ec --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopic.kt @@ -0,0 +1,22 @@ +package team.aliens.dms.android.data.notification.model + +import team.aliens.dms.android.network.notification.model.BatchUpdateNotificationTopicRequest + +enum class NotificationTopic { + NOTICE, STUDY_ROOM_TIME_SLOT, STUDY_ROOM_APPLY, POINT, OUTING, + ; + + data class Subscription( + val topic: NotificationTopic, + val subscribe: Boolean, + ) +} + +fun List.toModel(): List = + this.map(NotificationTopic.Subscription::toModel) + +private fun NotificationTopic.Subscription.toModel(): BatchUpdateNotificationTopicRequest.NotificationTopicRequest = + BatchUpdateNotificationTopicRequest.NotificationTopicRequest( + topic = this.topic.name, + subscribed = this.subscribe, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopicGroup.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopicGroup.kt new file mode 100644 index 000000000..02486a0cf --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopicGroup.kt @@ -0,0 +1,42 @@ +package team.aliens.dms.android.data.notification.model + +import team.aliens.dms.android.network.notification.model.FetchNotificationTopicStatusResponse + +enum class NotificationTopicGroup { + NOTICE, STUDY_ROOM, POINT, OUTING, + ; + + data class Status( + val topicGroup: NotificationTopicGroup, + val groupName: String, + val topicSubscriptions: List, + ) { + data class TopicSubscription( + val topic: NotificationTopic, + val subscribed: Boolean, + ) + } +} + +fun FetchNotificationTopicStatusResponse.toModel(): List = + this.topicGroups.toModel() + +@JvmName("ListTopicGroupResponse") +private fun List.toModel(): List = + this.map(FetchNotificationTopicStatusResponse.TopicGroupResponse::toModel) + +private fun FetchNotificationTopicStatusResponse.TopicGroupResponse.toModel(): NotificationTopicGroup.Status = + NotificationTopicGroup.Status( + topicGroup = NotificationTopicGroup.valueOf(this.topicGroup), + groupName = this.groupName, + topicSubscriptions = this.topicSubscriptions.toModel(), + ) + +private fun List.toModel(): List = + this.map(FetchNotificationTopicStatusResponse.TopicGroupResponse.TopicSubscriptionResponse::toModel) + +private fun FetchNotificationTopicStatusResponse.TopicGroupResponse.TopicSubscriptionResponse.toModel(): NotificationTopicGroup.Status.TopicSubscription = + NotificationTopicGroup.Status.TopicSubscription( + topic = NotificationTopic.valueOf(this.topic), + subscribed = this.subscribed, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt new file mode 100644 index 000000000..57e578eac --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt @@ -0,0 +1,37 @@ +package team.aliens.dms.android.data.notification.repository + +import team.aliens.dms.android.data.notification.model.Notification +import team.aliens.dms.android.data.notification.model.NotificationTopic +import team.aliens.dms.android.data.notification.model.NotificationTopicGroup + +abstract class NotificationRepository { + + // TODO core 이전 고민 + abstract suspend fun registerDeviceNotificationToken(deviceToken: String) + + // TODO core 이전 고민 + abstract suspend fun cancelDeviceTokenRegistration(deviceToken: String) + + // TODO device token 파라미터 고민 + abstract suspend fun subscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ) + + // TODO device token 파라미터 고민 + abstract suspend fun unsubscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ) + + abstract suspend fun batchUpdateNotificationTopic(subscriptions: List) + + // TODO device token 파라미터 고민 + abstract suspend fun fetchNotificationStatus(deviceToken: String): List + + abstract suspend fun fetchNotifications(): List + + abstract suspend fun saveDeviceToken(deviceToken: String) + + abstract suspend fun getDeviceToken(): String +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt new file mode 100644 index 000000000..85daf3fd4 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt @@ -0,0 +1,68 @@ +package team.aliens.dms.android.data.notification.repository + +import team.aliens.dms.android.core.device.datastore.DeviceDataStoreDataSource +import team.aliens.dms.android.data.notification.model.Notification +import team.aliens.dms.android.data.notification.model.NotificationTopic +import team.aliens.dms.android.data.notification.model.NotificationTopicGroup +import team.aliens.dms.android.data.notification.model.toModel +import team.aliens.dms.android.network.notification.datasource.NetworkNotificationDataSource +import team.aliens.dms.android.network.notification.model.BatchUpdateNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.SubscribeNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.UnsubscribeNotificationTopicRequest +import javax.inject.Inject + +internal class NotificationRepositoryImpl @Inject constructor( + private val networkNotificationDataSource: NetworkNotificationDataSource, + private val deviceDataStoreDataSource: DeviceDataStoreDataSource, +) : NotificationRepository() { + + override suspend fun registerDeviceNotificationToken(deviceToken: String) { + TODO("Not yet implemented") + } + + override suspend fun cancelDeviceTokenRegistration(deviceToken: String) { + TODO("Not yet implemented") + } + + override suspend fun subscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ) = networkNotificationDataSource.subscribeNotificationTopic( + request = SubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + + override suspend fun unsubscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ) = networkNotificationDataSource.unsubscribeNotificationTopic( + request = UnsubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + + override suspend fun batchUpdateNotificationTopic( + subscriptions: List, + ) = networkNotificationDataSource.batchUpdateNotificationTopic( + request = BatchUpdateNotificationTopicRequest( + topics = subscriptions.toModel(), + ), + ) + + override suspend fun fetchNotificationStatus(deviceToken: String): List = + networkNotificationDataSource.fetchNotificationTopicStatus(deviceToken = deviceToken) + .toModel() + + override suspend fun fetchNotifications(): List = + networkNotificationDataSource.fetchNotifications().toModel() + + override suspend fun saveDeviceToken(deviceToken: String) { + deviceDataStoreDataSource.storeDeviceToken(deviceToken) + } + + override suspend fun getDeviceToken(): String = + deviceDataStoreDataSource.loadDeviceToken() +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/di/RepositoryModule.kt new file mode 100644 index 000000000..70cd0d9cf --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.student.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.student.repository.StudentRepository +import team.aliens.dms.android.data.student.repository.StudentRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindStudentRepository(impl: StudentRepositoryImpl): StudentRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/mapper/StudentMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/mapper/StudentMapper.kt new file mode 100644 index 000000000..97cf9f1cf --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/mapper/StudentMapper.kt @@ -0,0 +1,16 @@ +package team.aliens.dms.android.data.student.mapper + +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.network.student.model.FetchMyPageResponse +import team.aliens.dms.android.shared.model.Sex + +internal fun FetchMyPageResponse.toModel(): MyPage = MyPage( + schoolName = this.schoolName, + name = this.studentName, + gcn = this.gradeClassNumber, + profileImageUrl = this.profileImageUrl, + sex = Sex.valueOf(this.sex), + bonusPoint = this.bonusPoint, + minusPoint = this.minusPoint, + phrase = this.phrase, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/HashedEmail.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/HashedEmail.kt new file mode 100644 index 000000000..40a7f81cd --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/HashedEmail.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.student.model + +typealias HashedEmail = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/MyPage.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/MyPage.kt new file mode 100644 index 000000000..24efe466b --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/MyPage.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.data.student.model + +import team.aliens.dms.android.shared.model.Sex + +data class MyPage( + val schoolName: String = "", + val name: String = "", + val gcn: String = "", + val profileImageUrl: String? = null, + val sex: Sex = Sex.ALL, + val bonusPoint: Int = 0, + val minusPoint: Int = 0, + val phrase: String = "", +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/Student.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/Student.kt new file mode 100644 index 000000000..d32bfde24 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/Student.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.data.student.model + +import team.aliens.dms.android.network.student.model.FetchStudentsResponse +import java.util.UUID + +data class Student( + val id: UUID, + val name: String, + val gradeClassNumber: String, + val profileImageUrl: String, +) + +fun FetchStudentsResponse.toModel(): List = + this.students.map(FetchStudentsResponse.StudentResponse::toModel) + +fun FetchStudentsResponse.StudentResponse.toModel(): Student = Student( + id = UUID.fromString(this.id), + name = this.name, + gradeClassNumber = this.gradeClassNumber, + profileImageUrl = this.profileImageUrl, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/StudentName.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/StudentName.kt new file mode 100644 index 000000000..53f3415de --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/model/StudentName.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.student.model + +typealias StudentName = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt new file mode 100644 index 000000000..abe66b737 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt @@ -0,0 +1,58 @@ +package team.aliens.dms.android.data.student.repository + +import team.aliens.dms.android.data.student.model.HashedEmail +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.data.student.model.Student +import team.aliens.dms.android.data.student.model.StudentName +import java.util.UUID + +abstract class StudentRepository { + + abstract suspend fun signUp( + schoolVerificationCode: String, + schoolVerificationAnswer: String, + email: String, + emailVerificationCode: String, + grade: Int, + classRoom: Int, + number: Int, + accountId: String, + password: String, + profileImageUrl: String?, + ) + + abstract suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): StudentName + + abstract suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): HashedEmail + + abstract suspend fun resetPassword( + accountId: String, + studentName: String, + email: String, + emailVerificationCode: String, + newPassword: String, + ) + + abstract suspend fun checkIdDuplication(id: String) + + abstract suspend fun checkEmailDuplication(email: String) + + abstract suspend fun fetchMyPage(): MyPage + + abstract suspend fun editProfile(profileImageUrl: String) + + abstract suspend fun withdraw() + + abstract suspend fun fetchStudents(): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt new file mode 100644 index 000000000..a0f23c27c --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt @@ -0,0 +1,127 @@ +package team.aliens.dms.android.data.student.repository + +import team.aliens.dms.android.core.jwt.JwtProvider +import team.aliens.dms.android.core.school.SchoolProvider +import team.aliens.dms.android.data.student.mapper.toModel +import team.aliens.dms.android.data.student.model.HashedEmail +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.data.student.model.Student +import team.aliens.dms.android.data.student.model.StudentName +import team.aliens.dms.android.data.student.model.toModel +import team.aliens.dms.android.network.student.datasource.NetworkStudentDataSource +import team.aliens.dms.android.network.student.model.EditProfileRequest +import team.aliens.dms.android.network.student.model.ResetPasswordRequest +import team.aliens.dms.android.network.student.model.SignUpRequest +import team.aliens.dms.android.network.student.model.SignUpResponse +import team.aliens.dms.android.network.student.model.extractFeatures +import team.aliens.dms.android.network.student.model.extractTokens +import java.util.UUID +import javax.inject.Inject + +internal class StudentRepositoryImpl @Inject constructor( + private val networkStudentDataSource: NetworkStudentDataSource, + private val jwtProvider: JwtProvider, + private val schoolProvider: SchoolProvider, +) : StudentRepository() { + + override suspend fun signUp( + schoolVerificationCode: String, + schoolVerificationAnswer: String, + email: String, + emailVerificationCode: String, + grade: Int, + classRoom: Int, + number: Int, + accountId: String, + password: String, + profileImageUrl: String?, + ) { + val response: SignUpResponse = networkStudentDataSource.signUp( + request = SignUpRequest( + schoolVerificationCode = schoolVerificationCode, + schoolVerificationAnswer = schoolVerificationAnswer, + email = email, + emailVerificationCode = emailVerificationCode, + grade = grade, + classRoom = classRoom, + number = number, + accountId = accountId, + password = password, + profileImageUrl = profileImageUrl, + ), + ) + val tokens = response.extractTokens() + val features = response.extractFeatures() + + jwtProvider.updateTokens(tokens = tokens) + schoolProvider.updateFeatures(features = features) + } + + override suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): StudentName = networkStudentDataSource.examineStudentNumber( + schoolId = schoolId, + grade = grade, + classroom = classroom, + number = number, + ).studentName + + override suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): HashedEmail = + networkStudentDataSource.findId( + schoolId = schoolId, + studentName = studentName, + grade = grade, + classRoom = classRoom, + number = number, + ).email + + override suspend fun resetPassword( + accountId: String, + studentName: String, + email: String, + emailVerificationCode: String, + newPassword: String, + ) { + networkStudentDataSource.resetPassword( + ResetPasswordRequest( + accountId = accountId, + studentName = studentName, + email = email, + emailVerificationCode = emailVerificationCode, + newPassword = newPassword, + ), + ) + } + + override suspend fun checkIdDuplication(id: String) { + networkStudentDataSource.checkIdDuplication(id = id) + } + + override suspend fun checkEmailDuplication(email: String) { + networkStudentDataSource.checkEmailDuplication(email = email) + } + + override suspend fun fetchMyPage(): MyPage = networkStudentDataSource.fetchMyPage().toModel() + + override suspend fun editProfile(profileImageUrl: String) { + networkStudentDataSource.editProfile(request = EditProfileRequest(profileImageUrl)) + } + + override suspend fun withdraw() { + networkStudentDataSource.withdraw() + jwtProvider.clearCaches() + schoolProvider.clearCaches() + } + + override suspend fun fetchStudents(): List = + networkStudentDataSource.fetchStudents().toModel() +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt new file mode 100644 index 000000000..4d745e987 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt @@ -0,0 +1,29 @@ +package team.aliens.dms.android.network.auth.apiservice + +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Query +import team.aliens.dms.android.network.auth.model.CheckIdExistsResponse +import team.aliens.dms.android.network.auth.model.SendEmailVerificationCodeRequest +import team.aliens.dms.android.network.auth.model.SignInRequest +import team.aliens.dms.android.network.auth.model.SignInResponse + +internal interface AuthApiService { + + @POST("/auth/tokens") + suspend fun signIn(@Body request: SignInRequest): SignInResponse + + @POST("/auth/code") + suspend fun sendEmailVerificationCode(@Body request: SendEmailVerificationCodeRequest) + + @GET("/auth/code") + suspend fun checkEmailVerificationCode( + @Query("email") email: String, + @Query("auth_code") authCode: String, + @Query("type") type: String, + ) + + @GET("/auth/account-id") + suspend fun checkIdExists(@Query("account_id") accountId: String): CheckIdExistsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt new file mode 100644 index 000000000..5ae96f871 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.network.auth.datasource + +import team.aliens.dms.android.network.auth.model.CheckIdExistsResponse +import team.aliens.dms.android.network.auth.model.SendEmailVerificationCodeRequest +import team.aliens.dms.android.network.auth.model.SignInRequest +import team.aliens.dms.android.network.auth.model.SignInResponse + +abstract class NetworkAuthDataSource { + + abstract suspend fun signIn(request: SignInRequest): SignInResponse + + abstract suspend fun sendEmailVerificationCode(request: SendEmailVerificationCodeRequest) + + abstract suspend fun checkEmailVerificationCode( + email: String, + code: String, + type: String, + ) + + abstract suspend fun checkIdExists(accountId: String): CheckIdExistsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt new file mode 100644 index 000000000..d121b92f8 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt @@ -0,0 +1,28 @@ +package team.aliens.dms.android.network.auth.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.auth.apiservice.AuthApiService +import team.aliens.dms.android.network.auth.model.CheckIdExistsResponse +import team.aliens.dms.android.network.auth.model.SendEmailVerificationCodeRequest +import team.aliens.dms.android.network.auth.model.SignInRequest +import team.aliens.dms.android.network.auth.model.SignInResponse +import javax.inject.Inject + +internal class NetworkAuthDataSourceImpl @Inject constructor( + private val authApiService: AuthApiService, +) : NetworkAuthDataSource() { + override suspend fun signIn(request: SignInRequest): SignInResponse = + handleNetworkRequest { authApiService.signIn(request) } + + override suspend fun sendEmailVerificationCode(request: SendEmailVerificationCodeRequest) = + handleNetworkRequest { authApiService.sendEmailVerificationCode(request) } + + override suspend fun checkEmailVerificationCode( + email: String, + code: String, + type: String, + ) = handleNetworkRequest { authApiService.checkEmailVerificationCode(email, code, type) } + + override suspend fun checkIdExists(accountId: String): CheckIdExistsResponse = + handleNetworkRequest { authApiService.checkIdExists(accountId) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt new file mode 100644 index 000000000..1bbef4cbf --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.auth.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.auth.apiservice.AuthApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideAuthApiService(@GlobalRetrofitClient retrofit: Retrofit): AuthApiService = + retrofit.create(AuthApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt new file mode 100644 index 000000000..72e72f799 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.auth.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.auth.datasource.NetworkAuthDataSource +import team.aliens.dms.android.network.auth.datasource.NetworkAuthDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkAuthDataSource(impl: NetworkAuthDataSourceImpl): NetworkAuthDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt new file mode 100644 index 000000000..29edebc2a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.auth.model + +import com.google.gson.annotations.SerializedName + +data class CheckIdExistsResponse( + @SerializedName("email") val email: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt new file mode 100644 index 000000000..cb207619d --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.auth.model + +import com.google.gson.annotations.SerializedName + +data class SendEmailVerificationCodeRequest( + @SerializedName("email") val email: String, + @SerializedName("type") val type: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt new file mode 100644 index 000000000..f81d368b1 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.network.auth.model + +import com.google.gson.annotations.SerializedName + +data class SignInRequest( + @SerializedName("account_id") val accountId: String, + @SerializedName("password") val password: String, + @SerializedName("device_token") val deviceToken: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt new file mode 100644 index 000000000..381f2c100 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt @@ -0,0 +1,19 @@ +package team.aliens.dms.android.network.auth.model + +import com.google.gson.annotations.SerializedName + +data class SignInResponse( + @SerializedName("access_token") val accessToken: String, + @SerializedName("access_token_expired_at") val accessTokenExpiration: String, + @SerializedName("refresh_token") val refreshToken: String, + @SerializedName("refresh_token_expired_at") val refreshTokenExpiration: String, + @SerializedName("features") val features: FeaturesResponse, +) { + data class FeaturesResponse( + @SerializedName("meal_service") val mealService: Boolean, + @SerializedName("notice_service") val noticeService: Boolean, + @SerializedName("point_service") val pointService: Boolean, + @SerializedName("study_room_service") val studyRoomService: Boolean, + @SerializedName("remain_service") val remainsService: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt new file mode 100644 index 000000000..720a11be8 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt @@ -0,0 +1,52 @@ +package team.aliens.dms.android.network.notification.apiservice + +import retrofit2.http.Body +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.HTTP +import retrofit2.http.PATCH +import retrofit2.http.POST +import retrofit2.http.Query +import team.aliens.dms.android.network.notification.model.BatchUpdateNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.CancelFcmDeviceTokenRegistrationRequest +import team.aliens.dms.android.network.notification.model.FetchNotificationTopicStatusResponse +import team.aliens.dms.android.network.notification.model.FetchNotificationsResponse +import team.aliens.dms.android.network.notification.model.RegisterFcmDeviceTokenRequest +import team.aliens.dms.android.network.notification.model.SubscribeNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.UnsubscribeNotificationTopicRequest + +internal interface NotificationApiService { + + @POST("/notifications/tokens") + suspend fun registerFcmDeviceToken( + @Body request: RegisterFcmDeviceTokenRequest, + ) + + @DELETE("/notifications/token") + suspend fun cancelFcmDeviceTokenRegistration( + @Body request: CancelFcmDeviceTokenRegistrationRequest, + ) + + @POST("/notifications/topic") + suspend fun subscribeNotificationTopic( + @Body request: SubscribeNotificationTopicRequest, + ) + + @HTTP(method = "DELETE", path = "/notifications/topic", hasBody = true) + suspend fun unsubscribeNotificationTopic( + @Body request: UnsubscribeNotificationTopicRequest, + ) + + @PATCH("/notifications/topic") + suspend fun batchUpdateNotificationTopic( + @Body request: BatchUpdateNotificationTopicRequest, + ) + + @GET("/notifications/topic") + suspend fun fetchNotificationTopicStatus( + @Query("device_token") deviceToken: String, + ): FetchNotificationTopicStatusResponse + + @GET("/notifications") + suspend fun fetchNotifications(): FetchNotificationsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt new file mode 100644 index 000000000..78f12d7c5 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt @@ -0,0 +1,26 @@ +package team.aliens.dms.android.network.notification.datasource + +import team.aliens.dms.android.network.notification.model.BatchUpdateNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.CancelFcmDeviceTokenRegistrationRequest +import team.aliens.dms.android.network.notification.model.FetchNotificationTopicStatusResponse +import team.aliens.dms.android.network.notification.model.FetchNotificationsResponse +import team.aliens.dms.android.network.notification.model.RegisterFcmDeviceTokenRequest +import team.aliens.dms.android.network.notification.model.SubscribeNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.UnsubscribeNotificationTopicRequest + +abstract class NetworkNotificationDataSource { + + abstract suspend fun registerFcmDeviceToken(request: RegisterFcmDeviceTokenRequest) + + abstract suspend fun cancelFcmDeviceTokenRegistration(request: CancelFcmDeviceTokenRegistrationRequest) + + abstract suspend fun subscribeNotificationTopic(request: SubscribeNotificationTopicRequest) + + abstract suspend fun unsubscribeNotificationTopic(request: UnsubscribeNotificationTopicRequest) + + abstract suspend fun batchUpdateNotificationTopic(request: BatchUpdateNotificationTopicRequest) + + abstract suspend fun fetchNotificationTopicStatus(deviceToken: String): FetchNotificationTopicStatusResponse + + abstract suspend fun fetchNotifications(): FetchNotificationsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt new file mode 100644 index 000000000..9613061a4 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt @@ -0,0 +1,37 @@ +package team.aliens.dms.android.network.notification.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.notification.apiservice.NotificationApiService +import team.aliens.dms.android.network.notification.model.BatchUpdateNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.CancelFcmDeviceTokenRegistrationRequest +import team.aliens.dms.android.network.notification.model.FetchNotificationTopicStatusResponse +import team.aliens.dms.android.network.notification.model.FetchNotificationsResponse +import team.aliens.dms.android.network.notification.model.RegisterFcmDeviceTokenRequest +import team.aliens.dms.android.network.notification.model.SubscribeNotificationTopicRequest +import team.aliens.dms.android.network.notification.model.UnsubscribeNotificationTopicRequest +import javax.inject.Inject + +internal class NetworkNotificationDataSourceImpl @Inject constructor( + private val notificationApiService: NotificationApiService, +) : NetworkNotificationDataSource() { + override suspend fun registerFcmDeviceToken(request: RegisterFcmDeviceTokenRequest) = + handleNetworkRequest { notificationApiService.registerFcmDeviceToken(request) } + + override suspend fun cancelFcmDeviceTokenRegistration(request: CancelFcmDeviceTokenRegistrationRequest) = + handleNetworkRequest { notificationApiService.cancelFcmDeviceTokenRegistration(request) } + + override suspend fun subscribeNotificationTopic(request: SubscribeNotificationTopicRequest) = + handleNetworkRequest { notificationApiService.subscribeNotificationTopic(request) } + + override suspend fun unsubscribeNotificationTopic(request: UnsubscribeNotificationTopicRequest) = + handleNetworkRequest { notificationApiService.unsubscribeNotificationTopic(request) } + + override suspend fun batchUpdateNotificationTopic(request: BatchUpdateNotificationTopicRequest) = + handleNetworkRequest { notificationApiService.batchUpdateNotificationTopic(request) } + + override suspend fun fetchNotificationTopicStatus(deviceToken: String): FetchNotificationTopicStatusResponse = + handleNetworkRequest { notificationApiService.fetchNotificationTopicStatus(deviceToken) } + + override suspend fun fetchNotifications(): FetchNotificationsResponse = + handleNetworkRequest { notificationApiService.fetchNotifications() } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt new file mode 100644 index 000000000..ba53fca4a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.network.notification.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.notification.apiservice.NotificationApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideNotificationApiService( + @GlobalRetrofitClient retrofit: Retrofit, + ): NotificationApiService = retrofit.create(NotificationApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt new file mode 100644 index 000000000..84369f548 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.notification.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.notification.datasource.NetworkNotificationDataSource +import team.aliens.dms.android.network.notification.datasource.NetworkNotificationDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkNotificationDataSource(impl: NetworkNotificationDataSourceImpl): NetworkNotificationDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt new file mode 100644 index 000000000..bfe154b1e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt @@ -0,0 +1,12 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class BatchUpdateNotificationTopicRequest( + @SerializedName("topics_to_subscribe") val topics: List, +) { + data class NotificationTopicRequest( + @SerializedName("topic") val topic: String, + @SerializedName("is_subscribed") val subscribed: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt new file mode 100644 index 000000000..a1a408f51 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class CancelFcmDeviceTokenRegistrationRequest( + @SerializedName("device_token") val deviceToken: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt new file mode 100644 index 000000000..057b4820e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class FetchNotificationTopicStatusResponse( + @SerializedName("topic_groups") val topicGroups: List, +) { + data class TopicGroupResponse( + @SerializedName("topic_group") val topicGroup: String, + @SerializedName("group_name") val groupName: String, + @SerializedName("topic_subscriptions") val topicSubscriptions: List, + ) { + data class TopicSubscriptionResponse( + @SerializedName("topic") val topic: String, + @SerializedName("is_subscribed") val subscribed: Boolean, + ) + } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt new file mode 100644 index 000000000..380122724 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchNotificationsResponse( + @SerializedName("notifications") val notifications: List, +) { + data class NotificationResponse( + @SerializedName("id") val id: UUID, + @SerializedName("topic") val topic: String, + @SerializedName("link_identifier") val linkId: UUID, + @SerializedName("title") val title: String, + @SerializedName("content") val content: String, + @SerializedName("created_at") val createdAt: String, + @SerializedName("is_read") val isRead: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt new file mode 100644 index 000000000..c144aafe5 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.network.notification.model + +enum class NotificationTopicGroup { + NOTICE, STUDY_ROOM, + ; +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt new file mode 100644 index 000000000..24d0c78d1 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class RegisterFcmDeviceTokenRequest( + @SerializedName("device_token") val deviceToken: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt new file mode 100644 index 000000000..1f73551ab --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class SubscribeNotificationTopicRequest( + @SerializedName("device_token") val deviceToken: String, + @SerializedName("topic") val topic: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt new file mode 100644 index 000000000..5f30bc353 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.notification.model + +import com.google.gson.annotations.SerializedName + +data class UnsubscribeNotificationTopicRequest( + @SerializedName("device_token") val deviceToken: String, + @SerializedName("topic") val topic: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt new file mode 100644 index 000000000..70cd0d9cf --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.student.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.student.repository.StudentRepository +import team.aliens.dms.android.data.student.repository.StudentRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindStudentRepository(impl: StudentRepositoryImpl): StudentRepository +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt new file mode 100644 index 000000000..97cf9f1cf --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt @@ -0,0 +1,16 @@ +package team.aliens.dms.android.data.student.mapper + +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.network.student.model.FetchMyPageResponse +import team.aliens.dms.android.shared.model.Sex + +internal fun FetchMyPageResponse.toModel(): MyPage = MyPage( + schoolName = this.schoolName, + name = this.studentName, + gcn = this.gradeClassNumber, + profileImageUrl = this.profileImageUrl, + sex = Sex.valueOf(this.sex), + bonusPoint = this.bonusPoint, + minusPoint = this.minusPoint, + phrase = this.phrase, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt new file mode 100644 index 000000000..40a7f81cd --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.student.model + +typealias HashedEmail = String diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt new file mode 100644 index 000000000..24efe466b --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.data.student.model + +import team.aliens.dms.android.shared.model.Sex + +data class MyPage( + val schoolName: String = "", + val name: String = "", + val gcn: String = "", + val profileImageUrl: String? = null, + val sex: Sex = Sex.ALL, + val bonusPoint: Int = 0, + val minusPoint: Int = 0, + val phrase: String = "", +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt new file mode 100644 index 000000000..d32bfde24 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.data.student.model + +import team.aliens.dms.android.network.student.model.FetchStudentsResponse +import java.util.UUID + +data class Student( + val id: UUID, + val name: String, + val gradeClassNumber: String, + val profileImageUrl: String, +) + +fun FetchStudentsResponse.toModel(): List = + this.students.map(FetchStudentsResponse.StudentResponse::toModel) + +fun FetchStudentsResponse.StudentResponse.toModel(): Student = Student( + id = UUID.fromString(this.id), + name = this.name, + gradeClassNumber = this.gradeClassNumber, + profileImageUrl = this.profileImageUrl, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt new file mode 100644 index 000000000..53f3415de --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.student.model + +typealias StudentName = String diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt new file mode 100644 index 000000000..abe66b737 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt @@ -0,0 +1,58 @@ +package team.aliens.dms.android.data.student.repository + +import team.aliens.dms.android.data.student.model.HashedEmail +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.data.student.model.Student +import team.aliens.dms.android.data.student.model.StudentName +import java.util.UUID + +abstract class StudentRepository { + + abstract suspend fun signUp( + schoolVerificationCode: String, + schoolVerificationAnswer: String, + email: String, + emailVerificationCode: String, + grade: Int, + classRoom: Int, + number: Int, + accountId: String, + password: String, + profileImageUrl: String?, + ) + + abstract suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): StudentName + + abstract suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): HashedEmail + + abstract suspend fun resetPassword( + accountId: String, + studentName: String, + email: String, + emailVerificationCode: String, + newPassword: String, + ) + + abstract suspend fun checkIdDuplication(id: String) + + abstract suspend fun checkEmailDuplication(email: String) + + abstract suspend fun fetchMyPage(): MyPage + + abstract suspend fun editProfile(profileImageUrl: String) + + abstract suspend fun withdraw() + + abstract suspend fun fetchStudents(): List +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt new file mode 100644 index 000000000..a0f23c27c --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt @@ -0,0 +1,127 @@ +package team.aliens.dms.android.data.student.repository + +import team.aliens.dms.android.core.jwt.JwtProvider +import team.aliens.dms.android.core.school.SchoolProvider +import team.aliens.dms.android.data.student.mapper.toModel +import team.aliens.dms.android.data.student.model.HashedEmail +import team.aliens.dms.android.data.student.model.MyPage +import team.aliens.dms.android.data.student.model.Student +import team.aliens.dms.android.data.student.model.StudentName +import team.aliens.dms.android.data.student.model.toModel +import team.aliens.dms.android.network.student.datasource.NetworkStudentDataSource +import team.aliens.dms.android.network.student.model.EditProfileRequest +import team.aliens.dms.android.network.student.model.ResetPasswordRequest +import team.aliens.dms.android.network.student.model.SignUpRequest +import team.aliens.dms.android.network.student.model.SignUpResponse +import team.aliens.dms.android.network.student.model.extractFeatures +import team.aliens.dms.android.network.student.model.extractTokens +import java.util.UUID +import javax.inject.Inject + +internal class StudentRepositoryImpl @Inject constructor( + private val networkStudentDataSource: NetworkStudentDataSource, + private val jwtProvider: JwtProvider, + private val schoolProvider: SchoolProvider, +) : StudentRepository() { + + override suspend fun signUp( + schoolVerificationCode: String, + schoolVerificationAnswer: String, + email: String, + emailVerificationCode: String, + grade: Int, + classRoom: Int, + number: Int, + accountId: String, + password: String, + profileImageUrl: String?, + ) { + val response: SignUpResponse = networkStudentDataSource.signUp( + request = SignUpRequest( + schoolVerificationCode = schoolVerificationCode, + schoolVerificationAnswer = schoolVerificationAnswer, + email = email, + emailVerificationCode = emailVerificationCode, + grade = grade, + classRoom = classRoom, + number = number, + accountId = accountId, + password = password, + profileImageUrl = profileImageUrl, + ), + ) + val tokens = response.extractTokens() + val features = response.extractFeatures() + + jwtProvider.updateTokens(tokens = tokens) + schoolProvider.updateFeatures(features = features) + } + + override suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): StudentName = networkStudentDataSource.examineStudentNumber( + schoolId = schoolId, + grade = grade, + classroom = classroom, + number = number, + ).studentName + + override suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): HashedEmail = + networkStudentDataSource.findId( + schoolId = schoolId, + studentName = studentName, + grade = grade, + classRoom = classRoom, + number = number, + ).email + + override suspend fun resetPassword( + accountId: String, + studentName: String, + email: String, + emailVerificationCode: String, + newPassword: String, + ) { + networkStudentDataSource.resetPassword( + ResetPasswordRequest( + accountId = accountId, + studentName = studentName, + email = email, + emailVerificationCode = emailVerificationCode, + newPassword = newPassword, + ), + ) + } + + override suspend fun checkIdDuplication(id: String) { + networkStudentDataSource.checkIdDuplication(id = id) + } + + override suspend fun checkEmailDuplication(email: String) { + networkStudentDataSource.checkEmailDuplication(email = email) + } + + override suspend fun fetchMyPage(): MyPage = networkStudentDataSource.fetchMyPage().toModel() + + override suspend fun editProfile(profileImageUrl: String) { + networkStudentDataSource.editProfile(request = EditProfileRequest(profileImageUrl)) + } + + override suspend fun withdraw() { + networkStudentDataSource.withdraw() + jwtProvider.clearCaches() + schoolProvider.clearCaches() + } + + override suspend fun fetchStudents(): List = + networkStudentDataSource.fetchStudents().toModel() +} From b72bacd9e525f60cb73f140a7705937974a42858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 16:58:14 +0900 Subject: [PATCH 08/11] =?UTF-8?q?refactor=20::=20=EB=A0=88=ED=8F=AC?= =?UTF-8?q?=EC=A7=80=ED=86=A0=EB=A6=AC=20data=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/di/RepositoryModule.kt | 18 +++ .../file/mapper/FileMapper.kt | 9 ++ .../file/model/FileUrl.kt | 3 + .../file/model/PresignedFileUrl.kt | 6 + .../file/repository/FileRepository.kt | 10 ++ .../file/repository/FileRepositoryImpl.kt | 17 +++ .../notice/di/RepositoryModule.kt | 18 +++ .../notice/mapper/NoticeMapper.kt | 33 +++++ .../notice/model/Notice.kt | 11 ++ .../notice/repository/NoticeRepository.kt | 14 ++ .../notice/repository/NoticeRepositoryImpl.kt | 22 +++ .../outing/di/RepositoryModule.kt | 18 +++ .../model/CurrentAppliedOutingApplication.kt | 36 +++++ .../outing/model/OutingApplicationId.kt | 5 + .../outing/model/OutingApplicationTime.kt | 30 +++++ .../outing/repository/OutingRepository.kt | 28 ++++ .../outing/repository/OutingRepositoryImpl.kt | 49 +++++++ .../point/di/RepositoryModule.kt | 18 +++ .../point/mapper/PointMapper.kt | 23 ++++ .../point/model/Point.kt | 12 ++ .../point/model/PointStatus.kt | 6 + .../point/model/PointType.kt | 6 + .../point/repository/PointRepository.kt | 13 ++ .../point/repository/PointRepositoryImpl.kt | 21 +++ .../remains}/di/RepositoryModule.kt | 8 +- .../remains/mapper/RemainsMapper.kt | 33 +++++ .../remains/model/AppliedRemainsOption.kt | 8 ++ .../remains/model/RemainsApplicationTime.kt | 10 ++ .../remains/model/RemainsOption.kt | 10 ++ .../remains/repository/RemainsRepository.kt | 17 +++ .../repository/RemainsRepositoryImpl.kt | 27 ++++ .../school/di/RepositoryModule.kt | 18 +++ .../school/mapper/SchoolMapper.kt | 13 ++ .../school/model/School.kt | 9 ++ .../school/model/SchoolId.kt | 5 + .../model/SchoolVerificationQuestion.kt | 3 + .../school/repository/SchoolRepository.kt | 20 +++ .../school/repository/SchoolRepositoryImpl.kt | 33 +++++ .../studyroom/di/RepositoryModule.kt | 18 +++ .../studyroom/mapper/StudyRoomMapper.kt | 103 ++++++++++++++ .../studyroom/model/AppliedStudyRoom.kt | 6 + .../studyroom/model/AvailableStudyRoomTime.kt | 9 ++ .../studyroom/model/StudyRoom.kt | 74 ++++++++++ .../model/StudyRoomApplicationTime.kt | 7 + .../repository/StudyRoomRepository.kt | 35 +++++ .../repository/StudyRoomRepositoryImpl.kt | 58 ++++++++ .../user/di/RepositoryModule.kt | 18 +++ .../user/repository/UserRepository.kt | 11 ++ .../user/repository/UserRepositoryImpl.kt | 26 ++++ .../voting/di/RepositoryModule.kt | 18 +++ .../voting/mapper/VotingMapper.kt | 45 +++++++ .../voting/model/AllVoteSearch.kt | 14 ++ .../voting/model/ModelStudentCandidates.kt | 10 ++ .../voting/model/StudentGcnInfo.kt | 6 + .../voting/model/Vote.kt | 6 + .../voting/model/VotingItem.kt | 8 ++ .../voting/repository/VotingRepository.kt | 23 ++++ .../voting/repository/VotingRepositoryImpl.kt | 31 +++++ .../feature/meal/viewmodel/MealViewModel.kt | 9 +- .../file/apiservice/FileApiService.kt | 23 ++++ .../file/datasource/NetworkFileDataSource.kt | 9 ++ .../datasource/NetworkFileDataSourceImpl.kt | 31 +++++ .../file/di/ApiServiceModule.kt | 20 +++ .../file/di/DataSourceModule.kt | 18 +++ .../file/model/FetchPresignedUrlResponse.kt | 8 ++ .../file/model/UploadFileResponse.kt | 7 + .../notice/apiservice/NoticeApiService.kt | 25 ++++ .../datasource/NetworkNoticeDataSource.kt | 15 +++ .../datasource/NetworkNoticeDataSourceImpl.kt | 22 +++ .../notice/di/ApiServiceModule.kt | 20 +++ .../notice/di/DataSourceModule.kt | 18 +++ .../model/FetchNoticeDetailsResponse.kt | 11 ++ .../notice/model/FetchNoticesResponse.kt | 14 ++ .../FetchWhetherNewNoticesExistResponse.kt | 7 + .../outing/apiservice/OutingApiService.kt | 45 +++++++ .../datasource/OutingNetworkDataSource.kt | 19 +++ .../datasource/OutingNetworkDataSourceImpl.kt | 34 +++++ .../outing/di/ApiServiceModule.kt | 21 +++ .../outing/di/DataSourceModule.kt | 18 +++ .../outing/model/ApplyOutingRequest.kt | 13 ++ .../outing/model/ApplyOutingResponse.kt | 8 ++ ...CurrentAppliedOutingApplicationResponse.kt | 14 ++ .../FetchOutingApplicationDetailsResponse.kt | 21 +++ .../outing/model/FetchOutingTypesResponse.kt | 7 + .../model/OutingAvailableTimeResponse.kt | 16 +++ .../point/apiservice/PointApiService.kt | 17 +++ .../datasource/NetworkPointDataSource.kt | 11 ++ .../datasource/NetworkPointDataSourceImpl.kt | 17 +++ .../point/di/ApiServiceModule.kt | 20 +++ .../point/di/DataSourceModule.kt | 18 +++ .../point/model/FetchPointsResponse.kt | 17 +++ .../remains/apiservice/RemainsApiService.kt | 29 ++++ .../datasource/NetworkRemainsDataSource.kt | 17 +++ .../NetworkRemainsDataSourceImpl.kt | 25 ++++ .../remains/di/ApiServiceModule.kt | 20 +++ .../remains/di/DataSourceModule.kt | 18 +++ .../FetchAppliedRemainsOptionResponse.kt | 9 ++ .../FetchRemainsApplicationTimeResponse.kt | 11 ++ .../model/FetchRemainsOptionsResponse.kt | 15 +++ .../school/apiservice/SchoolApiService.kt | 27 ++++ .../datasource/NetworkSchoolDataSource.kt | 20 +++ .../datasource/NetworkSchoolDataSourceImpl.kt | 27 ++++ .../school/di/ApiServiceModule.kt | 20 +++ .../school/di/DataSourceModule.kt | 18 +++ .../ExamineSchoolVerificationCodeResponse.kt | 8 ++ ...FetchSchoolVerificationQuestionResponse.kt | 7 + .../school/model/FetchSchoolsResponse.kt | 14 ++ .../student/apiservice/StudentApiService.kt | 67 +++++++++ .../datasource/NetworkStudentDataSource.kt | 45 +++++++ .../NetworkStudentDataSourceImpl.kt | 66 +++++++++ .../student/di/ApiServiceModule.kt | 20 +++ .../student/di/DataSourceModule.kt | 18 +++ .../student/mapper/StudentMapper.kt | 16 --- .../student/model/EditProfileRequest.kt | 7 + .../model/ExamineStudentNumberResponse.kt | 7 + .../student/model/FetchMyPageResponse.kt | 14 ++ .../student/model/FetchStudentsResponse.kt | 14 ++ .../student/model/FindIdResponse.kt | 7 + .../student/model/HashedEmail.kt | 3 - .../student/model/MyPage.kt | 14 -- .../student/model/ResetPasswordRequest.kt | 11 ++ .../student/model/SignUpRequest.kt | 16 +++ .../student/model/SignUpResponse.kt | 45 +++++++ .../student/model/Student.kt | 21 --- .../student/model/StudentName.kt | 3 - .../student/repository/StudentRepository.kt | 58 -------- .../repository/StudentRepositoryImpl.kt | 127 ------------------ .../apiservice/StudyRoomApiService.kt | 60 +++++++++ .../datasource/NetworkStudyRoomDataSource.kt | 37 +++++ .../NetworkStudyRoomDataSourceImpl.kt | 52 +++++++ .../studyroom/di/ApiServiceModule.kt | 20 +++ .../studyroom/di/DataSourceModule.kt | 18 +++ .../model/FetchAppliedStudyRoomResponse.kt | 8 ++ .../FetchAvailableStudyRoomTimesResponse.kt | 14 ++ .../studyroom/model/FetchSeatTypesResponse.kt | 14 ++ .../FetchStudyRoomApplicationTimeResponse.kt | 8 ++ .../model/FetchStudyRoomDetailsResponse.kt | 46 +++++++ .../model/FetchStudyRoomsResponse.kt | 19 +++ .../user/apiservice/UserApiService.kt | 20 +++ .../user/datasource/NetworkUserDataSource.kt | 10 ++ .../datasource/NetworkUserDataSourceImpl.kt | 19 +++ .../user/di/ApiServiceModule.kt | 20 +++ .../user/di/DataSourceModule.kt | 18 +++ .../exception/PasswordMismatchException.kt | 3 + .../user/model/EditPasswordRequest.kt | 8 ++ .../voting/apiservice/VotingApiService.kt | 46 +++++++ .../datasource/NetworkVotingDataSource.kt | 23 ++++ .../datasource/NetworkVotingDataSourceImpl.kt | 29 ++++ .../voting/di/ApiServiceModule.kt | 21 +++ .../voting/di/DataSourceModule.kt | 18 +++ .../model/FetchAllVoteSearchResponse.kt | 17 +++ .../model/FetchCheckVotingItemResponse.kt | 13 ++ .../FetchModelStudentCandidatesResponse.kt | 15 +++ 153 files changed, 2929 insertions(+), 250 deletions(-) create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/mapper/PointMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/model/Point.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointStatus.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointType.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt rename {network/src/dev/kotlin/team.aliens.dms.android.network/student => data/src/dev/kotlin/team.aliens.dms.android.data/remains}/di/RepositoryModule.kt (52%) create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt create mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt delete mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt create mode 100644 network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt new file mode 100644 index 000000000..22d20104f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.file.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.file.repository.FileRepository +import team.aliens.dms.android.data.file.repository.FileRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindFileRepository(impl: FileRepositoryImpl): FileRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt new file mode 100644 index 000000000..75107c713 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.data.file.mapper + +import team.aliens.dms.android.data.file.model.PresignedFileUrl +import team.aliens.dms.android.network.file.model.FetchPresignedUrlResponse + +internal fun FetchPresignedUrlResponse.toModel(): PresignedFileUrl = PresignedFileUrl( + fileUploadUrl = this.fileUploadUrl, + fileUrl = this.fileUrl, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt new file mode 100644 index 000000000..ae879f20a --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.file.model + +typealias FileUrl = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt new file mode 100644 index 000000000..f722ba34f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.file.model + +data class PresignedFileUrl( + val fileUploadUrl: String, + val fileUrl: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt new file mode 100644 index 000000000..6b241d0ec --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt @@ -0,0 +1,10 @@ +package team.aliens.dms.android.data.file.repository + +import team.aliens.dms.android.data.file.model.PresignedFileUrl +import java.io.File + +abstract class FileRepository { + + abstract suspend fun fetchPresignedUrl(fileName: String): PresignedFileUrl + abstract suspend fun uploadFile(presignedUrl: String, file: File) +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt new file mode 100644 index 000000000..6a6e5c213 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.data.file.repository + +import team.aliens.dms.android.data.file.mapper.toModel +import team.aliens.dms.android.data.file.model.PresignedFileUrl +import team.aliens.dms.android.network.file.datasource.NetworkFileDataSource +import java.io.File +import javax.inject.Inject + +internal class FileRepositoryImpl @Inject constructor( + private val networkFileDataSource: NetworkFileDataSource, +) : FileRepository() { + override suspend fun fetchPresignedUrl(fileName: String): PresignedFileUrl = + networkFileDataSource.fetchPresignedUrl(fileName = fileName).toModel() + + override suspend fun uploadFile(presignedUrl: String, file: File) = + networkFileDataSource.uploadFile(presignedUrl = presignedUrl, file = file) +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt new file mode 100644 index 000000000..83a5efc4f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.notice.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.notice.repository.NoticeRepository +import team.aliens.dms.android.data.notice.repository.NoticeRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindNoticeRepository(impl: NoticeRepositoryImpl): NoticeRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt new file mode 100644 index 000000000..6b13be2aa --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt @@ -0,0 +1,33 @@ +package team.aliens.dms.android.data.notice.mapper + +import team.aliens.dms.android.core.database.entity.NoticeEntity +import team.aliens.dms.android.data.notice.model.Notice +import team.aliens.dms.android.network.notice.model.FetchNoticeDetailsResponse +import team.aliens.dms.android.network.notice.model.FetchNoticesResponse +import team.aliens.dms.android.shared.date.toLocalDateTime + +internal fun List.toModel() = this.map(NoticeEntity::toModel) + +private fun NoticeEntity.toModel() = Notice( + id = this.id, + title = this.title, + content = this.content, + createdAt = this.createdAt, +) + +internal fun FetchNoticesResponse.toModel(): List = + this.notices.map(FetchNoticesResponse.NoticeResponse::toModel) + +private fun FetchNoticesResponse.NoticeResponse.toModel(): Notice = Notice( + id = this.id, + title = this.title, + content = null, + createdAt = this.createdAt.toLocalDateTime(), +) + +internal fun FetchNoticeDetailsResponse.toModel(): Notice = Notice( + id = this.noticeId, + title = this.title, + content = this.content, + createdAt = this.createdAt.toLocalDateTime(), +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt new file mode 100644 index 000000000..898bfb483 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.data.notice.model + +import java.time.LocalDateTime +import java.util.UUID + +data class Notice( + val id: UUID, + val title: String, + val content: String?, + val createdAt: LocalDateTime, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt new file mode 100644 index 000000000..7495ad154 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.data.notice.repository + +import team.aliens.dms.android.data.notice.model.Notice +import team.aliens.dms.android.shared.model.Order +import java.util.UUID + +abstract class NoticeRepository { + + abstract suspend fun fetchWhetherNewNoticesExist(): Boolean + + abstract suspend fun fetchNoticeDetails(noticeId: UUID): Notice + + abstract suspend fun fetchNotices(order: Order = Order.NEW): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt new file mode 100644 index 000000000..e9d96c273 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt @@ -0,0 +1,22 @@ +package team.aliens.dms.android.data.notice.repository + +import team.aliens.dms.android.data.notice.mapper.toModel +import team.aliens.dms.android.data.notice.model.Notice +import team.aliens.dms.android.network.notice.datasource.NetworkNoticeDataSource +import team.aliens.dms.android.shared.model.Order +import java.util.UUID +import javax.inject.Inject + +internal class NoticeRepositoryImpl @Inject constructor( + private val networkNoticeDataSource: NetworkNoticeDataSource, +) : NoticeRepository() { + + override suspend fun fetchWhetherNewNoticesExist(): Boolean = + networkNoticeDataSource.fetchWhetherNewNoticesExist().whetherNewNotices + + override suspend fun fetchNoticeDetails(noticeId: UUID): Notice = + networkNoticeDataSource.fetchNoticeDetails(noticeId).toModel() + + override suspend fun fetchNotices(order: Order): List = + networkNoticeDataSource.fetchNotices(order.name).toModel() +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt new file mode 100644 index 000000000..d71005337 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.outing.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.outing.repository.OutingRepository +import team.aliens.dms.android.data.outing.repository.OutingRepositoryImpl +import javax.inject.Singleton + +@InstallIn(SingletonComponent::class) +@Module +abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindOutingRepository(impl: OutingRepositoryImpl): OutingRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt new file mode 100644 index 000000000..e0ccd2e2f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt @@ -0,0 +1,36 @@ +package team.aliens.dms.android.data.outing.model + +import team.aliens.dms.android.network.outing.model.FetchCurrentAppliedOutingApplicationResponse +import java.util.UUID + +data class CurrentAppliedOutingApplication( + val id: UUID, + val date: String, + val type: String, + val status: OutingStatus, + val startTime: String, + val endTime: String, + val reason: String?, + val companionNames: List, +) { + // TODO + enum class OutingStatus { + REQUESTED, + OUTING, + DONE, + APPROVED, + ; + } +} + +fun FetchCurrentAppliedOutingApplicationResponse.toModel(): CurrentAppliedOutingApplication = + CurrentAppliedOutingApplication( + id = UUID.fromString(this.id), + date = this.date, + type = this.type, + status = CurrentAppliedOutingApplication.OutingStatus.valueOf(this.status), + startTime = this.startTime, + endTime = this.endTime, + reason = this.reason, + companionNames = this.companionNames, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt new file mode 100644 index 000000000..ea198fe0b --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt @@ -0,0 +1,5 @@ +package team.aliens.dms.android.data.outing.model + +import java.util.UUID + +typealias OutingApplicationId = UUID diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt new file mode 100644 index 000000000..efd51f7be --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt @@ -0,0 +1,30 @@ +package team.aliens.dms.android.data.outing.model + +import java.time.DayOfWeek +import team.aliens.dms.android.network.outing.model.OutingAvailableTimeResponse +import java.util.UUID + +data class OutingApplicationTime( + val id: UUID, + val schoolId: UUID, + val startTime: String, + val endTime: String, + val available: Boolean, + val dayOfWeek: DayOfWeek, +) + +fun OutingAvailableTimeResponse.toModel(): List = + this.availableTimes.toModel() + +fun List.toModel(): List = + this.map(OutingAvailableTimeResponse.AvailableTimeResponse::toModel) + +fun OutingAvailableTimeResponse.AvailableTimeResponse.toModel(): OutingApplicationTime = + OutingApplicationTime( + id = UUID.fromString(this.id), + schoolId = UUID.fromString(this.schoolId), + startTime = this.startTime, + endTime = this.endTime, + available = this.available, + dayOfWeek = DayOfWeek.valueOf(this.dayOfWeek), + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt new file mode 100644 index 000000000..1cf60e001 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt @@ -0,0 +1,28 @@ +package team.aliens.dms.android.data.outing.repository + +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.LocalTime +import team.aliens.dms.android.data.outing.model.CurrentAppliedOutingApplication +import team.aliens.dms.android.data.outing.model.OutingApplicationId +import team.aliens.dms.android.data.outing.model.OutingApplicationTime +import java.util.UUID + +abstract class OutingRepository { + abstract suspend fun fetchOutingApplicationTimes(dayOfWeek: DayOfWeek): List + + abstract suspend fun applyOuting( + date: LocalDate, + startTime: LocalTime, + endTime: LocalTime, + type: String, + reason: String?, + companionIds: List, + ): OutingApplicationId + + abstract suspend fun fetchCurrentAppliedOutingApplication(): CurrentAppliedOutingApplication + + abstract suspend fun cancelOuting(applicationId: UUID) + + abstract suspend fun fetchOutingTypes(keyword: String?): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt new file mode 100644 index 000000000..b3f7951c3 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt @@ -0,0 +1,49 @@ +package team.aliens.dms.android.data.outing.repository + +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.LocalTime +import java.time.format.DateTimeFormatter +import team.aliens.dms.android.data.outing.model.CurrentAppliedOutingApplication +import team.aliens.dms.android.data.outing.model.OutingApplicationId +import team.aliens.dms.android.data.outing.model.OutingApplicationTime +import team.aliens.dms.android.data.outing.model.toModel +import team.aliens.dms.android.network.outing.datasource.OutingNetworkDataSource +import team.aliens.dms.android.network.outing.model.ApplyOutingRequest +import java.util.UUID +import javax.inject.Inject + +class OutingRepositoryImpl @Inject constructor( + private val outingNetworkDataSource: OutingNetworkDataSource, +) : OutingRepository() { + override suspend fun fetchOutingApplicationTimes(dayOfWeek: DayOfWeek): List = + outingNetworkDataSource.fetchOutingAvailableTime(dayOfWeek = dayOfWeek.name).toModel() + + override suspend fun applyOuting( + date: LocalDate, + startTime: LocalTime, + endTime: LocalTime, + type: String, + reason: String?, + companionIds: List, + ): OutingApplicationId = outingNetworkDataSource.applyOuting( + req = ApplyOutingRequest( + date = date.format(DateTimeFormatter.ISO_LOCAL_DATE), + startTime = startTime.toString(), + endTime = endTime.toString(), + type = type, + reason = reason, + companionIds = companionIds, + ), + ).applicationId + + override suspend fun fetchCurrentAppliedOutingApplication(): CurrentAppliedOutingApplication = + outingNetworkDataSource.fetchCurrentAppliedOutingApplication().toModel() + + override suspend fun cancelOuting(applicationId: UUID) { + outingNetworkDataSource.cancelOuting(applicationId = applicationId) + } + + override suspend fun fetchOutingTypes(keyword: String?): List = + outingNetworkDataSource.fetchOutingTypes(keyword = keyword).titles +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/di/RepositoryModule.kt new file mode 100644 index 000000000..2b40f7c86 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.point.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.point.repository.PointRepository +import team.aliens.dms.android.data.point.repository.PointRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindPointRepository(impl: PointRepositoryImpl): PointRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/mapper/PointMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/mapper/PointMapper.kt new file mode 100644 index 000000000..9867e20cd --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/mapper/PointMapper.kt @@ -0,0 +1,23 @@ +package team.aliens.dms.android.data.point.mapper + +import team.aliens.dms.android.data.point.model.Point +import team.aliens.dms.android.data.point.model.PointStatus +import team.aliens.dms.android.data.point.model.PointType +import team.aliens.dms.android.network.point.model.FetchPointsResponse +import team.aliens.dms.android.shared.date.toLocalDate + +internal fun FetchPointsResponse.toModel(): PointStatus = PointStatus( + totalPoints = this.totalPoint, + points = this.pointResponses.toModel(), +) + +private fun List.toModel(): List = + this.map(FetchPointsResponse.PointResponse::toModel) + +private fun FetchPointsResponse.PointResponse.toModel(): Point = Point( + id = this.id, + date = this.date.toLocalDate(), + type = PointType.valueOf(this.type), + name = this.name, + score = this.score, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/Point.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/Point.kt new file mode 100644 index 000000000..29e9fdc44 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/Point.kt @@ -0,0 +1,12 @@ +package team.aliens.dms.android.data.point.model + +import java.time.LocalDate +import java.util.UUID + +data class Point( + val id: UUID, + val date: LocalDate, + val type: PointType, + val name: String, + val score: Int, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointStatus.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointStatus.kt new file mode 100644 index 000000000..8ae4d5545 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointStatus.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.point.model + +data class PointStatus( + val totalPoints: Int, + val points: List, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointType.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointType.kt new file mode 100644 index 000000000..f1e07406b --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/model/PointType.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.point.model + +enum class PointType { + ALL, BONUS, MINUS, + ; +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt new file mode 100644 index 000000000..c4d6b204c --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt @@ -0,0 +1,13 @@ +package team.aliens.dms.android.data.point.repository + +import team.aliens.dms.android.data.point.model.PointStatus +import team.aliens.dms.android.data.point.model.PointType + +abstract class PointRepository { + + abstract suspend fun fetchPoints( + type: PointType, + page: Long? = null, + size: Long? = null, + ): PointStatus +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt new file mode 100644 index 000000000..84b8a7486 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.data.point.repository + +import team.aliens.dms.android.data.point.mapper.toModel +import team.aliens.dms.android.data.point.model.PointStatus +import team.aliens.dms.android.data.point.model.PointType +import team.aliens.dms.android.network.point.datasource.NetworkPointDataSource +import javax.inject.Inject + +internal class PointRepositoryImpl @Inject constructor( + private val networkPointDataSource: NetworkPointDataSource, +) : PointRepository() { + override suspend fun fetchPoints( + type: PointType, + page: Long?, + size: Long?, + ): PointStatus = networkPointDataSource.fetchPoints( + type = type.name, + page = page, + size = size, + ).toModel() +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt similarity index 52% rename from network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt rename to data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt index 70cd0d9cf..3bc2abd4f 100644 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/RepositoryModule.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt @@ -1,11 +1,11 @@ -package team.aliens.dms.android.data.student.di +package team.aliens.dms.android.data.remains.di import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.student.repository.StudentRepository -import team.aliens.dms.android.data.student.repository.StudentRepositoryImpl +import team.aliens.dms.android.data.remains.repository.RemainsRepository +import team.aliens.dms.android.data.remains.repository.RemainsRepositoryImpl import javax.inject.Singleton @Module @@ -14,5 +14,5 @@ internal abstract class RepositoryModule { @Binds @Singleton - abstract fun bindStudentRepository(impl: StudentRepositoryImpl): StudentRepository + abstract fun bindRemainsRepository(impl: RemainsRepositoryImpl): RemainsRepository } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt new file mode 100644 index 000000000..f1366055d --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt @@ -0,0 +1,33 @@ +package team.aliens.dms.android.data.remains.mapper + +import team.aliens.dms.android.data.remains.model.AppliedRemainsOption +import team.aliens.dms.android.data.remains.model.RemainsApplicationTime +import team.aliens.dms.android.data.remains.model.RemainsOption +import team.aliens.dms.android.network.remains.model.FetchAppliedRemainsOptionResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsApplicationTimeResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsOptionsResponse + +internal fun FetchAppliedRemainsOptionResponse.toModel(): AppliedRemainsOption = + AppliedRemainsOption( + id = this.remainsOptionId, + title = this.title, + ) + +internal fun FetchRemainsApplicationTimeResponse.toModel(): RemainsApplicationTime = + RemainsApplicationTime( + startDayOfWeek = this.startDayOfWeek, + startTime = this.startTime, + endDayOfWeek = this.endDayOfWeek, + endTime = this.endTime, + ) + +internal fun FetchRemainsOptionsResponse.toModel(): List = + this.remainsOptionResponse.map(FetchRemainsOptionsResponse.RemainsOptionResponse::toModel) + +private fun FetchRemainsOptionsResponse.RemainsOptionResponse.toModel(): RemainsOption = + RemainsOption( + id = this.id, + title = this.title, + description = this.description, + applied = this.applied, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt new file mode 100644 index 000000000..022f1a544 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.data.remains.model + +import java.util.UUID + +data class AppliedRemainsOption( + val id: UUID, + val title: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt new file mode 100644 index 000000000..5e4085f48 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt @@ -0,0 +1,10 @@ +package team.aliens.dms.android.data.remains.model + +import java.time.DayOfWeek + +data class RemainsApplicationTime( + val startDayOfWeek: DayOfWeek, + val startTime: String, + val endDayOfWeek: DayOfWeek, + val endTime: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt new file mode 100644 index 000000000..40242ccfc --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt @@ -0,0 +1,10 @@ +package team.aliens.dms.android.data.remains.model + +import java.util.UUID + +data class RemainsOption( + val id: UUID, + val title: String, + val description: String, + val applied: Boolean, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt new file mode 100644 index 000000000..306b55f5b --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.data.remains.repository + +import team.aliens.dms.android.data.remains.model.AppliedRemainsOption +import team.aliens.dms.android.data.remains.model.RemainsApplicationTime +import team.aliens.dms.android.data.remains.model.RemainsOption +import java.util.UUID + +abstract class RemainsRepository { + + abstract suspend fun updateRemainsOption(optionId: UUID) + + abstract suspend fun fetchAppliedRemainsOption(): AppliedRemainsOption + + abstract suspend fun fetchRemainsApplicationTime(): RemainsApplicationTime + + abstract suspend fun fetchRemainsOptions(): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt new file mode 100644 index 000000000..dbd8f74c8 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt @@ -0,0 +1,27 @@ +package team.aliens.dms.android.data.remains.repository + +import team.aliens.dms.android.data.remains.mapper.toModel +import team.aliens.dms.android.data.remains.model.AppliedRemainsOption +import team.aliens.dms.android.data.remains.model.RemainsApplicationTime +import team.aliens.dms.android.data.remains.model.RemainsOption +import team.aliens.dms.android.network.remains.datasource.NetworkRemainsDataSource +import java.util.UUID +import javax.inject.Inject + +internal class RemainsRepositoryImpl @Inject constructor( + private val networkRemainsDataSource: NetworkRemainsDataSource, +) : RemainsRepository() { + + override suspend fun updateRemainsOption(optionId: UUID) { + networkRemainsDataSource.updateRemainsOption(optionId) + } + + override suspend fun fetchAppliedRemainsOption(): AppliedRemainsOption = + networkRemainsDataSource.fetchAppliedRemainsOption().toModel() + + override suspend fun fetchRemainsApplicationTime(): RemainsApplicationTime = + networkRemainsDataSource.fetchRemainsApplicationTime().toModel() + + override suspend fun fetchRemainsOptions(): List = + networkRemainsDataSource.fetchRemainsOptions().toModel() +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt new file mode 100644 index 000000000..f296569ee --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.school.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.school.repository.SchoolRepository +import team.aliens.dms.android.data.school.repository.SchoolRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindSchoolRepository(impl: SchoolRepositoryImpl): SchoolRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt new file mode 100644 index 000000000..575a924f3 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt @@ -0,0 +1,13 @@ +package team.aliens.dms.android.data.school.mapper + +import team.aliens.dms.android.data.school.model.School +import team.aliens.dms.android.network.school.model.FetchSchoolsResponse + +internal fun FetchSchoolsResponse.toModel(): List = + this.schools.map(FetchSchoolsResponse.SchoolResponse::toModel) + +private fun FetchSchoolsResponse.SchoolResponse.toModel(): School = School( + id = this.id, + name = this.name, + address = this.address, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt new file mode 100644 index 000000000..742a77662 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.data.school.model + +import java.util.UUID + +data class School( + val id: UUID, + val name: String, + val address: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt new file mode 100644 index 000000000..e8aa726ab --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt @@ -0,0 +1,5 @@ +package team.aliens.dms.android.data.school.model + +import java.util.UUID + +typealias SchoolId = UUID diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt new file mode 100644 index 000000000..b9bb725c6 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.data.school.model + +typealias SchoolVerificationQuestion = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt new file mode 100644 index 000000000..642bb13a9 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.data.school.repository + +import team.aliens.dms.android.data.school.model.School +import team.aliens.dms.android.data.school.model.SchoolId +import team.aliens.dms.android.data.school.model.SchoolVerificationQuestion +import java.util.UUID + +abstract class SchoolRepository { + + abstract suspend fun fetchSchools(): List + + abstract suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): SchoolVerificationQuestion + + abstract suspend fun examineSchoolVerificationQuestion( + schoolId: UUID, + answer: String, + ) + + abstract suspend fun examineSchoolVerificationCode(code: String): SchoolId +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt new file mode 100644 index 000000000..5be517748 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt @@ -0,0 +1,33 @@ +package team.aliens.dms.android.data.school.repository + +import team.aliens.dms.android.data.school.mapper.toModel +import team.aliens.dms.android.data.school.model.School +import team.aliens.dms.android.data.school.model.SchoolId +import team.aliens.dms.android.data.school.model.SchoolVerificationQuestion +import team.aliens.dms.android.network.school.datasource.NetworkSchoolDataSource +import java.util.UUID +import javax.inject.Inject + +internal class SchoolRepositoryImpl @Inject constructor( + private val networkSchoolDataSource: NetworkSchoolDataSource, +) : SchoolRepository() { + + override suspend fun fetchSchools(): List = + networkSchoolDataSource.fetchSchools().toModel() + + override suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): SchoolVerificationQuestion = + networkSchoolDataSource.fetchSchoolVerificationQuestion(schoolId = schoolId).question + + override suspend fun examineSchoolVerificationQuestion( + schoolId: UUID, + answer: String, + ) { + networkSchoolDataSource.examineSchoolVerificationQuestion( + schoolId = schoolId, + answer = answer, + ) + } + + override suspend fun examineSchoolVerificationCode(code: String): SchoolId = + networkSchoolDataSource.examineSchoolVerificationCode(code = code).schoolId +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt new file mode 100644 index 000000000..102d2caaf --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.studyroom.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.studyroom.repository.StudyRoomRepository +import team.aliens.dms.android.data.studyroom.repository.StudyRoomRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindStudyRoomRepository(impl: StudyRoomRepositoryImpl): StudyRoomRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt new file mode 100644 index 000000000..e608dfec6 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt @@ -0,0 +1,103 @@ +package team.aliens.dms.android.data.studyroom.mapper + +import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom +import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime +import team.aliens.dms.android.data.studyroom.model.StudyRoom +import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime +import team.aliens.dms.android.network.studyroom.model.FetchAppliedStudyRoomResponse +import team.aliens.dms.android.network.studyroom.model.FetchAvailableStudyRoomTimesResponse +import team.aliens.dms.android.network.studyroom.model.FetchSeatTypesResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomApplicationTimeResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomDetailsResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomsResponse +import team.aliens.dms.android.shared.model.Sex + +internal fun FetchStudyRoomApplicationTimeResponse.toModel(): StudyRoomApplicationTime = + StudyRoomApplicationTime( + startAt = this.startAt, + endAt = this.endAt, + ) + +internal fun FetchStudyRoomsResponse.toModel(): List = + this.studyRoomResponses.map(FetchStudyRoomsResponse.StudyRoomResponse::toModel) + +private fun FetchStudyRoomsResponse.StudyRoomResponse.toModel(): StudyRoom = StudyRoom( + id = this.id, + floor = this.floor, + name = this.name, + availableGrade = this.availableGrade, + availableSex = Sex.valueOf(this.availableSex), + inUseHeadcount = this.inUseHeadcount, + totalAvailableSeat = this.totalAvailableSeat, + isMine = this.isMine, +) + +internal fun FetchStudyRoomDetailsResponse.toModel(): StudyRoom.Details = StudyRoom.Details( + id = id, + floor = floor, + name = name, + startTime = startTime, + endTime = endTime, + totalAvailableSeat = totalAvailableSeat, + inUseHeadcount = inUseHeadcount, + availableSex = Sex.valueOf(this.availableSex), + availableGrade = availableGrade, + eastDescription = eastDescription, + westDescription = westDescription, + southDescription = southDescription, + northDescription = northDescription, + totalWidthSize = totalWidthSize, + totalHeightSize = totalHeightSize, + seats = seats.toModel(), +) + +private fun List.toModel(): List = + this.map(FetchStudyRoomDetailsResponse.SeatResponse::toModel) + +private fun FetchStudyRoomDetailsResponse.SeatResponse.toModel(): StudyRoom.Seat = StudyRoom.Seat( + id = this.id, + row = this.row, + column = this.column, + number = this.number, + type = this.type?.toModel(), + status = StudyRoom.Seat.Status.valueOf(this.status), + isMine = this.isMine, + student = this.student?.toModel(), +) + +private fun FetchStudyRoomDetailsResponse.SeatResponse.SeatTypeResponse.toModel(): StudyRoom.Seat.Type = + StudyRoom.Seat.Type( + id = this.id, + name = this.name, + color = this.color, + ) + +private fun FetchStudyRoomDetailsResponse.SeatResponse.StudentResponse.toModel(): StudyRoom.Seat.Student = + StudyRoom.Seat.Student( + id = this.id, + name = this.name, + ) + +internal fun FetchAppliedStudyRoomResponse.toModel(): AppliedStudyRoom = AppliedStudyRoom( + floor = this.floor, + name = this.name, +) + +internal fun FetchSeatTypesResponse.toModel(): List = + this.types.map(FetchSeatTypesResponse.SeatTypeResponse::toModel) + +private fun FetchSeatTypesResponse.SeatTypeResponse.toModel(): StudyRoom.Seat.Type = StudyRoom.Seat.Type( + id = this.id, + name = this.name, + color = this.color, +) + +internal fun FetchAvailableStudyRoomTimesResponse.toModel(): List = + this.availableStudyRoomTimes.map(FetchAvailableStudyRoomTimesResponse.AvailableStudyRoomTimeResponse::toModel) + +private fun FetchAvailableStudyRoomTimesResponse.AvailableStudyRoomTimeResponse.toModel(): AvailableStudyRoomTime = + AvailableStudyRoomTime( + id = this.id, + startTime = this.startTime, + endTime = this.endTime, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt new file mode 100644 index 000000000..e95d4d80f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.studyroom.model + +data class AppliedStudyRoom( + val floor: Int, + val name: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt new file mode 100644 index 000000000..d10b2c426 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.data.studyroom.model + +import java.util.UUID + +data class AvailableStudyRoomTime( + val id: UUID, + val startTime: String, + val endTime: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt new file mode 100644 index 000000000..e1c5f1a97 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt @@ -0,0 +1,74 @@ +package team.aliens.dms.android.data.studyroom.model + +import team.aliens.dms.android.shared.model.Sex +import java.util.UUID + +data class StudyRoom( + val id: UUID, + val floor: Int, + val name: String, + val availableGrade: Int, + val availableSex: Sex, + val inUseHeadcount: Int, + val totalAvailableSeat: Int, + val isMine: Boolean, +) { + data class Details( + val id: UUID, + val floor: Int, + val name: String, + val startTime: String, + val endTime: String, + val totalAvailableSeat: Int, + val inUseHeadcount: Int, + val availableSex: Sex, + val availableGrade: Int, + val eastDescription: String, + val westDescription: String, + val southDescription: String, + val northDescription: String, + val totalWidthSize: Int, + val totalHeightSize: Int, + val seats: List, + ) + + data class Seat( + val id: UUID, + val row: Int, + val column: Int, + val number: Int?, + val type: Type?, + val status: Status, + val isMine: Boolean, + val student: Student?, + ) { + data class Type( + val id: UUID, + val name: String, + val color: String, + ) + + enum class Status { + AVAILABLE, UNAVAILABLE, IN_USE, EMPTY, + ; + } + + data class Student( + val id: UUID, + val name: String, + ) + } +} + +fun StudyRoom.Details.toStudyRoom( + isMine: Boolean = false, +): StudyRoom = StudyRoom( + id = this.id, + floor = this.floor, + name = this.name, + availableGrade = this.availableGrade, + availableSex = this.availableSex, + inUseHeadcount = this.inUseHeadcount, + totalAvailableSeat = this.totalAvailableSeat, + isMine = isMine, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt new file mode 100644 index 000000000..5e0d5e90f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.data.studyroom.model + +// TODO: Time 교체 +data class StudyRoomApplicationTime( + val startAt: String, + val endAt: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt new file mode 100644 index 000000000..033f2c77f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt @@ -0,0 +1,35 @@ +package team.aliens.dms.android.data.studyroom.repository + +import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom +import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime +import team.aliens.dms.android.data.studyroom.model.StudyRoom +import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime +import java.util.UUID + +abstract class StudyRoomRepository { + + abstract suspend fun fetchStudyRoomApplicationTime(): StudyRoomApplicationTime + + abstract suspend fun applySeat( + seatId: UUID, + timeslot: UUID, + ) + + abstract suspend fun cancelSeat( + seatId: UUID, + timeslot: UUID, + ) + + abstract suspend fun fetchStudyRooms(timeslot: UUID): List + + abstract suspend fun fetchStudyRoomDetails( + studyRoomId: UUID, + timeslot: UUID, + ): StudyRoom.Details + + abstract suspend fun fetchAppliedStudyRoom(): AppliedStudyRoom + + abstract suspend fun fetchSeatTypes(studyRoomId: UUID): List + + abstract suspend fun fetchAvailableStudyRoomTimes(): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt new file mode 100644 index 000000000..bd1179825 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt @@ -0,0 +1,58 @@ +package team.aliens.dms.android.data.studyroom.repository + +import team.aliens.dms.android.data.studyroom.mapper.toModel +import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom +import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime +import team.aliens.dms.android.data.studyroom.model.StudyRoom +import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime +import team.aliens.dms.android.network.studyroom.datasource.NetworkStudyRoomDataSource +import java.util.UUID +import javax.inject.Inject + +internal class StudyRoomRepositoryImpl @Inject constructor( + private val networkStudyRoomDataSource: NetworkStudyRoomDataSource, +) : StudyRoomRepository() { + + override suspend fun fetchStudyRoomApplicationTime(): StudyRoomApplicationTime = + networkStudyRoomDataSource.fetchStudyRoomApplicationTime().toModel() + + override suspend fun applySeat( + seatId: UUID, + timeslot: UUID, + ) { + networkStudyRoomDataSource.applySeat( + seatId = seatId, + timeslot = timeslot, + ) + } + + override suspend fun cancelSeat( + seatId: UUID, + timeslot: UUID, + ) { + networkStudyRoomDataSource.cancelSeat( + seatId = seatId, + timeslot = timeslot, + ) + } + + override suspend fun fetchStudyRooms(timeslot: UUID): List = + networkStudyRoomDataSource.fetchStudyRooms(timeslot).toModel() + + override suspend fun fetchStudyRoomDetails( + studyRoomId: UUID, + timeslot: UUID, + ): StudyRoom.Details = networkStudyRoomDataSource.fetchStudyRoomDetails( + studyRoomId = studyRoomId, + timeslot = timeslot, + ).toModel() + + override suspend fun fetchAppliedStudyRoom(): AppliedStudyRoom = + networkStudyRoomDataSource.fetchAppliedStudyRoom().toModel() + + override suspend fun fetchSeatTypes(studyRoomId: UUID): List = + networkStudyRoomDataSource.fetchSeatTypes(studyRoomId = studyRoomId).toModel() + + override suspend fun fetchAvailableStudyRoomTimes(): List = + networkStudyRoomDataSource.fetchAvailableStudyRoomTimes().toModel() +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt new file mode 100644 index 000000000..8fdb7b177 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.user.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.user.repository.UserRepository +import team.aliens.dms.android.data.user.repository.UserRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindUserRepository(impl: UserRepositoryImpl): UserRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt new file mode 100644 index 000000000..02c8c94e7 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.data.user.repository + +abstract class UserRepository { + + abstract suspend fun editPassword( + currentPassword: String, + newPassword: String, + ) + + abstract suspend fun comparePassword(password: String) +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt new file mode 100644 index 000000000..b0a926031 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt @@ -0,0 +1,26 @@ +package team.aliens.dms.android.data.user.repository + +import team.aliens.dms.android.network.user.datasource.NetworkUserDataSource +import team.aliens.dms.android.network.user.model.EditPasswordRequest +import javax.inject.Inject + +internal class UserRepositoryImpl @Inject constructor( + private val networkUserDataSource: NetworkUserDataSource, +) : UserRepository() { + + override suspend fun editPassword( + currentPassword: String, + newPassword: String, + ) { + networkUserDataSource.editPassword( + request = EditPasswordRequest( + currentPassword = currentPassword, + newPassword = newPassword, + ), + ) + } + + override suspend fun comparePassword(password: String) { + networkUserDataSource.comparePassword(password = password) + } +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt new file mode 100644 index 000000000..30c50ce9d --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.data.voting.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.data.voting.repository.VotingRepository +import team.aliens.dms.android.data.voting.repository.VotingRepositoryImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class RepositoryModule { + + @Binds + @Singleton + abstract fun bindVotingRepository(impl: VotingRepositoryImpl): VotingRepository +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt new file mode 100644 index 000000000..34e6024f1 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt @@ -0,0 +1,45 @@ +package team.aliens.dms.android.data.voting.mapper + +import team.aliens.dms.android.data.voting.model.AllVoteSearch +import team.aliens.dms.android.data.voting.model.ModelStudentCandidates +import team.aliens.dms.android.data.voting.model.Vote +import team.aliens.dms.android.data.voting.model.VotingItem +import team.aliens.dms.android.network.voting.model.FetchAllVoteSearchResponse +import team.aliens.dms.android.network.voting.model.FetchCheckVotingItemResponse +import team.aliens.dms.android.network.voting.model.FetchModelStudentCandidatesResponse +import team.aliens.dms.android.shared.date.toLocalDateTime +import java.util.UUID + +internal fun FetchAllVoteSearchResponse.toModel(): List = + this.votingTopics.map(FetchAllVoteSearchResponse.VoteSearchResponse::toModel) + +private fun FetchAllVoteSearchResponse.VoteSearchResponse.toModel(): AllVoteSearch = + AllVoteSearch( + id = UUID.fromString(this.id), + topicName = this.topicName, + description = this.description, + startTime = this.startTime.toLocalDateTime(), + endTime = this.endTime.toLocalDateTime(), + voteType = Vote.valueOf(this.voteType), + isVoted = this.isVoted, + ) + +internal fun FetchCheckVotingItemResponse.toModel(): List = + this.votingOptions.map(FetchCheckVotingItemResponse.VotingItemResponse::toModel) + +private fun FetchCheckVotingItemResponse.VotingItemResponse.toModel(): VotingItem = + VotingItem( + id = id, + votingOptionName = votingOptionName, + ) + +internal fun FetchModelStudentCandidatesResponse.toModel(): List = + this.students.map(FetchModelStudentCandidatesResponse.ModelStudentCandidatesResponse::toModel) + +private fun FetchModelStudentCandidatesResponse.ModelStudentCandidatesResponse.toModel(): ModelStudentCandidates = + ModelStudentCandidates( + id = this.id, + studentGcn = this.studentGcn, + name = this.name, + profileImageUrl = this.profileImageUrl, + ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt new file mode 100644 index 000000000..4eef97aca --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.data.voting.model + +import java.time.LocalDateTime +import java.util.UUID + +data class AllVoteSearch( + val id: UUID, + val topicName: String, + val description: String, + val startTime: LocalDateTime, + val endTime: LocalDateTime, + val voteType: Vote, + val isVoted: Boolean, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt new file mode 100644 index 000000000..8c47e5d2f --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt @@ -0,0 +1,10 @@ +package team.aliens.dms.android.data.voting.model + +import java.util.UUID + +data class ModelStudentCandidates( + val id: UUID, + val studentGcn: Long, + val name: String, + val profileImageUrl: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt new file mode 100644 index 000000000..ab8fdda6e --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.voting.model + +data class StudentGcnInfo( + val studentGcn: String, + val studentFilterId: Int, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt new file mode 100644 index 000000000..2fe4e5790 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt @@ -0,0 +1,6 @@ +package team.aliens.dms.android.data.voting.model + +enum class Vote { + MODEL_STUDENT_VOTE, APPROVAL_VOTE, STUDENT_VOTE, OPTION_VOTE + ; +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt new file mode 100644 index 000000000..5409c5f13 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.data.voting.model + +import java.util.UUID + +data class VotingItem( + val id: UUID, + val votingOptionName: String, +) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt new file mode 100644 index 000000000..b01d6dd76 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt @@ -0,0 +1,23 @@ +package team.aliens.dms.android.data.voting.repository + +import java.time.LocalDate +import team.aliens.dms.android.data.voting.model.AllVoteSearch +import team.aliens.dms.android.data.voting.model.ModelStudentCandidates +import team.aliens.dms.android.data.voting.model.VotingItem +import java.util.UUID + +abstract class VotingRepository { + + abstract suspend fun fetchAllVoteSearch(): List + + abstract suspend fun fetchCheckVotingItem(votingTopicId: UUID): List + + abstract suspend fun fetchCreateVotingItem( + votingTopicId: UUID, + selectedId: UUID, + ) + + abstract suspend fun fetchDeleteVotingItem(voteId: UUID) + + abstract suspend fun fetchModelStudentCandidates(requestDate: LocalDate): List +} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt new file mode 100644 index 000000000..60d1fb191 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt @@ -0,0 +1,31 @@ +package team.aliens.dms.android.data.voting.repository + +import java.time.LocalDate +import team.aliens.dms.android.data.voting.mapper.toModel +import team.aliens.dms.android.data.voting.model.AllVoteSearch +import team.aliens.dms.android.data.voting.model.ModelStudentCandidates +import team.aliens.dms.android.data.voting.model.VotingItem +import team.aliens.dms.android.network.voting.datasource.NetworkVotingDataSource +import java.util.UUID +import javax.inject.Inject + +internal class VotingRepositoryImpl @Inject constructor( + private val networkVotingDataSource: NetworkVotingDataSource, +) : VotingRepository() { + override suspend fun fetchAllVoteSearch(): List = + networkVotingDataSource.fetchAllVoteSearch().toModel() + + override suspend fun fetchCheckVotingItem(votingTopicId: UUID): List = + networkVotingDataSource.fetchCheckVotingItem(votingTopicId).toModel() + + override suspend fun fetchCreateVotingItem(votingTopicId: UUID, selectedId: UUID) { + networkVotingDataSource.fetchCreateVotingItem(votingTopicId, selectedId) + } + + override suspend fun fetchDeleteVotingItem(voteId: UUID) { + networkVotingDataSource.fetchDeleteVotingItem(voteId) + } + + override suspend fun fetchModelStudentCandidates(requestDate: LocalDate): List = + networkVotingDataSource.fetchModelStudentCandidates(requestDate).toModel() +} diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt index 231dc0b98..040e6bff2 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt @@ -27,10 +27,11 @@ internal class MealViewModel @Inject constructor( private fun getMeal(date: LocalDate? = null) { val selectedDate = date ?: uiState.value.selectedDate viewModelScope.launch(Dispatchers.IO) { - mealRepository.fetchMeal(date = selectedDate) - .onSuccess { successfulMeal -> - setState { it.copy(meal = successfulMeal) } - } + runCatching { + mealRepository.fetchMeal(date = selectedDate) + }.onSuccess { successfulMeal -> + setState { it.copy(meal = successfulMeal) } + } } } diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt new file mode 100644 index 000000000..87ee32225 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt @@ -0,0 +1,23 @@ +package team.aliens.dms.android.network.file.apiservice + +import okhttp3.RequestBody +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.PUT +import retrofit2.http.Query +import retrofit2.http.Url +import team.aliens.dms.android.network.file.model.FetchPresignedUrlResponse + +internal interface FileApiService { + + @GET("/files/url") + suspend fun fetchPresignedUrl( + @Query("file_name") fileName: String, + ): FetchPresignedUrlResponse + + @PUT + suspend fun uploadFile( + @Url presignedUrl: String, + @Body file: RequestBody, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt new file mode 100644 index 000000000..fc0b600d6 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.network.file.datasource + +import team.aliens.dms.android.network.file.model.FetchPresignedUrlResponse +import java.io.File + +abstract class NetworkFileDataSource { + abstract suspend fun fetchPresignedUrl(fileName: String): FetchPresignedUrlResponse + abstract suspend fun uploadFile(presignedUrl: String, file: File) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt new file mode 100644 index 000000000..939e8329b --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt @@ -0,0 +1,31 @@ +package team.aliens.dms.android.network.file.datasource + +import android.os.Build +import androidx.annotation.RequiresApi +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.RequestBody.Companion.toRequestBody +import team.aliens.dms.android.core.network.util.RequestType +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.file.apiservice.FileApiService +import team.aliens.dms.android.network.file.model.FetchPresignedUrlResponse +import java.io.File +import java.nio.file.Files +import javax.inject.Inject + +internal class NetworkFileDataSourceImpl @Inject constructor( + private val fileApiService: FileApiService, +) : NetworkFileDataSource() { + override suspend fun fetchPresignedUrl(fileName: String): FetchPresignedUrlResponse = + handleNetworkRequest { fileApiService.fetchPresignedUrl(fileName) } + + @RequiresApi(Build.VERSION_CODES.O) + override suspend fun uploadFile(presignedUrl: String, file: File) = + handleNetworkRequest { + fileApiService.uploadFile( + presignedUrl = presignedUrl, + file = Files.readAllBytes(file.toPath()).toRequestBody( + contentType = RequestType.Binary.toMediaTypeOrNull(), + ), + ) + } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt new file mode 100644 index 000000000..8acc82c11 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.file.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.file.apiservice.FileApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideFileApiService(@GlobalRetrofitClient retrofit: Retrofit): FileApiService = + retrofit.create(FileApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt new file mode 100644 index 000000000..522ca87a1 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.file.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.file.datasource.NetworkFileDataSource +import team.aliens.dms.android.network.file.datasource.NetworkFileDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkFileDataSource(impl: NetworkFileDataSourceImpl): NetworkFileDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt new file mode 100644 index 000000000..7cc3619c0 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.file.model + +import com.google.gson.annotations.SerializedName + +data class FetchPresignedUrlResponse( + @SerializedName("file_upload_url") val fileUploadUrl: String, + @SerializedName("file_url") val fileUrl: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt new file mode 100644 index 000000000..968c66edb --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.file.model + +import com.google.gson.annotations.SerializedName + +data class UploadFileResponse( + @SerializedName("file_url") val fileUrl: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt new file mode 100644 index 000000000..c4267c523 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt @@ -0,0 +1,25 @@ +package team.aliens.dms.android.network.notice.apiservice + +import retrofit2.http.GET +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.notice.model.FetchNoticeDetailsResponse +import team.aliens.dms.android.network.notice.model.FetchNoticesResponse +import team.aliens.dms.android.network.notice.model.FetchWhetherNewNoticesExistResponse +import java.util.UUID + +internal interface NoticeApiService { + + @GET("/notices/status") + @RequiresAccessToken + suspend fun fetchWhetherNewNoticesExist(): FetchWhetherNewNoticesExistResponse + + @GET("/notices/{notice-id}") + @RequiresAccessToken + suspend fun fetchNoticeDetails(@Path("notice-id") noticeId: UUID): FetchNoticeDetailsResponse + + @GET("/notices") + @RequiresAccessToken + suspend fun fetchNotices(@Query("order") order: String): FetchNoticesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt new file mode 100644 index 000000000..7a77d8209 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt @@ -0,0 +1,15 @@ +package team.aliens.dms.android.network.notice.datasource + +import team.aliens.dms.android.network.notice.model.FetchNoticeDetailsResponse +import team.aliens.dms.android.network.notice.model.FetchNoticesResponse +import team.aliens.dms.android.network.notice.model.FetchWhetherNewNoticesExistResponse +import java.util.UUID + +abstract class NetworkNoticeDataSource { + + abstract suspend fun fetchWhetherNewNoticesExist(): FetchWhetherNewNoticesExistResponse + + abstract suspend fun fetchNotices(order: String): FetchNoticesResponse + + abstract suspend fun fetchNoticeDetails(noticeId: UUID): FetchNoticeDetailsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt new file mode 100644 index 000000000..d4cf56dad --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt @@ -0,0 +1,22 @@ +package team.aliens.dms.android.network.notice.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.notice.apiservice.NoticeApiService +import team.aliens.dms.android.network.notice.model.FetchNoticeDetailsResponse +import team.aliens.dms.android.network.notice.model.FetchNoticesResponse +import team.aliens.dms.android.network.notice.model.FetchWhetherNewNoticesExistResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkNoticeDataSourceImpl @Inject constructor( + private val noticeApiService: NoticeApiService, +) : NetworkNoticeDataSource() { + override suspend fun fetchWhetherNewNoticesExist(): FetchWhetherNewNoticesExistResponse = + handleNetworkRequest { noticeApiService.fetchWhetherNewNoticesExist() } + + override suspend fun fetchNotices(order: String): FetchNoticesResponse = + handleNetworkRequest { noticeApiService.fetchNotices(order) } + + override suspend fun fetchNoticeDetails(noticeId: UUID): FetchNoticeDetailsResponse = + handleNetworkRequest { noticeApiService.fetchNoticeDetails(noticeId) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt new file mode 100644 index 000000000..1e8c3d13d --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.notice.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.notice.apiservice.NoticeApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideNoticeApiService(@GlobalRetrofitClient retrofit: Retrofit): NoticeApiService = + retrofit.create(NoticeApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt new file mode 100644 index 000000000..6e69018b8 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.notice.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.notice.datasource.NetworkNoticeDataSource +import team.aliens.dms.android.network.notice.datasource.NetworkNoticeDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkNoticeDataSource(impl: NetworkNoticeDataSourceImpl): NetworkNoticeDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt new file mode 100644 index 000000000..69e93a640 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.network.notice.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchNoticeDetailsResponse( + @SerializedName("id") val noticeId: UUID, + @SerializedName("title") val title: String, + @SerializedName("content") val content: String, + @SerializedName("created_at") val createdAt: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt new file mode 100644 index 000000000..92846c69e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.notice.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchNoticesResponse( + @SerializedName("notices") val notices: List, +) { + data class NoticeResponse( + @SerializedName("id") val id: UUID, + @SerializedName("title") val title: String, + @SerializedName("created_at") val createdAt: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt new file mode 100644 index 000000000..2425df223 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.notice.model + +import com.google.gson.annotations.SerializedName + +data class FetchWhetherNewNoticesExistResponse( + @SerializedName("whether_new_notices") val whetherNewNotices: Boolean, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt new file mode 100644 index 000000000..7d2d3506e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt @@ -0,0 +1,45 @@ +package team.aliens.dms.android.network.outing.apiservice + +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.network.outing.model.ApplyOutingRequest +import team.aliens.dms.android.network.outing.model.ApplyOutingResponse +import team.aliens.dms.android.network.outing.model.FetchCurrentAppliedOutingApplicationResponse +import team.aliens.dms.android.network.outing.model.FetchOutingApplicationDetailsResponse +import team.aliens.dms.android.network.outing.model.FetchOutingTypesResponse +import team.aliens.dms.android.network.outing.model.OutingAvailableTimeResponse +import java.util.UUID + +interface OutingApiService { + + @GET("/outings/available-time") + suspend fun fetchOutingAvailableTime( + @Query("dayOfWeek") dayOfWeek: String, + ): OutingAvailableTimeResponse + + @POST("/outings") + suspend fun applyOuting( + @Body req: ApplyOutingRequest, + ): ApplyOutingResponse + + @POST("/outings/{outing-application-id}") + suspend fun fetchOutingApplicationDetails( + @Path("outing-application-id") applicationId: UUID, + ): FetchOutingApplicationDetailsResponse + + @GET("/outings/my") + suspend fun fetchCurrentAppliedOutingApplication(): FetchCurrentAppliedOutingApplicationResponse + + @DELETE("/outings/{outing-application-id}") + suspend fun cancelOuting( + @Path("outing-application-id") applicationId: UUID, + ): Response + + @GET("/outings/types") + suspend fun fetchOutingTypes(): FetchOutingTypesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt new file mode 100644 index 000000000..c21825c75 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt @@ -0,0 +1,19 @@ +package team.aliens.dms.android.network.outing.datasource + +import retrofit2.Response +import team.aliens.dms.android.network.outing.model.ApplyOutingRequest +import team.aliens.dms.android.network.outing.model.ApplyOutingResponse +import team.aliens.dms.android.network.outing.model.FetchCurrentAppliedOutingApplicationResponse +import team.aliens.dms.android.network.outing.model.FetchOutingApplicationDetailsResponse +import team.aliens.dms.android.network.outing.model.FetchOutingTypesResponse +import team.aliens.dms.android.network.outing.model.OutingAvailableTimeResponse +import java.util.UUID + +abstract class OutingNetworkDataSource { + abstract suspend fun fetchOutingAvailableTime(dayOfWeek: String): OutingAvailableTimeResponse + abstract suspend fun applyOuting(req: ApplyOutingRequest): ApplyOutingResponse + abstract suspend fun fetchOutingApplicationDetails(applicationId: UUID): FetchOutingApplicationDetailsResponse + abstract suspend fun fetchCurrentAppliedOutingApplication(): FetchCurrentAppliedOutingApplicationResponse + abstract suspend fun cancelOuting(applicationId: UUID): Response + abstract suspend fun fetchOutingTypes(keyword: String?): FetchOutingTypesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt new file mode 100644 index 000000000..781f636df --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt @@ -0,0 +1,34 @@ +package team.aliens.dms.android.network.outing.datasource + +import retrofit2.Response +import team.aliens.dms.android.network.outing.apiservice.OutingApiService +import team.aliens.dms.android.network.outing.model.ApplyOutingRequest +import team.aliens.dms.android.network.outing.model.ApplyOutingResponse +import team.aliens.dms.android.network.outing.model.FetchCurrentAppliedOutingApplicationResponse +import team.aliens.dms.android.network.outing.model.FetchOutingApplicationDetailsResponse +import team.aliens.dms.android.network.outing.model.FetchOutingTypesResponse +import team.aliens.dms.android.network.outing.model.OutingAvailableTimeResponse +import java.util.UUID +import javax.inject.Inject + +class OutingNetworkDataSourceImpl @Inject constructor( + private val outingApiService: OutingApiService, +) : OutingNetworkDataSource() { + override suspend fun fetchOutingAvailableTime(dayOfWeek: String): OutingAvailableTimeResponse = + outingApiService.fetchOutingAvailableTime(dayOfWeek) + + override suspend fun applyOuting(req: ApplyOutingRequest): ApplyOutingResponse = + outingApiService.applyOuting(req) + + override suspend fun fetchOutingApplicationDetails(applicationId: UUID): FetchOutingApplicationDetailsResponse = + outingApiService.fetchOutingApplicationDetails(applicationId) + + override suspend fun fetchCurrentAppliedOutingApplication(): FetchCurrentAppliedOutingApplicationResponse = + outingApiService.fetchCurrentAppliedOutingApplication() + + override suspend fun cancelOuting(applicationId: UUID): Response = + outingApiService.cancelOuting(applicationId) + + override suspend fun fetchOutingTypes(keyword: String?): FetchOutingTypesResponse = + outingApiService.fetchOutingTypes() +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt new file mode 100644 index 000000000..aa0d14f25 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.network.outing.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.outing.apiservice.OutingApiService +import javax.inject.Singleton + +@InstallIn(SingletonComponent::class) +@Module +internal object ApiServiceModule { + + @Singleton + @Provides + fun provideOutingApiService( + @GlobalRetrofitClient retrofit: Retrofit, + ): OutingApiService = retrofit.create(OutingApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt new file mode 100644 index 000000000..06707e34e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.outing.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.outing.datasource.OutingNetworkDataSource +import team.aliens.dms.android.network.outing.datasource.OutingNetworkDataSourceImpl +import javax.inject.Singleton + +@InstallIn(SingletonComponent::class) +@Module +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindOutingNetworkDataSource(impl: OutingNetworkDataSourceImpl): OutingNetworkDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt new file mode 100644 index 000000000..51a56a734 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt @@ -0,0 +1,13 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class ApplyOutingRequest( + @SerializedName("outing_date") val date: String, + @SerializedName("outing_time") val startTime: String, + @SerializedName("arrival_time") val endTime: String, + @SerializedName("outing_type_title") val type: String, + @SerializedName("reason") val reason: String?, + @SerializedName("companion_ids") val companionIds: List, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt new file mode 100644 index 000000000..fbfef2743 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class ApplyOutingResponse( + @SerializedName("outing_application_id") val applicationId: UUID, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt new file mode 100644 index 000000000..af845242d --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName + +data class FetchCurrentAppliedOutingApplicationResponse( + @SerializedName("id") val id: String, + @SerializedName("outing_date") val date: String, + @SerializedName("outing_type_title") val type: String, + @SerializedName("status") val status: String, + @SerializedName("outing_time") val startTime: String, + @SerializedName("arrival_time") val endTime: String, + @SerializedName("reason") val reason: String?, + @SerializedName("outing_companions") val companionNames: List, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt new file mode 100644 index 000000000..58ae9b027 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName +import java.time.LocalDateTime +import java.util.UUID + +data class FetchOutingApplicationDetailsResponse( + @SerializedName("outing_time") val startTime: LocalDateTime, + @SerializedName("arrival_time") val endTime: LocalDateTime, + @SerializedName("outing_status") val status: String, + @SerializedName("reason") val reason: String?, + @SerializedName("outing_type") val type: String, + @SerializedName("students") val student: List, +) { + data class StudentResponse( + @SerializedName("id") val id: UUID, + @SerializedName("name") val name: String, + @SerializedName("gcn") val gradeClassNumber: String, + @SerializedName("room_number") val roomNumber: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt new file mode 100644 index 000000000..8c64f8b40 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName + +data class FetchOutingTypesResponse( + @SerializedName("titles") val titles: List, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt new file mode 100644 index 000000000..8359efb44 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt @@ -0,0 +1,16 @@ +package team.aliens.dms.android.network.outing.model + +import com.google.gson.annotations.SerializedName + +data class OutingAvailableTimeResponse( + @SerializedName("outing_available_times") val availableTimes: List, +) { + data class AvailableTimeResponse( + @SerializedName("id") val id: String, + @SerializedName("school_id") val schoolId: String, + @SerializedName("outing_time") val startTime: String, + @SerializedName("arrival_time") val endTime: String, + @SerializedName("enabled") val available: Boolean, + @SerializedName("day_of_week") val dayOfWeek: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt new file mode 100644 index 000000000..ca0f79217 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.network.point.apiservice + +import retrofit2.http.GET +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.point.model.FetchPointsResponse + +internal interface PointApiService { + + @GET("/points") + @RequiresAccessToken + suspend fun fetchPoints( + @Query("type") type: String, + @Query("page") page: Long?, + @Query("size") size: Long?, + ): FetchPointsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt new file mode 100644 index 000000000..28cb43369 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.network.point.datasource + +import team.aliens.dms.android.network.point.model.FetchPointsResponse + +abstract class NetworkPointDataSource { + abstract suspend fun fetchPoints( + type: String, + page: Long?, + size: Long?, + ): FetchPointsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt new file mode 100644 index 000000000..28386ac12 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.network.point.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.point.apiservice.PointApiService +import team.aliens.dms.android.network.point.model.FetchPointsResponse +import javax.inject.Inject + +internal class NetworkPointDataSourceImpl @Inject constructor( + private val pointApiService: PointApiService, +) : NetworkPointDataSource() { + + override suspend fun fetchPoints( + type: String, + page: Long?, + size: Long?, + ): FetchPointsResponse = handleNetworkRequest { pointApiService.fetchPoints(type, page, size) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt new file mode 100644 index 000000000..b69a52e38 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.point.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.point.apiservice.PointApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun providePointApiService(@GlobalRetrofitClient retrofit: Retrofit): PointApiService = + retrofit.create(PointApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt new file mode 100644 index 000000000..c763dd010 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.point.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.point.datasource.NetworkPointDataSource +import team.aliens.dms.android.network.point.datasource.NetworkPointDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkPointDataSource(impl: NetworkPointDataSourceImpl): NetworkPointDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt new file mode 100644 index 000000000..66735cbbe --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.network.point.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchPointsResponse( + @SerializedName("total_point") val totalPoint: Int, + @SerializedName("point_histories") val pointResponses: List, +) { + data class PointResponse( + @SerializedName("point_history_id") val id: UUID, + @SerializedName("date") val date: String, + @SerializedName("type") val type: String, + @SerializedName("name") val name: String, + @SerializedName("score") val score: Int, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt new file mode 100644 index 000000000..f336d2df7 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt @@ -0,0 +1,29 @@ +package team.aliens.dms.android.network.remains.apiservice + +import retrofit2.http.GET +import retrofit2.http.PUT +import retrofit2.http.Path +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.remains.model.FetchAppliedRemainsOptionResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsApplicationTimeResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsOptionsResponse +import java.util.UUID + +internal interface RemainsApiService { + + @PUT("/remains/{remains-option-id}") + @RequiresAccessToken + suspend fun updateRemainsOption(@Path("remains-option-id") optionId: UUID) + + @GET("/remains/my") + @RequiresAccessToken + suspend fun fetchAppliedRemainsOption(): FetchAppliedRemainsOptionResponse + + @GET("/remains/available-time") + @RequiresAccessToken + suspend fun fetchRemainsApplicationTime(): FetchRemainsApplicationTimeResponse + + @GET("/remains/options") + @RequiresAccessToken + suspend fun fetchRemainsOptions(): FetchRemainsOptionsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt new file mode 100644 index 000000000..816a68abe --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.network.remains.datasource + +import team.aliens.dms.android.network.remains.model.FetchAppliedRemainsOptionResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsApplicationTimeResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsOptionsResponse +import java.util.UUID + +abstract class NetworkRemainsDataSource { + + abstract suspend fun updateRemainsOption(optionId: UUID) + + abstract suspend fun fetchAppliedRemainsOption(): FetchAppliedRemainsOptionResponse + + abstract suspend fun fetchRemainsApplicationTime(): FetchRemainsApplicationTimeResponse + + abstract suspend fun fetchRemainsOptions(): FetchRemainsOptionsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt new file mode 100644 index 000000000..95f73d225 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt @@ -0,0 +1,25 @@ +package team.aliens.dms.android.network.remains.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.remains.apiservice.RemainsApiService +import team.aliens.dms.android.network.remains.model.FetchAppliedRemainsOptionResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsApplicationTimeResponse +import team.aliens.dms.android.network.remains.model.FetchRemainsOptionsResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkRemainsDataSourceImpl @Inject constructor( + private val remainsApiService: RemainsApiService, +) : NetworkRemainsDataSource() { + override suspend fun updateRemainsOption(optionId: UUID) = + handleNetworkRequest { remainsApiService.updateRemainsOption(optionId) } + + override suspend fun fetchAppliedRemainsOption(): FetchAppliedRemainsOptionResponse = + handleNetworkRequest { remainsApiService.fetchAppliedRemainsOption() } + + override suspend fun fetchRemainsApplicationTime(): FetchRemainsApplicationTimeResponse = + handleNetworkRequest { remainsApiService.fetchRemainsApplicationTime() } + + override suspend fun fetchRemainsOptions(): FetchRemainsOptionsResponse = + handleNetworkRequest { remainsApiService.fetchRemainsOptions() } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt new file mode 100644 index 000000000..665c43069 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.remains.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.remains.apiservice.RemainsApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideRemainsApiService(@GlobalRetrofitClient retrofit: Retrofit): RemainsApiService = + retrofit.create(RemainsApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt new file mode 100644 index 000000000..70ffd1c55 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.remains.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.remains.datasource.NetworkRemainsDataSource +import team.aliens.dms.android.network.remains.datasource.NetworkRemainsDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkRemainsDataSource(impl: NetworkRemainsDataSourceImpl): NetworkRemainsDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt new file mode 100644 index 000000000..b8c135d5f --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt @@ -0,0 +1,9 @@ +package team.aliens.dms.android.network.remains.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchAppliedRemainsOptionResponse( + @SerializedName("id") val remainsOptionId: UUID, + @SerializedName("title") val title: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt new file mode 100644 index 000000000..8f2a292fc --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.network.remains.model + +import com.google.gson.annotations.SerializedName +import java.time.DayOfWeek + +data class FetchRemainsApplicationTimeResponse( + @SerializedName("start_day_of_week") val startDayOfWeek: DayOfWeek, + @SerializedName("start_time") val startTime: String, + @SerializedName("end_day_of_week") val endDayOfWeek: DayOfWeek, + @SerializedName("end_time") val endTime: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt new file mode 100644 index 000000000..b6a2d497b --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt @@ -0,0 +1,15 @@ +package team.aliens.dms.android.network.remains.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchRemainsOptionsResponse( + @SerializedName("remain_options") val remainsOptionResponse: List, +) { + data class RemainsOptionResponse( + @SerializedName("id") val id: UUID, + @SerializedName("title") val title: String, + @SerializedName("description") val description: String, + @SerializedName("is_applied") val applied: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt new file mode 100644 index 000000000..3b3db2f85 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt @@ -0,0 +1,27 @@ +package team.aliens.dms.android.network.school.apiservice + +import retrofit2.http.GET +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.network.school.model.ExamineSchoolVerificationCodeResponse +import team.aliens.dms.android.network.school.model.FetchSchoolVerificationQuestionResponse +import team.aliens.dms.android.network.school.model.FetchSchoolsResponse +import java.util.UUID + +internal interface SchoolApiService { + + @GET("/schools") + suspend fun fetchSchools(): FetchSchoolsResponse + + @GET("/schools/question/{school-id}") + suspend fun fetchSchoolVerificationQuestion(@Path("school-id") schoolId: UUID): FetchSchoolVerificationQuestionResponse + + @GET("/schools/answer/{school-id}") + suspend fun examineSchoolVerificationQuestion( + @Path("school-id") schoolId: UUID, + @Query("answer") answer: String, + ) + + @GET("/schools/code") + suspend fun examineSchoolVerificationCode(@Query("school_code") schoolCode: String): ExamineSchoolVerificationCodeResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt new file mode 100644 index 000000000..5f8a29e89 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.school.datasource + +import team.aliens.dms.android.network.school.model.ExamineSchoolVerificationCodeResponse +import team.aliens.dms.android.network.school.model.FetchSchoolVerificationQuestionResponse +import team.aliens.dms.android.network.school.model.FetchSchoolsResponse +import java.util.UUID + +abstract class NetworkSchoolDataSource { + + abstract suspend fun fetchSchools(): FetchSchoolsResponse + + abstract suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): FetchSchoolVerificationQuestionResponse + + abstract suspend fun examineSchoolVerificationQuestion( + schoolId: UUID, + answer: String, + ) + + abstract suspend fun examineSchoolVerificationCode(code: String): ExamineSchoolVerificationCodeResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt new file mode 100644 index 000000000..6970cfa59 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt @@ -0,0 +1,27 @@ +package team.aliens.dms.android.network.school.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.school.apiservice.SchoolApiService +import team.aliens.dms.android.network.school.model.ExamineSchoolVerificationCodeResponse +import team.aliens.dms.android.network.school.model.FetchSchoolVerificationQuestionResponse +import team.aliens.dms.android.network.school.model.FetchSchoolsResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkSchoolDataSourceImpl @Inject constructor( + private val schoolApiService: SchoolApiService, +) : NetworkSchoolDataSource() { + override suspend fun fetchSchools(): FetchSchoolsResponse = + handleNetworkRequest { schoolApiService.fetchSchools() } + + override suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): FetchSchoolVerificationQuestionResponse = + handleNetworkRequest { schoolApiService.fetchSchoolVerificationQuestion(schoolId) } + + override suspend fun examineSchoolVerificationQuestion( + schoolId: UUID, + answer: String, + ) = handleNetworkRequest { schoolApiService.examineSchoolVerificationQuestion(schoolId, answer) } + + override suspend fun examineSchoolVerificationCode(code: String): ExamineSchoolVerificationCodeResponse = + handleNetworkRequest { schoolApiService.examineSchoolVerificationCode(code) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt new file mode 100644 index 000000000..014af5db4 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.school.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.school.apiservice.SchoolApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideSchoolApiService(@GlobalRetrofitClient retrofit: Retrofit): SchoolApiService = + retrofit.create(SchoolApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt new file mode 100644 index 000000000..ef0827376 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.school.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.school.datasource.NetworkSchoolDataSource +import team.aliens.dms.android.network.school.datasource.NetworkSchoolDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkSchoolDataSource(impl: NetworkSchoolDataSourceImpl): NetworkSchoolDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt new file mode 100644 index 000000000..cd2a84a3a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.school.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class ExamineSchoolVerificationCodeResponse( + @SerializedName("school_id") val schoolId: UUID, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt new file mode 100644 index 000000000..b98673d9c --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.school.model + +import com.google.gson.annotations.SerializedName + +data class FetchSchoolVerificationQuestionResponse( + @SerializedName("question") val question: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt new file mode 100644 index 000000000..ba6cfc93c --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.school.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchSchoolsResponse( + @SerializedName("schools") val schools: List, +) { + data class SchoolResponse( + @SerializedName("id") val id: UUID, + @SerializedName("name") val name: String, + @SerializedName("address") val address: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt new file mode 100644 index 000000000..519cbc3da --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt @@ -0,0 +1,67 @@ +package team.aliens.dms.android.network.student.apiservice + +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.PATCH +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.student.model.EditProfileRequest +import team.aliens.dms.android.network.student.model.ExamineStudentNumberResponse +import team.aliens.dms.android.network.student.model.FetchMyPageResponse +import team.aliens.dms.android.network.student.model.FetchStudentsResponse +import team.aliens.dms.android.network.student.model.FindIdResponse +import team.aliens.dms.android.network.student.model.ResetPasswordRequest +import team.aliens.dms.android.network.student.model.SignUpRequest +import team.aliens.dms.android.network.student.model.SignUpResponse +import java.util.UUID + +internal interface StudentApiService { + + @POST("/students/signup") + suspend fun signUp(@Body request: SignUpRequest): SignUpResponse + + @GET("/students/name") + suspend fun examineStudentNumber( + @Query("school_id") schoolId: UUID, + @Query("grade") grade: Int, + @Query("class_room") classRoom: Int, + @Query("number") number: Int, + ): ExamineStudentNumberResponse + + @GET("/students/account-id/{school-id}") + suspend fun findId( + @Path("school-id") schoolId: UUID, + @Query("name") studentName: String, + @Query("grade") grade: Int, + @Query("class_room") classRoom: Int, + @Query("number") number: Int, + ): FindIdResponse + + @PATCH("/students/password/initialization") + suspend fun resetPassword(@Body request: ResetPasswordRequest): Response? + + @GET("/students/account-id/duplication") + suspend fun checkIdDuplication(@Query("account_id") accountId: String) + + @GET("/students/email/duplication") + suspend fun checkEmailDuplication(@Query("email") email: String) + + @GET("/students/profile") + @RequiresAccessToken + suspend fun fetchMyPage(): FetchMyPageResponse + + @PATCH("/students/profile") + @RequiresAccessToken + suspend fun editProfile(@Body request: EditProfileRequest): Response? + + @DELETE("/students") + @RequiresAccessToken + suspend fun withdraw() + + @GET("/students") + suspend fun fetchStudents(): FetchStudentsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt new file mode 100644 index 000000000..a0ca73258 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt @@ -0,0 +1,45 @@ +package team.aliens.dms.android.network.student.datasource + +import team.aliens.dms.android.network.student.model.EditProfileRequest +import team.aliens.dms.android.network.student.model.ExamineStudentNumberResponse +import team.aliens.dms.android.network.student.model.FetchMyPageResponse +import team.aliens.dms.android.network.student.model.FetchStudentsResponse +import team.aliens.dms.android.network.student.model.FindIdResponse +import team.aliens.dms.android.network.student.model.ResetPasswordRequest +import team.aliens.dms.android.network.student.model.SignUpRequest +import team.aliens.dms.android.network.student.model.SignUpResponse +import java.util.UUID + +abstract class NetworkStudentDataSource { + + abstract suspend fun signUp(request: SignUpRequest): SignUpResponse + + abstract suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): ExamineStudentNumberResponse + + abstract suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): FindIdResponse + + abstract suspend fun resetPassword(request: ResetPasswordRequest) + + abstract suspend fun checkIdDuplication(id: String) + + abstract suspend fun checkEmailDuplication(email: String) + + abstract suspend fun fetchMyPage(): FetchMyPageResponse + + abstract suspend fun editProfile(request: EditProfileRequest) + + abstract suspend fun withdraw() + + abstract suspend fun fetchStudents(): FetchStudentsResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt new file mode 100644 index 000000000..c2f5ffaf1 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt @@ -0,0 +1,66 @@ +package team.aliens.dms.android.network.student.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.student.apiservice.StudentApiService +import team.aliens.dms.android.network.student.model.EditProfileRequest +import team.aliens.dms.android.network.student.model.ExamineStudentNumberResponse +import team.aliens.dms.android.network.student.model.FetchMyPageResponse +import team.aliens.dms.android.network.student.model.FetchStudentsResponse +import team.aliens.dms.android.network.student.model.FindIdResponse +import team.aliens.dms.android.network.student.model.ResetPasswordRequest +import team.aliens.dms.android.network.student.model.SignUpRequest +import team.aliens.dms.android.network.student.model.SignUpResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkStudentDataSourceImpl @Inject constructor( + private val studentApiService: StudentApiService, +) : NetworkStudentDataSource() { + override suspend fun signUp(request: SignUpRequest): SignUpResponse = + handleNetworkRequest { studentApiService.signUp(request) } + + override suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): ExamineStudentNumberResponse = studentApiService.examineStudentNumber( + schoolId = schoolId, + grade = grade, + classRoom = classroom, + number = number, + ) + + override suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): FindIdResponse = studentApiService.findId( + schoolId = schoolId, + studentName = studentName, + grade = grade, + classRoom = classRoom, + number = number, + ) + + override suspend fun resetPassword(request: ResetPasswordRequest): Unit = + handleNetworkRequest { studentApiService.resetPassword(request) } + + override suspend fun checkIdDuplication(id: String) = + handleNetworkRequest { studentApiService.checkIdDuplication(id) } + + override suspend fun checkEmailDuplication(email: String) = + handleNetworkRequest { studentApiService.checkEmailDuplication(email) } + + override suspend fun fetchMyPage(): FetchMyPageResponse = + handleNetworkRequest { studentApiService.fetchMyPage() } + + override suspend fun editProfile(request: EditProfileRequest): Unit = + handleNetworkRequest { studentApiService.editProfile(request) } + + override suspend fun withdraw() = handleNetworkRequest { studentApiService.withdraw() } + override suspend fun fetchStudents(): FetchStudentsResponse = + handleNetworkRequest { studentApiService.fetchStudents() } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt new file mode 100644 index 000000000..0a397a6ab --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.student.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.student.apiservice.StudentApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideStudentApiService(@GlobalRetrofitClient retrofit: Retrofit): StudentApiService = + retrofit.create(StudentApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt new file mode 100644 index 000000000..2e61b0a43 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.student.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.student.datasource.NetworkStudentDataSource +import team.aliens.dms.android.network.student.datasource.NetworkStudentDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkStudentDataSource(impl: NetworkStudentDataSourceImpl): NetworkStudentDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt deleted file mode 100644 index 97cf9f1cf..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/mapper/StudentMapper.kt +++ /dev/null @@ -1,16 +0,0 @@ -package team.aliens.dms.android.data.student.mapper - -import team.aliens.dms.android.data.student.model.MyPage -import team.aliens.dms.android.network.student.model.FetchMyPageResponse -import team.aliens.dms.android.shared.model.Sex - -internal fun FetchMyPageResponse.toModel(): MyPage = MyPage( - schoolName = this.schoolName, - name = this.studentName, - gcn = this.gradeClassNumber, - profileImageUrl = this.profileImageUrl, - sex = Sex.valueOf(this.sex), - bonusPoint = this.bonusPoint, - minusPoint = this.minusPoint, - phrase = this.phrase, -) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt new file mode 100644 index 000000000..52a6fe542 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class EditProfileRequest( + @SerializedName("profile_image_url") val profileImageUrl: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt new file mode 100644 index 000000000..c1f3f61f3 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class ExamineStudentNumberResponse( + @SerializedName("name") val studentName: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt new file mode 100644 index 000000000..964e6c10b --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class FetchMyPageResponse( + @SerializedName("school_name") val schoolName: String, + @SerializedName("name") val studentName: String, + @SerializedName("gcn") val gradeClassNumber: String, + @SerializedName("profile_image_url") val profileImageUrl: String, + @SerializedName("sex") val sex: String, + @SerializedName("bonus_point") val bonusPoint: Int, + @SerializedName("minus_point") val minusPoint: Int, + @SerializedName("phrase") val phrase: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt new file mode 100644 index 000000000..af7e1779e --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class FetchStudentsResponse( + @SerializedName("students") val students: List, +) { + data class StudentResponse( + @SerializedName("id") val id: String, + @SerializedName("name") val name: String, + @SerializedName("gcn") val gradeClassNumber: String, + @SerializedName("profile_image_url") val profileImageUrl: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt new file mode 100644 index 000000000..d2b34c6bc --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt @@ -0,0 +1,7 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class FindIdResponse( + @SerializedName("email") val email: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt deleted file mode 100644 index 40a7f81cd..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/HashedEmail.kt +++ /dev/null @@ -1,3 +0,0 @@ -package team.aliens.dms.android.data.student.model - -typealias HashedEmail = String diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt deleted file mode 100644 index 24efe466b..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/MyPage.kt +++ /dev/null @@ -1,14 +0,0 @@ -package team.aliens.dms.android.data.student.model - -import team.aliens.dms.android.shared.model.Sex - -data class MyPage( - val schoolName: String = "", - val name: String = "", - val gcn: String = "", - val profileImageUrl: String? = null, - val sex: Sex = Sex.ALL, - val bonusPoint: Int = 0, - val minusPoint: Int = 0, - val phrase: String = "", -) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt new file mode 100644 index 000000000..06bcf2c24 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt @@ -0,0 +1,11 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class ResetPasswordRequest( + @SerializedName("account_id") val accountId: String, + @SerializedName("name") val studentName: String, + @SerializedName("email") val email: String, + @SerializedName("auth_code") val emailVerificationCode: String, + @SerializedName("new_password") val newPassword: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt new file mode 100644 index 000000000..7d8116307 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt @@ -0,0 +1,16 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName + +data class SignUpRequest( + @SerializedName("school_code") val schoolVerificationCode: String, + @SerializedName("school_answer") val schoolVerificationAnswer: String, + @SerializedName("email") val email: String, + @SerializedName("auth_code") val emailVerificationCode: String, + @SerializedName("grade") val grade: Int, + @SerializedName("class_room") val classRoom: Int, + @SerializedName("number") val number: Int, + @SerializedName("account_id") val accountId: String, + @SerializedName("password") val password: String, + @SerializedName("profile_image_url") val profileImageUrl: String?, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt new file mode 100644 index 000000000..d5a41e335 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt @@ -0,0 +1,45 @@ +package team.aliens.dms.android.network.student.model + +import com.google.gson.annotations.SerializedName +import team.aliens.dms.android.core.jwt.AccessToken +import team.aliens.dms.android.core.jwt.RefreshToken +import team.aliens.dms.android.core.jwt.Tokens +import team.aliens.dms.android.core.school.Features +import team.aliens.dms.android.shared.date.toLocalDateTime + +data class SignUpResponse( + @SerializedName("access_token") val accessToken: String, + @SerializedName("access_token_expired_at") val accessTokenExpiration: String, + @SerializedName("refresh_token") val refreshToken: String, + @SerializedName("refresh_token_expired_at") val refreshTokenExpiration: String, + @SerializedName("features") val features: FeaturesResponse, +) { + data class FeaturesResponse( + @SerializedName("meal_service") val mealService: Boolean, + @SerializedName("notice_service") val noticeService: Boolean, + @SerializedName("point_service") val pointService: Boolean, + @SerializedName("study_room_service") val studyRoomService: Boolean, + @SerializedName("remain_service") val remainsService: Boolean, + ) +} + +fun SignUpResponse.extractTokens(): Tokens = Tokens( + accessToken = AccessToken( + value = this.accessToken, + expiration = this.accessTokenExpiration.toLocalDateTime(), + ), + refreshToken = RefreshToken( + value = this.refreshToken, + expiration = this.refreshTokenExpiration.toLocalDateTime(), + ), +) + +fun SignUpResponse.extractFeatures(): Features = features.run { + Features( + mealService = mealService, + noticeService = noticeService, + pointService = pointService, + studyRoomService = studyRoomService, + remainsService = remainsService, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt deleted file mode 100644 index d32bfde24..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/Student.kt +++ /dev/null @@ -1,21 +0,0 @@ -package team.aliens.dms.android.data.student.model - -import team.aliens.dms.android.network.student.model.FetchStudentsResponse -import java.util.UUID - -data class Student( - val id: UUID, - val name: String, - val gradeClassNumber: String, - val profileImageUrl: String, -) - -fun FetchStudentsResponse.toModel(): List = - this.students.map(FetchStudentsResponse.StudentResponse::toModel) - -fun FetchStudentsResponse.StudentResponse.toModel(): Student = Student( - id = UUID.fromString(this.id), - name = this.name, - gradeClassNumber = this.gradeClassNumber, - profileImageUrl = this.profileImageUrl, -) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt deleted file mode 100644 index 53f3415de..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/model/StudentName.kt +++ /dev/null @@ -1,3 +0,0 @@ -package team.aliens.dms.android.data.student.model - -typealias StudentName = String diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt deleted file mode 100644 index abe66b737..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepository.kt +++ /dev/null @@ -1,58 +0,0 @@ -package team.aliens.dms.android.data.student.repository - -import team.aliens.dms.android.data.student.model.HashedEmail -import team.aliens.dms.android.data.student.model.MyPage -import team.aliens.dms.android.data.student.model.Student -import team.aliens.dms.android.data.student.model.StudentName -import java.util.UUID - -abstract class StudentRepository { - - abstract suspend fun signUp( - schoolVerificationCode: String, - schoolVerificationAnswer: String, - email: String, - emailVerificationCode: String, - grade: Int, - classRoom: Int, - number: Int, - accountId: String, - password: String, - profileImageUrl: String?, - ) - - abstract suspend fun examineStudentNumber( - schoolId: UUID, - grade: Int, - classroom: Int, - number: Int, - ): StudentName - - abstract suspend fun findId( - schoolId: UUID, - studentName: String, - grade: Int, - classRoom: Int, - number: Int, - ): HashedEmail - - abstract suspend fun resetPassword( - accountId: String, - studentName: String, - email: String, - emailVerificationCode: String, - newPassword: String, - ) - - abstract suspend fun checkIdDuplication(id: String) - - abstract suspend fun checkEmailDuplication(email: String) - - abstract suspend fun fetchMyPage(): MyPage - - abstract suspend fun editProfile(profileImageUrl: String) - - abstract suspend fun withdraw() - - abstract suspend fun fetchStudents(): List -} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt deleted file mode 100644 index a0f23c27c..000000000 --- a/network/src/dev/kotlin/team.aliens.dms.android.network/student/repository/StudentRepositoryImpl.kt +++ /dev/null @@ -1,127 +0,0 @@ -package team.aliens.dms.android.data.student.repository - -import team.aliens.dms.android.core.jwt.JwtProvider -import team.aliens.dms.android.core.school.SchoolProvider -import team.aliens.dms.android.data.student.mapper.toModel -import team.aliens.dms.android.data.student.model.HashedEmail -import team.aliens.dms.android.data.student.model.MyPage -import team.aliens.dms.android.data.student.model.Student -import team.aliens.dms.android.data.student.model.StudentName -import team.aliens.dms.android.data.student.model.toModel -import team.aliens.dms.android.network.student.datasource.NetworkStudentDataSource -import team.aliens.dms.android.network.student.model.EditProfileRequest -import team.aliens.dms.android.network.student.model.ResetPasswordRequest -import team.aliens.dms.android.network.student.model.SignUpRequest -import team.aliens.dms.android.network.student.model.SignUpResponse -import team.aliens.dms.android.network.student.model.extractFeatures -import team.aliens.dms.android.network.student.model.extractTokens -import java.util.UUID -import javax.inject.Inject - -internal class StudentRepositoryImpl @Inject constructor( - private val networkStudentDataSource: NetworkStudentDataSource, - private val jwtProvider: JwtProvider, - private val schoolProvider: SchoolProvider, -) : StudentRepository() { - - override suspend fun signUp( - schoolVerificationCode: String, - schoolVerificationAnswer: String, - email: String, - emailVerificationCode: String, - grade: Int, - classRoom: Int, - number: Int, - accountId: String, - password: String, - profileImageUrl: String?, - ) { - val response: SignUpResponse = networkStudentDataSource.signUp( - request = SignUpRequest( - schoolVerificationCode = schoolVerificationCode, - schoolVerificationAnswer = schoolVerificationAnswer, - email = email, - emailVerificationCode = emailVerificationCode, - grade = grade, - classRoom = classRoom, - number = number, - accountId = accountId, - password = password, - profileImageUrl = profileImageUrl, - ), - ) - val tokens = response.extractTokens() - val features = response.extractFeatures() - - jwtProvider.updateTokens(tokens = tokens) - schoolProvider.updateFeatures(features = features) - } - - override suspend fun examineStudentNumber( - schoolId: UUID, - grade: Int, - classroom: Int, - number: Int, - ): StudentName = networkStudentDataSource.examineStudentNumber( - schoolId = schoolId, - grade = grade, - classroom = classroom, - number = number, - ).studentName - - override suspend fun findId( - schoolId: UUID, - studentName: String, - grade: Int, - classRoom: Int, - number: Int, - ): HashedEmail = - networkStudentDataSource.findId( - schoolId = schoolId, - studentName = studentName, - grade = grade, - classRoom = classRoom, - number = number, - ).email - - override suspend fun resetPassword( - accountId: String, - studentName: String, - email: String, - emailVerificationCode: String, - newPassword: String, - ) { - networkStudentDataSource.resetPassword( - ResetPasswordRequest( - accountId = accountId, - studentName = studentName, - email = email, - emailVerificationCode = emailVerificationCode, - newPassword = newPassword, - ), - ) - } - - override suspend fun checkIdDuplication(id: String) { - networkStudentDataSource.checkIdDuplication(id = id) - } - - override suspend fun checkEmailDuplication(email: String) { - networkStudentDataSource.checkEmailDuplication(email = email) - } - - override suspend fun fetchMyPage(): MyPage = networkStudentDataSource.fetchMyPage().toModel() - - override suspend fun editProfile(profileImageUrl: String) { - networkStudentDataSource.editProfile(request = EditProfileRequest(profileImageUrl)) - } - - override suspend fun withdraw() { - networkStudentDataSource.withdraw() - jwtProvider.clearCaches() - schoolProvider.clearCaches() - } - - override suspend fun fetchStudents(): List = - networkStudentDataSource.fetchStudents().toModel() -} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt new file mode 100644 index 000000000..533f8755a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt @@ -0,0 +1,60 @@ +package team.aliens.dms.android.network.studyroom.apiservice + +import retrofit2.Response +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.PUT +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.studyroom.model.FetchAppliedStudyRoomResponse +import team.aliens.dms.android.network.studyroom.model.FetchAvailableStudyRoomTimesResponse +import team.aliens.dms.android.network.studyroom.model.FetchSeatTypesResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomApplicationTimeResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomDetailsResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomsResponse +import java.util.UUID + +internal interface StudyRoomApiService { + + @GET("/study-rooms/available-time") + @RequiresAccessToken + suspend fun fetchStudyRoomApplicationTime(): FetchStudyRoomApplicationTimeResponse + + @PUT("/study-rooms/seats/{seat-id}") + @RequiresAccessToken + suspend fun applySeat( + @Path("seat-id") seatId: UUID, + @Query("time_slot") timeslot: UUID, + ): Response + + @DELETE("/study-rooms/seats/{seat-id}") + @RequiresAccessToken + suspend fun cancelSeat( + @Path("seat-id") seatId: UUID, + @Query("time_slot") timeslot: UUID, + ): Response + + @GET("/study-rooms/list/students") + @RequiresAccessToken + suspend fun fetchStudyRooms(@Query("time_slot") timeslot: UUID): FetchStudyRoomsResponse + + @GET("/study-rooms/{study-room-id}/students") + @RequiresAccessToken + suspend fun fetchStudyRoomDetails( + @Path("study-room-id") studyRoomId: UUID, + @Query("time_slot") timeslot: UUID, + ): FetchStudyRoomDetailsResponse + + @GET("/study-rooms/my") + @RequiresAccessToken + suspend fun fetchAppliedStudyRoom(): FetchAppliedStudyRoomResponse + + @GET("/study-rooms/types") + @RequiresAccessToken + suspend fun fetchSeatTypes(@Query("study_room_id") studyRoomId: UUID): FetchSeatTypesResponse + + @GET("/study-rooms/time-slots") + @RequiresAccessToken + suspend fun fetchAvailableStudyRoomTimes(): FetchAvailableStudyRoomTimesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt new file mode 100644 index 000000000..940a13cbf --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt @@ -0,0 +1,37 @@ +package team.aliens.dms.android.network.studyroom.datasource + +import team.aliens.dms.android.network.studyroom.model.FetchAppliedStudyRoomResponse +import team.aliens.dms.android.network.studyroom.model.FetchAvailableStudyRoomTimesResponse +import team.aliens.dms.android.network.studyroom.model.FetchSeatTypesResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomApplicationTimeResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomDetailsResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomsResponse +import java.util.UUID + +abstract class NetworkStudyRoomDataSource { + + abstract suspend fun fetchStudyRoomApplicationTime(): FetchStudyRoomApplicationTimeResponse + + abstract suspend fun applySeat( + seatId: UUID, + timeslot: UUID, + ) + + abstract suspend fun cancelSeat( + seatId: UUID, + timeslot: UUID, + ) + + abstract suspend fun fetchStudyRooms(timeslot: UUID): FetchStudyRoomsResponse + + abstract suspend fun fetchStudyRoomDetails( + studyRoomId: UUID, + timeslot: UUID, + ): FetchStudyRoomDetailsResponse + + abstract suspend fun fetchAppliedStudyRoom(): FetchAppliedStudyRoomResponse + + abstract suspend fun fetchSeatTypes(studyRoomId: UUID): FetchSeatTypesResponse + + abstract suspend fun fetchAvailableStudyRoomTimes(): FetchAvailableStudyRoomTimesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt new file mode 100644 index 000000000..37743c145 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt @@ -0,0 +1,52 @@ +package team.aliens.dms.android.network.studyroom.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.studyroom.apiservice.StudyRoomApiService +import team.aliens.dms.android.network.studyroom.model.FetchAppliedStudyRoomResponse +import team.aliens.dms.android.network.studyroom.model.FetchAvailableStudyRoomTimesResponse +import team.aliens.dms.android.network.studyroom.model.FetchSeatTypesResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomApplicationTimeResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomDetailsResponse +import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomsResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkStudyRoomDataSourceImpl @Inject constructor( + private val studyRoomApiService: StudyRoomApiService, +) : NetworkStudyRoomDataSource() { + + override suspend fun fetchStudyRoomApplicationTime(): FetchStudyRoomApplicationTimeResponse = + handleNetworkRequest { studyRoomApiService.fetchStudyRoomApplicationTime() } + + override suspend fun applySeat( + seatId: UUID, + timeslot: UUID, + ) { + handleNetworkRequest { studyRoomApiService.applySeat(seatId, timeslot) } + } + + override suspend fun cancelSeat( + seatId: UUID, + timeslot: UUID, + ) { + handleNetworkRequest { studyRoomApiService.cancelSeat(seatId, timeslot) } + } + + override suspend fun fetchStudyRooms(timeslot: UUID): FetchStudyRoomsResponse = + handleNetworkRequest { studyRoomApiService.fetchStudyRooms(timeslot) } + + override suspend fun fetchStudyRoomDetails( + studyRoomId: UUID, + timeslot: UUID, + ): FetchStudyRoomDetailsResponse = + handleNetworkRequest { studyRoomApiService.fetchStudyRoomDetails(studyRoomId, timeslot) } + + override suspend fun fetchAppliedStudyRoom(): FetchAppliedStudyRoomResponse = + handleNetworkRequest { studyRoomApiService.fetchAppliedStudyRoom() } + + override suspend fun fetchSeatTypes(studyRoomId: UUID): FetchSeatTypesResponse = + handleNetworkRequest { studyRoomApiService.fetchSeatTypes(studyRoomId) } + + override suspend fun fetchAvailableStudyRoomTimes(): FetchAvailableStudyRoomTimesResponse = + handleNetworkRequest { studyRoomApiService.fetchAvailableStudyRoomTimes() } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt new file mode 100644 index 000000000..f7ff1b221 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.studyroom.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.studyroom.apiservice.StudyRoomApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideStudyRoomApiService(@GlobalRetrofitClient retrofit: Retrofit): StudyRoomApiService = + retrofit.create(StudyRoomApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt new file mode 100644 index 000000000..5a6b4bd02 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.studyroom.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.studyroom.datasource.NetworkStudyRoomDataSource +import team.aliens.dms.android.network.studyroom.datasource.NetworkStudyRoomDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkStudyRoomDataSource(impl: NetworkStudyRoomDataSourceImpl): NetworkStudyRoomDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt new file mode 100644 index 000000000..58e7259a9 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName + +data class FetchAppliedStudyRoomResponse( + @SerializedName("floor") val floor: Int, + @SerializedName("name") val name: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt new file mode 100644 index 000000000..912e56def --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchAvailableStudyRoomTimesResponse( + @SerializedName("time_slots") val availableStudyRoomTimes: List, +) { + data class AvailableStudyRoomTimeResponse( + @SerializedName("id") val id: UUID, + @SerializedName("start_time") val startTime: String, + @SerializedName("end_time") val endTime: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt new file mode 100644 index 000000000..a7b099661 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt @@ -0,0 +1,14 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchSeatTypesResponse( + @SerializedName("types") val types: List, +) { + data class SeatTypeResponse( + @SerializedName("id") val id: UUID, + @SerializedName("name") val name: String, + @SerializedName("color") val color: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt new file mode 100644 index 000000000..1813ea222 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName + +data class FetchStudyRoomApplicationTimeResponse( + @SerializedName("start_at") val startAt: String, + @SerializedName("end_at") val endAt: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt new file mode 100644 index 000000000..6c1f61710 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt @@ -0,0 +1,46 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchStudyRoomDetailsResponse( + @SerializedName("id") val id: UUID, + @SerializedName("floor") val floor: Int, + @SerializedName("name") val name: String, + @SerializedName("start_time") val startTime: String, + @SerializedName("end_time") val endTime: String, + @SerializedName("in_use_headcount") val inUseHeadcount: Int, + @SerializedName("total_available_seat") val totalAvailableSeat: Int, + @SerializedName("available_sex") val availableSex: String, + @SerializedName("available_grade") val availableGrade: Int, + @SerializedName("east_description") val eastDescription: String, + @SerializedName("west_description") val westDescription: String, + @SerializedName("south_description") val southDescription: String, + @SerializedName("north_description") val northDescription: String, + @SerializedName("total_width_size") val totalWidthSize: Int, + @SerializedName("total_height_size") val totalHeightSize: Int, + @SerializedName("seats") val seats: List, +) { + data class SeatResponse( + @SerializedName("id") val id: UUID, + @SerializedName("width_location") val row: Int, + @SerializedName("height_location") val column: Int, + @SerializedName("number") val number: Int?, + @SerializedName("type") val type: SeatTypeResponse?, + @SerializedName("status") val status: String, + @SerializedName("is_mine") val isMine: Boolean, + @SerializedName("student") val student: StudentResponse?, + ) { + + data class SeatTypeResponse( + @SerializedName("id") val id: UUID, + @SerializedName("name") val name: String, + @SerializedName("color") val color: String, + ) + + data class StudentResponse( + @SerializedName("id") val id: UUID, + @SerializedName("name") val name: String, + ) + } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt new file mode 100644 index 000000000..a6422d4a8 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt @@ -0,0 +1,19 @@ +package team.aliens.dms.android.network.studyroom.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchStudyRoomsResponse( + @SerializedName("study_rooms") val studyRoomResponses: List, +) { + data class StudyRoomResponse( + @SerializedName("id") val id: UUID, + @SerializedName("floor") val floor: Int, + @SerializedName("name") val name: String, + @SerializedName("available_grade") val availableGrade: Int, + @SerializedName("available_sex") val availableSex: String, + @SerializedName("in_use_headcount") val inUseHeadcount: Int, + @SerializedName("total_available_seat") val totalAvailableSeat: Int, + @SerializedName("is_mine") val isMine: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt new file mode 100644 index 000000000..c08987cbe --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.user.apiservice + +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.GET +import retrofit2.http.PATCH +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.user.model.EditPasswordRequest + +internal interface UserApiService { + + @PATCH("/users/password") + @RequiresAccessToken + suspend fun editPassword(@Body request: EditPasswordRequest): Response? + + @GET("/users/password") + @RequiresAccessToken + suspend fun comparePassword(@Query("password") password: String) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt new file mode 100644 index 000000000..a22084ba3 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt @@ -0,0 +1,10 @@ +package team.aliens.dms.android.network.user.datasource + +import team.aliens.dms.android.network.user.model.EditPasswordRequest + +abstract class NetworkUserDataSource { + + abstract suspend fun editPassword(request: EditPasswordRequest) + + abstract suspend fun comparePassword(password: String) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt new file mode 100644 index 000000000..4caf00d07 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt @@ -0,0 +1,19 @@ +package team.aliens.dms.android.network.user.datasource + +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.user.apiservice.UserApiService +import team.aliens.dms.android.network.user.exception.PasswordMismatchException +import team.aliens.dms.android.network.user.model.EditPasswordRequest +import javax.inject.Inject + +internal class NetworkUserDataSourceImpl @Inject constructor( + private val userApiService: UserApiService, +) : NetworkUserDataSource() { + override suspend fun editPassword(request: EditPasswordRequest) { + handleNetworkRequest { userApiService.editPassword(request) } + } + + override suspend fun comparePassword(password: String) = handleNetworkRequest( + on401 = { throw PasswordMismatchException() }, + ) { userApiService.comparePassword(password) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt new file mode 100644 index 000000000..6ec73b920 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt @@ -0,0 +1,20 @@ +package team.aliens.dms.android.network.user.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.user.apiservice.UserApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideUserApiService(@GlobalRetrofitClient retrofit: Retrofit): UserApiService = + retrofit.create(UserApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt new file mode 100644 index 000000000..300b6b1c6 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.user.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.user.datasource.NetworkUserDataSource +import team.aliens.dms.android.network.user.datasource.NetworkUserDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindNetworkUserDataSource(impl: NetworkUserDataSourceImpl): NetworkUserDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt new file mode 100644 index 000000000..eeaaff894 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt @@ -0,0 +1,3 @@ +package team.aliens.dms.android.network.user.exception + +class PasswordMismatchException : RuntimeException("Password mismatch") diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt new file mode 100644 index 000000000..f725332c9 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt @@ -0,0 +1,8 @@ +package team.aliens.dms.android.network.user.model + +import com.google.gson.annotations.SerializedName + +data class EditPasswordRequest( + @SerializedName("current_password") val currentPassword: String, + @SerializedName("new_password") val newPassword: String, +) diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt new file mode 100644 index 000000000..eac7cc4a9 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt @@ -0,0 +1,46 @@ +package team.aliens.dms.android.network.voting.apiservice + +import java.time.LocalDate +import retrofit2.Response +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.POST +import retrofit2.http.Path +import retrofit2.http.Query +import team.aliens.dms.android.core.jwt.RequiresAccessToken +import team.aliens.dms.android.network.voting.model.FetchAllVoteSearchResponse +import team.aliens.dms.android.network.voting.model.FetchCheckVotingItemResponse +import team.aliens.dms.android.network.voting.model.FetchModelStudentCandidatesResponse +import java.util.UUID + +internal interface VotingApiService { + + @GET("/votes") + @RequiresAccessToken + suspend fun fetchAllVoteSearch(): FetchAllVoteSearchResponse + + @GET("/votes/option/{voting-topic-id}") + @RequiresAccessToken + suspend fun fetchCheckVotingItem( + @Path("voting-topic-id") votingTopicId: UUID, + ): FetchCheckVotingItemResponse + + @POST("/votes/student/{voting-topic-id}") + @RequiresAccessToken + suspend fun fetchCreateVotingItem( + @Path("voting-topic-id") votingTopicId: UUID, + @Query("selected-id") selectedId: UUID, + ): Response? + + @DELETE("/votes/student/{vote_id}") + @RequiresAccessToken + suspend fun fetchDeleteVotingItem( + @Path("vote_id") voteId: UUID, + ): Response? + + @GET("/students/step/candidate-list") + @RequiresAccessToken + suspend fun fetchModelStudentCandidates( + @Query("date") requestDate: LocalDate, + ): FetchModelStudentCandidatesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt new file mode 100644 index 000000000..3390a7c7a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt @@ -0,0 +1,23 @@ +package team.aliens.dms.android.network.voting.datasource + +import java.time.LocalDate +import team.aliens.dms.android.network.voting.model.FetchAllVoteSearchResponse +import team.aliens.dms.android.network.voting.model.FetchCheckVotingItemResponse +import team.aliens.dms.android.network.voting.model.FetchModelStudentCandidatesResponse +import java.util.UUID + +abstract class NetworkVotingDataSource { + + abstract suspend fun fetchAllVoteSearch(): FetchAllVoteSearchResponse + + abstract suspend fun fetchCheckVotingItem(votingTopicId: UUID): FetchCheckVotingItemResponse + + abstract suspend fun fetchCreateVotingItem( + votingTopicId: UUID, + selectedId: UUID, + ) + + abstract suspend fun fetchDeleteVotingItem(voteId: UUID) + + abstract suspend fun fetchModelStudentCandidates(requestDate: LocalDate): FetchModelStudentCandidatesResponse +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt new file mode 100644 index 000000000..567861f2a --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt @@ -0,0 +1,29 @@ +package team.aliens.dms.android.network.voting.datasource + +import java.time.LocalDate +import team.aliens.dms.android.core.network.util.handleNetworkRequest +import team.aliens.dms.android.network.voting.apiservice.VotingApiService +import team.aliens.dms.android.network.voting.model.FetchAllVoteSearchResponse +import team.aliens.dms.android.network.voting.model.FetchCheckVotingItemResponse +import team.aliens.dms.android.network.voting.model.FetchModelStudentCandidatesResponse +import java.util.UUID +import javax.inject.Inject + +internal class NetworkVotingDataSourceImpl @Inject constructor( + private val votingApiService: VotingApiService, +) : NetworkVotingDataSource() { + override suspend fun fetchAllVoteSearch(): FetchAllVoteSearchResponse = + handleNetworkRequest { votingApiService.fetchAllVoteSearch() } + + override suspend fun fetchCheckVotingItem(votingTopicId: UUID): FetchCheckVotingItemResponse = + handleNetworkRequest { votingApiService.fetchCheckVotingItem(votingTopicId) } + + override suspend fun fetchCreateVotingItem(votingTopicId: UUID, selectedId: UUID): Unit = + handleNetworkRequest { votingApiService.fetchCreateVotingItem(votingTopicId, selectedId) } + + override suspend fun fetchDeleteVotingItem(voteId: UUID): Unit = + handleNetworkRequest { votingApiService.fetchDeleteVotingItem(voteId) } + + override suspend fun fetchModelStudentCandidates(requestDate: LocalDate): FetchModelStudentCandidatesResponse = + handleNetworkRequest { votingApiService.fetchModelStudentCandidates(requestDate) } +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt new file mode 100644 index 000000000..fc56e7e75 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt @@ -0,0 +1,21 @@ +package team.aliens.dms.android.network.voting.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import retrofit2.create +import team.aliens.dms.android.core.network.di.GlobalRetrofitClient +import team.aliens.dms.android.network.voting.apiservice.VotingApiService +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object ApiServiceModule { + + @Provides + @Singleton + fun provideVotingApiService(@GlobalRetrofitClient retrofit: Retrofit): VotingApiService = + retrofit.create(VotingApiService::class.java) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt new file mode 100644 index 000000000..f4812af87 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt @@ -0,0 +1,18 @@ +package team.aliens.dms.android.network.voting.di + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import team.aliens.dms.android.network.voting.datasource.NetworkVotingDataSource +import team.aliens.dms.android.network.voting.datasource.NetworkVotingDataSourceImpl +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class DataSourceModule { + + @Binds + @Singleton + abstract fun bindVotingNetworkDataSource(impl: NetworkVotingDataSourceImpl): NetworkVotingDataSource +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt new file mode 100644 index 000000000..2f076c827 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt @@ -0,0 +1,17 @@ +package team.aliens.dms.android.network.voting.model + +import com.google.gson.annotations.SerializedName + +data class FetchAllVoteSearchResponse( + @SerializedName("voting_topics") val votingTopics: List, +) { + data class VoteSearchResponse( + @SerializedName("id") val id: String, + @SerializedName("topic_name") val topicName: String, + @SerializedName("description") val description: String, + @SerializedName("start_time") val startTime: String, + @SerializedName("end_time") val endTime: String, + @SerializedName("vote_type") val voteType: String, + @SerializedName("is_voted") val isVoted: Boolean, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt new file mode 100644 index 000000000..b3ac42051 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt @@ -0,0 +1,13 @@ +package team.aliens.dms.android.network.voting.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchCheckVotingItemResponse( + @SerializedName("voting_options") val votingOptions: List, +) { + data class VotingItemResponse( + @SerializedName("id") val id: UUID, + @SerializedName("voting_option_name") val votingOptionName: String, + ) +} diff --git a/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt new file mode 100644 index 000000000..8f11687b6 --- /dev/null +++ b/network/src/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt @@ -0,0 +1,15 @@ +package team.aliens.dms.android.network.voting.model + +import com.google.gson.annotations.SerializedName +import java.util.UUID + +data class FetchModelStudentCandidatesResponse( + @SerializedName("students") val students: List, +) { + data class ModelStudentCandidatesResponse( + @SerializedName("id") val id: UUID, + @SerializedName("gcn") val studentGcn: Long, + @SerializedName("name") val name: String, + @SerializedName("profile_image_url") val profileImageUrl: String, + ) +} From 6c91e8c8bc5ed487370396334d92a88a4ebf9e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 19:02:02 +0900 Subject: [PATCH 09/11] =?UTF-8?q?refactor=20::=20dev=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=95=88=20=EC=93=B0=EC=9D=B4=EB=8A=94=20data=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/di/RepositoryModule.kt | 18 --- .../file/mapper/FileMapper.kt | 9 -- .../file/model/FileUrl.kt | 3 - .../file/model/PresignedFileUrl.kt | 6 - .../file/repository/FileRepository.kt | 10 -- .../file/repository/FileRepositoryImpl.kt | 17 --- .../notice/di/RepositoryModule.kt | 18 --- .../notice/mapper/NoticeMapper.kt | 33 ------ .../notice/model/Notice.kt | 11 -- .../notice/repository/NoticeRepository.kt | 14 --- .../notice/repository/NoticeRepositoryImpl.kt | 22 ---- .../outing/di/RepositoryModule.kt | 18 --- .../model/CurrentAppliedOutingApplication.kt | 36 ------ .../outing/model/OutingApplicationId.kt | 5 - .../outing/model/OutingApplicationTime.kt | 30 ----- .../outing/repository/OutingRepository.kt | 28 ----- .../outing/repository/OutingRepositoryImpl.kt | 49 --------- .../remains/di/RepositoryModule.kt | 18 --- .../remains/mapper/RemainsMapper.kt | 33 ------ .../remains/model/AppliedRemainsOption.kt | 8 -- .../remains/model/RemainsApplicationTime.kt | 10 -- .../remains/model/RemainsOption.kt | 10 -- .../remains/repository/RemainsRepository.kt | 17 --- .../repository/RemainsRepositoryImpl.kt | 27 ----- .../school/di/RepositoryModule.kt | 18 --- .../school/mapper/SchoolMapper.kt | 13 --- .../school/model/School.kt | 9 -- .../school/model/SchoolId.kt | 5 - .../model/SchoolVerificationQuestion.kt | 3 - .../school/repository/SchoolRepository.kt | 20 ---- .../school/repository/SchoolRepositoryImpl.kt | 33 ------ .../studyroom/di/RepositoryModule.kt | 18 --- .../studyroom/mapper/StudyRoomMapper.kt | 103 ------------------ .../studyroom/model/AppliedStudyRoom.kt | 6 - .../studyroom/model/AvailableStudyRoomTime.kt | 9 -- .../studyroom/model/StudyRoom.kt | 74 ------------- .../model/StudyRoomApplicationTime.kt | 7 -- .../repository/StudyRoomRepository.kt | 35 ------ .../repository/StudyRoomRepositoryImpl.kt | 58 ---------- .../user/di/RepositoryModule.kt | 18 --- .../user/repository/UserRepository.kt | 11 -- .../user/repository/UserRepositoryImpl.kt | 26 ----- .../voting/di/RepositoryModule.kt | 18 --- .../voting/mapper/VotingMapper.kt | 45 -------- .../voting/model/AllVoteSearch.kt | 14 --- .../voting/model/ModelStudentCandidates.kt | 10 -- .../voting/model/StudentGcnInfo.kt | 6 - .../voting/model/Vote.kt | 6 - .../voting/model/VotingItem.kt | 8 -- .../voting/repository/VotingRepository.kt | 23 ---- .../voting/repository/VotingRepositoryImpl.kt | 31 ------ 51 files changed, 1077 deletions(-) delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt delete mode 100644 data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt deleted file mode 100644 index 22d20104f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.file.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.file.repository.FileRepository -import team.aliens.dms.android.data.file.repository.FileRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindFileRepository(impl: FileRepositoryImpl): FileRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt deleted file mode 100644 index 75107c713..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/mapper/FileMapper.kt +++ /dev/null @@ -1,9 +0,0 @@ -package team.aliens.dms.android.data.file.mapper - -import team.aliens.dms.android.data.file.model.PresignedFileUrl -import team.aliens.dms.android.network.file.model.FetchPresignedUrlResponse - -internal fun FetchPresignedUrlResponse.toModel(): PresignedFileUrl = PresignedFileUrl( - fileUploadUrl = this.fileUploadUrl, - fileUrl = this.fileUrl, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt deleted file mode 100644 index ae879f20a..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/FileUrl.kt +++ /dev/null @@ -1,3 +0,0 @@ -package team.aliens.dms.android.data.file.model - -typealias FileUrl = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt deleted file mode 100644 index f722ba34f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/model/PresignedFileUrl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package team.aliens.dms.android.data.file.model - -data class PresignedFileUrl( - val fileUploadUrl: String, - val fileUrl: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt deleted file mode 100644 index 6b241d0ec..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepository.kt +++ /dev/null @@ -1,10 +0,0 @@ -package team.aliens.dms.android.data.file.repository - -import team.aliens.dms.android.data.file.model.PresignedFileUrl -import java.io.File - -abstract class FileRepository { - - abstract suspend fun fetchPresignedUrl(fileName: String): PresignedFileUrl - abstract suspend fun uploadFile(presignedUrl: String, file: File) -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt deleted file mode 100644 index 6a6e5c213..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/file/repository/FileRepositoryImpl.kt +++ /dev/null @@ -1,17 +0,0 @@ -package team.aliens.dms.android.data.file.repository - -import team.aliens.dms.android.data.file.mapper.toModel -import team.aliens.dms.android.data.file.model.PresignedFileUrl -import team.aliens.dms.android.network.file.datasource.NetworkFileDataSource -import java.io.File -import javax.inject.Inject - -internal class FileRepositoryImpl @Inject constructor( - private val networkFileDataSource: NetworkFileDataSource, -) : FileRepository() { - override suspend fun fetchPresignedUrl(fileName: String): PresignedFileUrl = - networkFileDataSource.fetchPresignedUrl(fileName = fileName).toModel() - - override suspend fun uploadFile(presignedUrl: String, file: File) = - networkFileDataSource.uploadFile(presignedUrl = presignedUrl, file = file) -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt deleted file mode 100644 index 83a5efc4f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.notice.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.notice.repository.NoticeRepository -import team.aliens.dms.android.data.notice.repository.NoticeRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindNoticeRepository(impl: NoticeRepositoryImpl): NoticeRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt deleted file mode 100644 index 6b13be2aa..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/mapper/NoticeMapper.kt +++ /dev/null @@ -1,33 +0,0 @@ -package team.aliens.dms.android.data.notice.mapper - -import team.aliens.dms.android.core.database.entity.NoticeEntity -import team.aliens.dms.android.data.notice.model.Notice -import team.aliens.dms.android.network.notice.model.FetchNoticeDetailsResponse -import team.aliens.dms.android.network.notice.model.FetchNoticesResponse -import team.aliens.dms.android.shared.date.toLocalDateTime - -internal fun List.toModel() = this.map(NoticeEntity::toModel) - -private fun NoticeEntity.toModel() = Notice( - id = this.id, - title = this.title, - content = this.content, - createdAt = this.createdAt, -) - -internal fun FetchNoticesResponse.toModel(): List = - this.notices.map(FetchNoticesResponse.NoticeResponse::toModel) - -private fun FetchNoticesResponse.NoticeResponse.toModel(): Notice = Notice( - id = this.id, - title = this.title, - content = null, - createdAt = this.createdAt.toLocalDateTime(), -) - -internal fun FetchNoticeDetailsResponse.toModel(): Notice = Notice( - id = this.noticeId, - title = this.title, - content = this.content, - createdAt = this.createdAt.toLocalDateTime(), -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt deleted file mode 100644 index 898bfb483..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/model/Notice.kt +++ /dev/null @@ -1,11 +0,0 @@ -package team.aliens.dms.android.data.notice.model - -import java.time.LocalDateTime -import java.util.UUID - -data class Notice( - val id: UUID, - val title: String, - val content: String?, - val createdAt: LocalDateTime, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt deleted file mode 100644 index 7495ad154..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepository.kt +++ /dev/null @@ -1,14 +0,0 @@ -package team.aliens.dms.android.data.notice.repository - -import team.aliens.dms.android.data.notice.model.Notice -import team.aliens.dms.android.shared.model.Order -import java.util.UUID - -abstract class NoticeRepository { - - abstract suspend fun fetchWhetherNewNoticesExist(): Boolean - - abstract suspend fun fetchNoticeDetails(noticeId: UUID): Notice - - abstract suspend fun fetchNotices(order: Order = Order.NEW): List -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt deleted file mode 100644 index e9d96c273..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notice/repository/NoticeRepositoryImpl.kt +++ /dev/null @@ -1,22 +0,0 @@ -package team.aliens.dms.android.data.notice.repository - -import team.aliens.dms.android.data.notice.mapper.toModel -import team.aliens.dms.android.data.notice.model.Notice -import team.aliens.dms.android.network.notice.datasource.NetworkNoticeDataSource -import team.aliens.dms.android.shared.model.Order -import java.util.UUID -import javax.inject.Inject - -internal class NoticeRepositoryImpl @Inject constructor( - private val networkNoticeDataSource: NetworkNoticeDataSource, -) : NoticeRepository() { - - override suspend fun fetchWhetherNewNoticesExist(): Boolean = - networkNoticeDataSource.fetchWhetherNewNoticesExist().whetherNewNotices - - override suspend fun fetchNoticeDetails(noticeId: UUID): Notice = - networkNoticeDataSource.fetchNoticeDetails(noticeId).toModel() - - override suspend fun fetchNotices(order: Order): List = - networkNoticeDataSource.fetchNotices(order.name).toModel() -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt deleted file mode 100644 index d71005337..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.outing.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.outing.repository.OutingRepository -import team.aliens.dms.android.data.outing.repository.OutingRepositoryImpl -import javax.inject.Singleton - -@InstallIn(SingletonComponent::class) -@Module -abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindOutingRepository(impl: OutingRepositoryImpl): OutingRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt deleted file mode 100644 index e0ccd2e2f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/CurrentAppliedOutingApplication.kt +++ /dev/null @@ -1,36 +0,0 @@ -package team.aliens.dms.android.data.outing.model - -import team.aliens.dms.android.network.outing.model.FetchCurrentAppliedOutingApplicationResponse -import java.util.UUID - -data class CurrentAppliedOutingApplication( - val id: UUID, - val date: String, - val type: String, - val status: OutingStatus, - val startTime: String, - val endTime: String, - val reason: String?, - val companionNames: List, -) { - // TODO - enum class OutingStatus { - REQUESTED, - OUTING, - DONE, - APPROVED, - ; - } -} - -fun FetchCurrentAppliedOutingApplicationResponse.toModel(): CurrentAppliedOutingApplication = - CurrentAppliedOutingApplication( - id = UUID.fromString(this.id), - date = this.date, - type = this.type, - status = CurrentAppliedOutingApplication.OutingStatus.valueOf(this.status), - startTime = this.startTime, - endTime = this.endTime, - reason = this.reason, - companionNames = this.companionNames, - ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt deleted file mode 100644 index ea198fe0b..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationId.kt +++ /dev/null @@ -1,5 +0,0 @@ -package team.aliens.dms.android.data.outing.model - -import java.util.UUID - -typealias OutingApplicationId = UUID diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt deleted file mode 100644 index efd51f7be..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/model/OutingApplicationTime.kt +++ /dev/null @@ -1,30 +0,0 @@ -package team.aliens.dms.android.data.outing.model - -import java.time.DayOfWeek -import team.aliens.dms.android.network.outing.model.OutingAvailableTimeResponse -import java.util.UUID - -data class OutingApplicationTime( - val id: UUID, - val schoolId: UUID, - val startTime: String, - val endTime: String, - val available: Boolean, - val dayOfWeek: DayOfWeek, -) - -fun OutingAvailableTimeResponse.toModel(): List = - this.availableTimes.toModel() - -fun List.toModel(): List = - this.map(OutingAvailableTimeResponse.AvailableTimeResponse::toModel) - -fun OutingAvailableTimeResponse.AvailableTimeResponse.toModel(): OutingApplicationTime = - OutingApplicationTime( - id = UUID.fromString(this.id), - schoolId = UUID.fromString(this.schoolId), - startTime = this.startTime, - endTime = this.endTime, - available = this.available, - dayOfWeek = DayOfWeek.valueOf(this.dayOfWeek), - ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt deleted file mode 100644 index 1cf60e001..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepository.kt +++ /dev/null @@ -1,28 +0,0 @@ -package team.aliens.dms.android.data.outing.repository - -import java.time.DayOfWeek -import java.time.LocalDate -import java.time.LocalTime -import team.aliens.dms.android.data.outing.model.CurrentAppliedOutingApplication -import team.aliens.dms.android.data.outing.model.OutingApplicationId -import team.aliens.dms.android.data.outing.model.OutingApplicationTime -import java.util.UUID - -abstract class OutingRepository { - abstract suspend fun fetchOutingApplicationTimes(dayOfWeek: DayOfWeek): List - - abstract suspend fun applyOuting( - date: LocalDate, - startTime: LocalTime, - endTime: LocalTime, - type: String, - reason: String?, - companionIds: List, - ): OutingApplicationId - - abstract suspend fun fetchCurrentAppliedOutingApplication(): CurrentAppliedOutingApplication - - abstract suspend fun cancelOuting(applicationId: UUID) - - abstract suspend fun fetchOutingTypes(keyword: String?): List -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt deleted file mode 100644 index b3f7951c3..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/outing/repository/OutingRepositoryImpl.kt +++ /dev/null @@ -1,49 +0,0 @@ -package team.aliens.dms.android.data.outing.repository - -import java.time.DayOfWeek -import java.time.LocalDate -import java.time.LocalTime -import java.time.format.DateTimeFormatter -import team.aliens.dms.android.data.outing.model.CurrentAppliedOutingApplication -import team.aliens.dms.android.data.outing.model.OutingApplicationId -import team.aliens.dms.android.data.outing.model.OutingApplicationTime -import team.aliens.dms.android.data.outing.model.toModel -import team.aliens.dms.android.network.outing.datasource.OutingNetworkDataSource -import team.aliens.dms.android.network.outing.model.ApplyOutingRequest -import java.util.UUID -import javax.inject.Inject - -class OutingRepositoryImpl @Inject constructor( - private val outingNetworkDataSource: OutingNetworkDataSource, -) : OutingRepository() { - override suspend fun fetchOutingApplicationTimes(dayOfWeek: DayOfWeek): List = - outingNetworkDataSource.fetchOutingAvailableTime(dayOfWeek = dayOfWeek.name).toModel() - - override suspend fun applyOuting( - date: LocalDate, - startTime: LocalTime, - endTime: LocalTime, - type: String, - reason: String?, - companionIds: List, - ): OutingApplicationId = outingNetworkDataSource.applyOuting( - req = ApplyOutingRequest( - date = date.format(DateTimeFormatter.ISO_LOCAL_DATE), - startTime = startTime.toString(), - endTime = endTime.toString(), - type = type, - reason = reason, - companionIds = companionIds, - ), - ).applicationId - - override suspend fun fetchCurrentAppliedOutingApplication(): CurrentAppliedOutingApplication = - outingNetworkDataSource.fetchCurrentAppliedOutingApplication().toModel() - - override suspend fun cancelOuting(applicationId: UUID) { - outingNetworkDataSource.cancelOuting(applicationId = applicationId) - } - - override suspend fun fetchOutingTypes(keyword: String?): List = - outingNetworkDataSource.fetchOutingTypes(keyword = keyword).titles -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt deleted file mode 100644 index 3bc2abd4f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.remains.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.remains.repository.RemainsRepository -import team.aliens.dms.android.data.remains.repository.RemainsRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindRemainsRepository(impl: RemainsRepositoryImpl): RemainsRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt deleted file mode 100644 index f1366055d..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/mapper/RemainsMapper.kt +++ /dev/null @@ -1,33 +0,0 @@ -package team.aliens.dms.android.data.remains.mapper - -import team.aliens.dms.android.data.remains.model.AppliedRemainsOption -import team.aliens.dms.android.data.remains.model.RemainsApplicationTime -import team.aliens.dms.android.data.remains.model.RemainsOption -import team.aliens.dms.android.network.remains.model.FetchAppliedRemainsOptionResponse -import team.aliens.dms.android.network.remains.model.FetchRemainsApplicationTimeResponse -import team.aliens.dms.android.network.remains.model.FetchRemainsOptionsResponse - -internal fun FetchAppliedRemainsOptionResponse.toModel(): AppliedRemainsOption = - AppliedRemainsOption( - id = this.remainsOptionId, - title = this.title, - ) - -internal fun FetchRemainsApplicationTimeResponse.toModel(): RemainsApplicationTime = - RemainsApplicationTime( - startDayOfWeek = this.startDayOfWeek, - startTime = this.startTime, - endDayOfWeek = this.endDayOfWeek, - endTime = this.endTime, - ) - -internal fun FetchRemainsOptionsResponse.toModel(): List = - this.remainsOptionResponse.map(FetchRemainsOptionsResponse.RemainsOptionResponse::toModel) - -private fun FetchRemainsOptionsResponse.RemainsOptionResponse.toModel(): RemainsOption = - RemainsOption( - id = this.id, - title = this.title, - description = this.description, - applied = this.applied, - ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt deleted file mode 100644 index 022f1a544..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/AppliedRemainsOption.kt +++ /dev/null @@ -1,8 +0,0 @@ -package team.aliens.dms.android.data.remains.model - -import java.util.UUID - -data class AppliedRemainsOption( - val id: UUID, - val title: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt deleted file mode 100644 index 5e4085f48..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsApplicationTime.kt +++ /dev/null @@ -1,10 +0,0 @@ -package team.aliens.dms.android.data.remains.model - -import java.time.DayOfWeek - -data class RemainsApplicationTime( - val startDayOfWeek: DayOfWeek, - val startTime: String, - val endDayOfWeek: DayOfWeek, - val endTime: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt deleted file mode 100644 index 40242ccfc..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/model/RemainsOption.kt +++ /dev/null @@ -1,10 +0,0 @@ -package team.aliens.dms.android.data.remains.model - -import java.util.UUID - -data class RemainsOption( - val id: UUID, - val title: String, - val description: String, - val applied: Boolean, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt deleted file mode 100644 index 306b55f5b..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -package team.aliens.dms.android.data.remains.repository - -import team.aliens.dms.android.data.remains.model.AppliedRemainsOption -import team.aliens.dms.android.data.remains.model.RemainsApplicationTime -import team.aliens.dms.android.data.remains.model.RemainsOption -import java.util.UUID - -abstract class RemainsRepository { - - abstract suspend fun updateRemainsOption(optionId: UUID) - - abstract suspend fun fetchAppliedRemainsOption(): AppliedRemainsOption - - abstract suspend fun fetchRemainsApplicationTime(): RemainsApplicationTime - - abstract suspend fun fetchRemainsOptions(): List -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt deleted file mode 100644 index dbd8f74c8..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/remains/repository/RemainsRepositoryImpl.kt +++ /dev/null @@ -1,27 +0,0 @@ -package team.aliens.dms.android.data.remains.repository - -import team.aliens.dms.android.data.remains.mapper.toModel -import team.aliens.dms.android.data.remains.model.AppliedRemainsOption -import team.aliens.dms.android.data.remains.model.RemainsApplicationTime -import team.aliens.dms.android.data.remains.model.RemainsOption -import team.aliens.dms.android.network.remains.datasource.NetworkRemainsDataSource -import java.util.UUID -import javax.inject.Inject - -internal class RemainsRepositoryImpl @Inject constructor( - private val networkRemainsDataSource: NetworkRemainsDataSource, -) : RemainsRepository() { - - override suspend fun updateRemainsOption(optionId: UUID) { - networkRemainsDataSource.updateRemainsOption(optionId) - } - - override suspend fun fetchAppliedRemainsOption(): AppliedRemainsOption = - networkRemainsDataSource.fetchAppliedRemainsOption().toModel() - - override suspend fun fetchRemainsApplicationTime(): RemainsApplicationTime = - networkRemainsDataSource.fetchRemainsApplicationTime().toModel() - - override suspend fun fetchRemainsOptions(): List = - networkRemainsDataSource.fetchRemainsOptions().toModel() -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt deleted file mode 100644 index f296569ee..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.school.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.school.repository.SchoolRepository -import team.aliens.dms.android.data.school.repository.SchoolRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindSchoolRepository(impl: SchoolRepositoryImpl): SchoolRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt deleted file mode 100644 index 575a924f3..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/mapper/SchoolMapper.kt +++ /dev/null @@ -1,13 +0,0 @@ -package team.aliens.dms.android.data.school.mapper - -import team.aliens.dms.android.data.school.model.School -import team.aliens.dms.android.network.school.model.FetchSchoolsResponse - -internal fun FetchSchoolsResponse.toModel(): List = - this.schools.map(FetchSchoolsResponse.SchoolResponse::toModel) - -private fun FetchSchoolsResponse.SchoolResponse.toModel(): School = School( - id = this.id, - name = this.name, - address = this.address, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt deleted file mode 100644 index 742a77662..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/School.kt +++ /dev/null @@ -1,9 +0,0 @@ -package team.aliens.dms.android.data.school.model - -import java.util.UUID - -data class School( - val id: UUID, - val name: String, - val address: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt deleted file mode 100644 index e8aa726ab..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolId.kt +++ /dev/null @@ -1,5 +0,0 @@ -package team.aliens.dms.android.data.school.model - -import java.util.UUID - -typealias SchoolId = UUID diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt deleted file mode 100644 index b9bb725c6..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/model/SchoolVerificationQuestion.kt +++ /dev/null @@ -1,3 +0,0 @@ -package team.aliens.dms.android.data.school.model - -typealias SchoolVerificationQuestion = String diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt deleted file mode 100644 index 642bb13a9..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepository.kt +++ /dev/null @@ -1,20 +0,0 @@ -package team.aliens.dms.android.data.school.repository - -import team.aliens.dms.android.data.school.model.School -import team.aliens.dms.android.data.school.model.SchoolId -import team.aliens.dms.android.data.school.model.SchoolVerificationQuestion -import java.util.UUID - -abstract class SchoolRepository { - - abstract suspend fun fetchSchools(): List - - abstract suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): SchoolVerificationQuestion - - abstract suspend fun examineSchoolVerificationQuestion( - schoolId: UUID, - answer: String, - ) - - abstract suspend fun examineSchoolVerificationCode(code: String): SchoolId -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt deleted file mode 100644 index 5be517748..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/school/repository/SchoolRepositoryImpl.kt +++ /dev/null @@ -1,33 +0,0 @@ -package team.aliens.dms.android.data.school.repository - -import team.aliens.dms.android.data.school.mapper.toModel -import team.aliens.dms.android.data.school.model.School -import team.aliens.dms.android.data.school.model.SchoolId -import team.aliens.dms.android.data.school.model.SchoolVerificationQuestion -import team.aliens.dms.android.network.school.datasource.NetworkSchoolDataSource -import java.util.UUID -import javax.inject.Inject - -internal class SchoolRepositoryImpl @Inject constructor( - private val networkSchoolDataSource: NetworkSchoolDataSource, -) : SchoolRepository() { - - override suspend fun fetchSchools(): List = - networkSchoolDataSource.fetchSchools().toModel() - - override suspend fun fetchSchoolVerificationQuestion(schoolId: UUID): SchoolVerificationQuestion = - networkSchoolDataSource.fetchSchoolVerificationQuestion(schoolId = schoolId).question - - override suspend fun examineSchoolVerificationQuestion( - schoolId: UUID, - answer: String, - ) { - networkSchoolDataSource.examineSchoolVerificationQuestion( - schoolId = schoolId, - answer = answer, - ) - } - - override suspend fun examineSchoolVerificationCode(code: String): SchoolId = - networkSchoolDataSource.examineSchoolVerificationCode(code = code).schoolId -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt deleted file mode 100644 index 102d2caaf..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.studyroom.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.studyroom.repository.StudyRoomRepository -import team.aliens.dms.android.data.studyroom.repository.StudyRoomRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindStudyRoomRepository(impl: StudyRoomRepositoryImpl): StudyRoomRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt deleted file mode 100644 index e608dfec6..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/mapper/StudyRoomMapper.kt +++ /dev/null @@ -1,103 +0,0 @@ -package team.aliens.dms.android.data.studyroom.mapper - -import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom -import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime -import team.aliens.dms.android.data.studyroom.model.StudyRoom -import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime -import team.aliens.dms.android.network.studyroom.model.FetchAppliedStudyRoomResponse -import team.aliens.dms.android.network.studyroom.model.FetchAvailableStudyRoomTimesResponse -import team.aliens.dms.android.network.studyroom.model.FetchSeatTypesResponse -import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomApplicationTimeResponse -import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomDetailsResponse -import team.aliens.dms.android.network.studyroom.model.FetchStudyRoomsResponse -import team.aliens.dms.android.shared.model.Sex - -internal fun FetchStudyRoomApplicationTimeResponse.toModel(): StudyRoomApplicationTime = - StudyRoomApplicationTime( - startAt = this.startAt, - endAt = this.endAt, - ) - -internal fun FetchStudyRoomsResponse.toModel(): List = - this.studyRoomResponses.map(FetchStudyRoomsResponse.StudyRoomResponse::toModel) - -private fun FetchStudyRoomsResponse.StudyRoomResponse.toModel(): StudyRoom = StudyRoom( - id = this.id, - floor = this.floor, - name = this.name, - availableGrade = this.availableGrade, - availableSex = Sex.valueOf(this.availableSex), - inUseHeadcount = this.inUseHeadcount, - totalAvailableSeat = this.totalAvailableSeat, - isMine = this.isMine, -) - -internal fun FetchStudyRoomDetailsResponse.toModel(): StudyRoom.Details = StudyRoom.Details( - id = id, - floor = floor, - name = name, - startTime = startTime, - endTime = endTime, - totalAvailableSeat = totalAvailableSeat, - inUseHeadcount = inUseHeadcount, - availableSex = Sex.valueOf(this.availableSex), - availableGrade = availableGrade, - eastDescription = eastDescription, - westDescription = westDescription, - southDescription = southDescription, - northDescription = northDescription, - totalWidthSize = totalWidthSize, - totalHeightSize = totalHeightSize, - seats = seats.toModel(), -) - -private fun List.toModel(): List = - this.map(FetchStudyRoomDetailsResponse.SeatResponse::toModel) - -private fun FetchStudyRoomDetailsResponse.SeatResponse.toModel(): StudyRoom.Seat = StudyRoom.Seat( - id = this.id, - row = this.row, - column = this.column, - number = this.number, - type = this.type?.toModel(), - status = StudyRoom.Seat.Status.valueOf(this.status), - isMine = this.isMine, - student = this.student?.toModel(), -) - -private fun FetchStudyRoomDetailsResponse.SeatResponse.SeatTypeResponse.toModel(): StudyRoom.Seat.Type = - StudyRoom.Seat.Type( - id = this.id, - name = this.name, - color = this.color, - ) - -private fun FetchStudyRoomDetailsResponse.SeatResponse.StudentResponse.toModel(): StudyRoom.Seat.Student = - StudyRoom.Seat.Student( - id = this.id, - name = this.name, - ) - -internal fun FetchAppliedStudyRoomResponse.toModel(): AppliedStudyRoom = AppliedStudyRoom( - floor = this.floor, - name = this.name, -) - -internal fun FetchSeatTypesResponse.toModel(): List = - this.types.map(FetchSeatTypesResponse.SeatTypeResponse::toModel) - -private fun FetchSeatTypesResponse.SeatTypeResponse.toModel(): StudyRoom.Seat.Type = StudyRoom.Seat.Type( - id = this.id, - name = this.name, - color = this.color, -) - -internal fun FetchAvailableStudyRoomTimesResponse.toModel(): List = - this.availableStudyRoomTimes.map(FetchAvailableStudyRoomTimesResponse.AvailableStudyRoomTimeResponse::toModel) - -private fun FetchAvailableStudyRoomTimesResponse.AvailableStudyRoomTimeResponse.toModel(): AvailableStudyRoomTime = - AvailableStudyRoomTime( - id = this.id, - startTime = this.startTime, - endTime = this.endTime, - ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt deleted file mode 100644 index e95d4d80f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AppliedStudyRoom.kt +++ /dev/null @@ -1,6 +0,0 @@ -package team.aliens.dms.android.data.studyroom.model - -data class AppliedStudyRoom( - val floor: Int, - val name: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt deleted file mode 100644 index d10b2c426..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/AvailableStudyRoomTime.kt +++ /dev/null @@ -1,9 +0,0 @@ -package team.aliens.dms.android.data.studyroom.model - -import java.util.UUID - -data class AvailableStudyRoomTime( - val id: UUID, - val startTime: String, - val endTime: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt deleted file mode 100644 index e1c5f1a97..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoom.kt +++ /dev/null @@ -1,74 +0,0 @@ -package team.aliens.dms.android.data.studyroom.model - -import team.aliens.dms.android.shared.model.Sex -import java.util.UUID - -data class StudyRoom( - val id: UUID, - val floor: Int, - val name: String, - val availableGrade: Int, - val availableSex: Sex, - val inUseHeadcount: Int, - val totalAvailableSeat: Int, - val isMine: Boolean, -) { - data class Details( - val id: UUID, - val floor: Int, - val name: String, - val startTime: String, - val endTime: String, - val totalAvailableSeat: Int, - val inUseHeadcount: Int, - val availableSex: Sex, - val availableGrade: Int, - val eastDescription: String, - val westDescription: String, - val southDescription: String, - val northDescription: String, - val totalWidthSize: Int, - val totalHeightSize: Int, - val seats: List, - ) - - data class Seat( - val id: UUID, - val row: Int, - val column: Int, - val number: Int?, - val type: Type?, - val status: Status, - val isMine: Boolean, - val student: Student?, - ) { - data class Type( - val id: UUID, - val name: String, - val color: String, - ) - - enum class Status { - AVAILABLE, UNAVAILABLE, IN_USE, EMPTY, - ; - } - - data class Student( - val id: UUID, - val name: String, - ) - } -} - -fun StudyRoom.Details.toStudyRoom( - isMine: Boolean = false, -): StudyRoom = StudyRoom( - id = this.id, - floor = this.floor, - name = this.name, - availableGrade = this.availableGrade, - availableSex = this.availableSex, - inUseHeadcount = this.inUseHeadcount, - totalAvailableSeat = this.totalAvailableSeat, - isMine = isMine, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt deleted file mode 100644 index 5e0d5e90f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/model/StudyRoomApplicationTime.kt +++ /dev/null @@ -1,7 +0,0 @@ -package team.aliens.dms.android.data.studyroom.model - -// TODO: Time 교체 -data class StudyRoomApplicationTime( - val startAt: String, - val endAt: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt deleted file mode 100644 index 033f2c77f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepository.kt +++ /dev/null @@ -1,35 +0,0 @@ -package team.aliens.dms.android.data.studyroom.repository - -import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom -import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime -import team.aliens.dms.android.data.studyroom.model.StudyRoom -import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime -import java.util.UUID - -abstract class StudyRoomRepository { - - abstract suspend fun fetchStudyRoomApplicationTime(): StudyRoomApplicationTime - - abstract suspend fun applySeat( - seatId: UUID, - timeslot: UUID, - ) - - abstract suspend fun cancelSeat( - seatId: UUID, - timeslot: UUID, - ) - - abstract suspend fun fetchStudyRooms(timeslot: UUID): List - - abstract suspend fun fetchStudyRoomDetails( - studyRoomId: UUID, - timeslot: UUID, - ): StudyRoom.Details - - abstract suspend fun fetchAppliedStudyRoom(): AppliedStudyRoom - - abstract suspend fun fetchSeatTypes(studyRoomId: UUID): List - - abstract suspend fun fetchAvailableStudyRoomTimes(): List -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt deleted file mode 100644 index bd1179825..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/studyroom/repository/StudyRoomRepositoryImpl.kt +++ /dev/null @@ -1,58 +0,0 @@ -package team.aliens.dms.android.data.studyroom.repository - -import team.aliens.dms.android.data.studyroom.mapper.toModel -import team.aliens.dms.android.data.studyroom.model.AppliedStudyRoom -import team.aliens.dms.android.data.studyroom.model.AvailableStudyRoomTime -import team.aliens.dms.android.data.studyroom.model.StudyRoom -import team.aliens.dms.android.data.studyroom.model.StudyRoomApplicationTime -import team.aliens.dms.android.network.studyroom.datasource.NetworkStudyRoomDataSource -import java.util.UUID -import javax.inject.Inject - -internal class StudyRoomRepositoryImpl @Inject constructor( - private val networkStudyRoomDataSource: NetworkStudyRoomDataSource, -) : StudyRoomRepository() { - - override suspend fun fetchStudyRoomApplicationTime(): StudyRoomApplicationTime = - networkStudyRoomDataSource.fetchStudyRoomApplicationTime().toModel() - - override suspend fun applySeat( - seatId: UUID, - timeslot: UUID, - ) { - networkStudyRoomDataSource.applySeat( - seatId = seatId, - timeslot = timeslot, - ) - } - - override suspend fun cancelSeat( - seatId: UUID, - timeslot: UUID, - ) { - networkStudyRoomDataSource.cancelSeat( - seatId = seatId, - timeslot = timeslot, - ) - } - - override suspend fun fetchStudyRooms(timeslot: UUID): List = - networkStudyRoomDataSource.fetchStudyRooms(timeslot).toModel() - - override suspend fun fetchStudyRoomDetails( - studyRoomId: UUID, - timeslot: UUID, - ): StudyRoom.Details = networkStudyRoomDataSource.fetchStudyRoomDetails( - studyRoomId = studyRoomId, - timeslot = timeslot, - ).toModel() - - override suspend fun fetchAppliedStudyRoom(): AppliedStudyRoom = - networkStudyRoomDataSource.fetchAppliedStudyRoom().toModel() - - override suspend fun fetchSeatTypes(studyRoomId: UUID): List = - networkStudyRoomDataSource.fetchSeatTypes(studyRoomId = studyRoomId).toModel() - - override suspend fun fetchAvailableStudyRoomTimes(): List = - networkStudyRoomDataSource.fetchAvailableStudyRoomTimes().toModel() -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt deleted file mode 100644 index 8fdb7b177..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/user/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.user.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.user.repository.UserRepository -import team.aliens.dms.android.data.user.repository.UserRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindUserRepository(impl: UserRepositoryImpl): UserRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt deleted file mode 100644 index 02c8c94e7..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepository.kt +++ /dev/null @@ -1,11 +0,0 @@ -package team.aliens.dms.android.data.user.repository - -abstract class UserRepository { - - abstract suspend fun editPassword( - currentPassword: String, - newPassword: String, - ) - - abstract suspend fun comparePassword(password: String) -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt deleted file mode 100644 index b0a926031..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/user/repository/UserRepositoryImpl.kt +++ /dev/null @@ -1,26 +0,0 @@ -package team.aliens.dms.android.data.user.repository - -import team.aliens.dms.android.network.user.datasource.NetworkUserDataSource -import team.aliens.dms.android.network.user.model.EditPasswordRequest -import javax.inject.Inject - -internal class UserRepositoryImpl @Inject constructor( - private val networkUserDataSource: NetworkUserDataSource, -) : UserRepository() { - - override suspend fun editPassword( - currentPassword: String, - newPassword: String, - ) { - networkUserDataSource.editPassword( - request = EditPasswordRequest( - currentPassword = currentPassword, - newPassword = newPassword, - ), - ) - } - - override suspend fun comparePassword(password: String) { - networkUserDataSource.comparePassword(password = password) - } -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt deleted file mode 100644 index 30c50ce9d..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/di/RepositoryModule.kt +++ /dev/null @@ -1,18 +0,0 @@ -package team.aliens.dms.android.data.voting.di - -import dagger.Binds -import dagger.Module -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import team.aliens.dms.android.data.voting.repository.VotingRepository -import team.aliens.dms.android.data.voting.repository.VotingRepositoryImpl -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal abstract class RepositoryModule { - - @Binds - @Singleton - abstract fun bindVotingRepository(impl: VotingRepositoryImpl): VotingRepository -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt deleted file mode 100644 index 34e6024f1..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/mapper/VotingMapper.kt +++ /dev/null @@ -1,45 +0,0 @@ -package team.aliens.dms.android.data.voting.mapper - -import team.aliens.dms.android.data.voting.model.AllVoteSearch -import team.aliens.dms.android.data.voting.model.ModelStudentCandidates -import team.aliens.dms.android.data.voting.model.Vote -import team.aliens.dms.android.data.voting.model.VotingItem -import team.aliens.dms.android.network.voting.model.FetchAllVoteSearchResponse -import team.aliens.dms.android.network.voting.model.FetchCheckVotingItemResponse -import team.aliens.dms.android.network.voting.model.FetchModelStudentCandidatesResponse -import team.aliens.dms.android.shared.date.toLocalDateTime -import java.util.UUID - -internal fun FetchAllVoteSearchResponse.toModel(): List = - this.votingTopics.map(FetchAllVoteSearchResponse.VoteSearchResponse::toModel) - -private fun FetchAllVoteSearchResponse.VoteSearchResponse.toModel(): AllVoteSearch = - AllVoteSearch( - id = UUID.fromString(this.id), - topicName = this.topicName, - description = this.description, - startTime = this.startTime.toLocalDateTime(), - endTime = this.endTime.toLocalDateTime(), - voteType = Vote.valueOf(this.voteType), - isVoted = this.isVoted, - ) - -internal fun FetchCheckVotingItemResponse.toModel(): List = - this.votingOptions.map(FetchCheckVotingItemResponse.VotingItemResponse::toModel) - -private fun FetchCheckVotingItemResponse.VotingItemResponse.toModel(): VotingItem = - VotingItem( - id = id, - votingOptionName = votingOptionName, - ) - -internal fun FetchModelStudentCandidatesResponse.toModel(): List = - this.students.map(FetchModelStudentCandidatesResponse.ModelStudentCandidatesResponse::toModel) - -private fun FetchModelStudentCandidatesResponse.ModelStudentCandidatesResponse.toModel(): ModelStudentCandidates = - ModelStudentCandidates( - id = this.id, - studentGcn = this.studentGcn, - name = this.name, - profileImageUrl = this.profileImageUrl, - ) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt deleted file mode 100644 index 4eef97aca..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/AllVoteSearch.kt +++ /dev/null @@ -1,14 +0,0 @@ -package team.aliens.dms.android.data.voting.model - -import java.time.LocalDateTime -import java.util.UUID - -data class AllVoteSearch( - val id: UUID, - val topicName: String, - val description: String, - val startTime: LocalDateTime, - val endTime: LocalDateTime, - val voteType: Vote, - val isVoted: Boolean, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt deleted file mode 100644 index 8c47e5d2f..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/ModelStudentCandidates.kt +++ /dev/null @@ -1,10 +0,0 @@ -package team.aliens.dms.android.data.voting.model - -import java.util.UUID - -data class ModelStudentCandidates( - val id: UUID, - val studentGcn: Long, - val name: String, - val profileImageUrl: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt deleted file mode 100644 index ab8fdda6e..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/StudentGcnInfo.kt +++ /dev/null @@ -1,6 +0,0 @@ -package team.aliens.dms.android.data.voting.model - -data class StudentGcnInfo( - val studentGcn: String, - val studentFilterId: Int, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt deleted file mode 100644 index 2fe4e5790..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/Vote.kt +++ /dev/null @@ -1,6 +0,0 @@ -package team.aliens.dms.android.data.voting.model - -enum class Vote { - MODEL_STUDENT_VOTE, APPROVAL_VOTE, STUDENT_VOTE, OPTION_VOTE - ; -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt deleted file mode 100644 index 5409c5f13..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/model/VotingItem.kt +++ /dev/null @@ -1,8 +0,0 @@ -package team.aliens.dms.android.data.voting.model - -import java.util.UUID - -data class VotingItem( - val id: UUID, - val votingOptionName: String, -) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt deleted file mode 100644 index b01d6dd76..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepository.kt +++ /dev/null @@ -1,23 +0,0 @@ -package team.aliens.dms.android.data.voting.repository - -import java.time.LocalDate -import team.aliens.dms.android.data.voting.model.AllVoteSearch -import team.aliens.dms.android.data.voting.model.ModelStudentCandidates -import team.aliens.dms.android.data.voting.model.VotingItem -import java.util.UUID - -abstract class VotingRepository { - - abstract suspend fun fetchAllVoteSearch(): List - - abstract suspend fun fetchCheckVotingItem(votingTopicId: UUID): List - - abstract suspend fun fetchCreateVotingItem( - votingTopicId: UUID, - selectedId: UUID, - ) - - abstract suspend fun fetchDeleteVotingItem(voteId: UUID) - - abstract suspend fun fetchModelStudentCandidates(requestDate: LocalDate): List -} diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt deleted file mode 100644 index 60d1fb191..000000000 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/voting/repository/VotingRepositoryImpl.kt +++ /dev/null @@ -1,31 +0,0 @@ -package team.aliens.dms.android.data.voting.repository - -import java.time.LocalDate -import team.aliens.dms.android.data.voting.mapper.toModel -import team.aliens.dms.android.data.voting.model.AllVoteSearch -import team.aliens.dms.android.data.voting.model.ModelStudentCandidates -import team.aliens.dms.android.data.voting.model.VotingItem -import team.aliens.dms.android.network.voting.datasource.NetworkVotingDataSource -import java.util.UUID -import javax.inject.Inject - -internal class VotingRepositoryImpl @Inject constructor( - private val networkVotingDataSource: NetworkVotingDataSource, -) : VotingRepository() { - override suspend fun fetchAllVoteSearch(): List = - networkVotingDataSource.fetchAllVoteSearch().toModel() - - override suspend fun fetchCheckVotingItem(votingTopicId: UUID): List = - networkVotingDataSource.fetchCheckVotingItem(votingTopicId).toModel() - - override suspend fun fetchCreateVotingItem(votingTopicId: UUID, selectedId: UUID) { - networkVotingDataSource.fetchCreateVotingItem(votingTopicId, selectedId) - } - - override suspend fun fetchDeleteVotingItem(voteId: UUID) { - networkVotingDataSource.fetchDeleteVotingItem(voteId) - } - - override suspend fun fetchModelStudentCandidates(requestDate: LocalDate): List = - networkVotingDataSource.fetchModelStudentCandidates(requestDate).toModel() -} From 154515bc82ddce13313588a5f009da8905c66672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 19:02:15 +0900 Subject: [PATCH 10/11] =?UTF-8?q?refactor=20::=20dev=20repository=20result?= =?UTF-8?q?=20=EA=B0=9D=EC=B2=B4=EB=A1=9C=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/repository/AuthRepository.kt | 10 ++-- .../auth/repository/AuthRepositoryImpl.kt | 12 ++-- .../meal/repository/MealRepository.kt | 4 +- .../meal/repository/MealRepositoryImpl.kt | 17 ++---- .../repository/NotificationRepository.kt | 18 +++--- .../repository/NotificationRepositoryImpl.kt | 55 +++++++++++-------- .../point/repository/PointRepository.kt | 2 +- .../point/repository/PointRepositoryImpl.kt | 12 ++-- .../student/repository/StudentRepository.kt | 20 +++---- .../repository/StudentRepositoryImpl.kt | 36 +++++++----- .../main/home/viewmodel/HomeViewModel.kt | 4 +- .../feature/meal/viewmodel/MealViewModel.kt | 4 +- .../signin/viewmodel/SignInViewModel.kt | 4 +- 13 files changed, 103 insertions(+), 95 deletions(-) diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt index d1ab33a8d..4ca8a72ae 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepository.kt @@ -10,20 +10,20 @@ abstract class AuthRepository { password: String, deviceToken: String, autoSignIn: Boolean = true, - ) + ): Result abstract suspend fun sendEmailVerificationCode( email: String, type: EmailVerificationType, - ) + ): Result abstract suspend fun checkEmailVerificationCode( email: String, code: String, type: EmailVerificationType, - ) + ): Result - abstract suspend fun checkIdExists(accountId: String): HashedEmail + abstract suspend fun checkIdExists(accountId: String): Result - abstract suspend fun signOut() + abstract suspend fun signOut(): Result } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt index 5d21cb328..c0bf2561e 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt @@ -26,7 +26,7 @@ internal class AuthRepositoryImpl @Inject constructor( password: String, deviceToken: String, autoSignIn: Boolean, - ) { + ): Result = runCatching { val signInResponse = statusMapping( onBadRequest = { throw BadRequestException() }, onUnauthorized = { throw PasswordMismatchException() }, @@ -53,7 +53,7 @@ internal class AuthRepositoryImpl @Inject constructor( override suspend fun sendEmailVerificationCode( email: String, type: EmailVerificationType, - ) { + ): Result = runCatching { networkAuthDataSource.sendEmailVerificationCode( request = SendEmailVerificationCodeRequest( email = email, @@ -66,7 +66,7 @@ internal class AuthRepositoryImpl @Inject constructor( email: String, code: String, type: EmailVerificationType, - ) { + ): Result = runCatching { networkAuthDataSource.checkEmailVerificationCode( email = email, code = code, @@ -74,12 +74,14 @@ internal class AuthRepositoryImpl @Inject constructor( ) } - override suspend fun checkIdExists(accountId: String): HashedEmail = + override suspend fun checkIdExists(accountId: String): Result = runCatching { networkAuthDataSource.checkIdExists( accountId = accountId, ).email + } + - override suspend fun signOut() { + override suspend fun signOut(): Result = runCatching { jwtProvider.clearCaches() schoolProvider.clearCaches() } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt index 9504d1789..baa6bdec4 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepository.kt @@ -5,7 +5,7 @@ import team.aliens.dms.android.data.meal.model.Meal abstract class MealRepository { - abstract suspend fun fetchMeal(date: LocalDate): Meal + abstract suspend fun fetchMeal(date: LocalDate): Result - abstract suspend fun updateMeal(date: LocalDate): Meal + abstract suspend fun updateMeal(date: LocalDate): Result } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt index 7b46c6181..930bb3e3d 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/meal/repository/MealRepositoryImpl.kt @@ -13,20 +13,15 @@ internal class MealRepositoryImpl @Inject constructor( private val databaseMealDataSource: DatabaseMealDataSource, private val networkMealDataSource: NetworkMealDataSource, ) : MealRepository() { - override suspend fun fetchMeal(date: LocalDate): Meal = try { + override suspend fun fetchMeal(date: LocalDate): Result = runCatching { databaseMealDataSource.queryMeal(date).toModel() - } catch (_: Exception) { - try { - this.updateMeal(date = date) - } catch (_: Exception) { - throw CannotFindMealException() - } + }.recoverCatching { + updateMeal(date = date).getOrElse { throw CannotFindMealException() } } - override suspend fun updateMeal(date: LocalDate): Meal { - return networkMealDataSource.fetchMeals(date).toModel().also { meals -> + override suspend fun updateMeal(date: LocalDate): Result = runCatching { + networkMealDataSource.fetchMeals(date).toModel().also { meals -> databaseMealDataSource.saveMeals(meals.toEntity()) - } - .find { it.date == date }!! + }.find { it.date == date }!! } } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt index 57e578eac..9263584b8 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepository.kt @@ -7,31 +7,31 @@ import team.aliens.dms.android.data.notification.model.NotificationTopicGroup abstract class NotificationRepository { // TODO core 이전 고민 - abstract suspend fun registerDeviceNotificationToken(deviceToken: String) + abstract suspend fun registerDeviceNotificationToken(deviceToken: String): Result // TODO core 이전 고민 - abstract suspend fun cancelDeviceTokenRegistration(deviceToken: String) + abstract suspend fun cancelDeviceTokenRegistration(deviceToken: String): Result // TODO device token 파라미터 고민 abstract suspend fun subscribeNotificationTopic( deviceToken: String, topic: NotificationTopic, - ) + ): Result // TODO device token 파라미터 고민 abstract suspend fun unsubscribeNotificationTopic( deviceToken: String, topic: NotificationTopic, - ) + ): Result - abstract suspend fun batchUpdateNotificationTopic(subscriptions: List) + abstract suspend fun batchUpdateNotificationTopic(subscriptions: List): Result // TODO device token 파라미터 고민 - abstract suspend fun fetchNotificationStatus(deviceToken: String): List + abstract suspend fun fetchNotificationStatus(deviceToken: String): Result> - abstract suspend fun fetchNotifications(): List + abstract suspend fun fetchNotifications(): Result> - abstract suspend fun saveDeviceToken(deviceToken: String) + abstract suspend fun saveDeviceToken(deviceToken: String): Result - abstract suspend fun getDeviceToken(): String + abstract suspend fun getDeviceToken(): Result } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt index 85daf3fd4..dde4ea9b2 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt @@ -16,53 +16,62 @@ internal class NotificationRepositoryImpl @Inject constructor( private val deviceDataStoreDataSource: DeviceDataStoreDataSource, ) : NotificationRepository() { - override suspend fun registerDeviceNotificationToken(deviceToken: String) { + override suspend fun registerDeviceNotificationToken(deviceToken: String): Result = runCatching { TODO("Not yet implemented") } - override suspend fun cancelDeviceTokenRegistration(deviceToken: String) { + override suspend fun cancelDeviceTokenRegistration(deviceToken: String): Result = runCatching { TODO("Not yet implemented") } override suspend fun subscribeNotificationTopic( deviceToken: String, topic: NotificationTopic, - ) = networkNotificationDataSource.subscribeNotificationTopic( - request = SubscribeNotificationTopicRequest( - deviceToken = deviceToken, - topic = topic.name, - ), - ) + ): Result = runCatching { + networkNotificationDataSource.subscribeNotificationTopic( + request = SubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + } override suspend fun unsubscribeNotificationTopic( deviceToken: String, topic: NotificationTopic, - ) = networkNotificationDataSource.unsubscribeNotificationTopic( - request = UnsubscribeNotificationTopicRequest( - deviceToken = deviceToken, - topic = topic.name, - ), - ) + ): Result = runCatching { + networkNotificationDataSource.unsubscribeNotificationTopic( + request = UnsubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + } override suspend fun batchUpdateNotificationTopic( subscriptions: List, - ) = networkNotificationDataSource.batchUpdateNotificationTopic( - request = BatchUpdateNotificationTopicRequest( - topics = subscriptions.toModel(), - ), - ) + ): Result = runCatching { + networkNotificationDataSource.batchUpdateNotificationTopic( + request = BatchUpdateNotificationTopicRequest( + topics = subscriptions.toModel(), + ), + ) + } - override suspend fun fetchNotificationStatus(deviceToken: String): List = + override suspend fun fetchNotificationStatus(deviceToken: String): Result> = runCatching { networkNotificationDataSource.fetchNotificationTopicStatus(deviceToken = deviceToken) .toModel() + } - override suspend fun fetchNotifications(): List = + override suspend fun fetchNotifications(): Result> = runCatching { networkNotificationDataSource.fetchNotifications().toModel() + } - override suspend fun saveDeviceToken(deviceToken: String) { + override suspend fun saveDeviceToken(deviceToken: String): Result = runCatching { deviceDataStoreDataSource.storeDeviceToken(deviceToken) } - override suspend fun getDeviceToken(): String = + override suspend fun getDeviceToken(): Result = runCatching { deviceDataStoreDataSource.loadDeviceToken() + } } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt index c4d6b204c..54e6eafbe 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepository.kt @@ -9,5 +9,5 @@ abstract class PointRepository { type: PointType, page: Long? = null, size: Long? = null, - ): PointStatus + ): Result } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt index 84b8a7486..b66fbfc49 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt @@ -13,9 +13,11 @@ internal class PointRepositoryImpl @Inject constructor( type: PointType, page: Long?, size: Long?, - ): PointStatus = networkPointDataSource.fetchPoints( - type = type.name, - page = page, - size = size, - ).toModel() + ): Result = runCatching { + networkPointDataSource.fetchPoints( + type = type.name, + page = page, + size = size, + ).toModel() + } } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt index abe66b737..c1ed46573 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepository.kt @@ -19,14 +19,14 @@ abstract class StudentRepository { accountId: String, password: String, profileImageUrl: String?, - ) + ): Result abstract suspend fun examineStudentNumber( schoolId: UUID, grade: Int, classroom: Int, number: Int, - ): StudentName + ): Result abstract suspend fun findId( schoolId: UUID, @@ -34,7 +34,7 @@ abstract class StudentRepository { grade: Int, classRoom: Int, number: Int, - ): HashedEmail + ): Result abstract suspend fun resetPassword( accountId: String, @@ -42,17 +42,17 @@ abstract class StudentRepository { email: String, emailVerificationCode: String, newPassword: String, - ) + ): Result - abstract suspend fun checkIdDuplication(id: String) + abstract suspend fun checkIdDuplication(id: String): Result - abstract suspend fun checkEmailDuplication(email: String) + abstract suspend fun checkEmailDuplication(email: String): Result - abstract suspend fun fetchMyPage(): MyPage + abstract suspend fun fetchMyPage(): Result - abstract suspend fun editProfile(profileImageUrl: String) + abstract suspend fun editProfile(profileImageUrl: String): Result - abstract suspend fun withdraw() + abstract suspend fun withdraw(): Result - abstract suspend fun fetchStudents(): List + abstract suspend fun fetchStudents(): Result> } diff --git a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt index a0f23c27c..513e1cca8 100644 --- a/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt @@ -35,7 +35,7 @@ internal class StudentRepositoryImpl @Inject constructor( accountId: String, password: String, profileImageUrl: String?, - ) { + ): Result = runCatching { val response: SignUpResponse = networkStudentDataSource.signUp( request = SignUpRequest( schoolVerificationCode = schoolVerificationCode, @@ -62,12 +62,14 @@ internal class StudentRepositoryImpl @Inject constructor( grade: Int, classroom: Int, number: Int, - ): StudentName = networkStudentDataSource.examineStudentNumber( - schoolId = schoolId, - grade = grade, - classroom = classroom, - number = number, - ).studentName + ): Result = runCatching { + networkStudentDataSource.examineStudentNumber( + schoolId = schoolId, + grade = grade, + classroom = classroom, + number = number, + ).studentName + } override suspend fun findId( schoolId: UUID, @@ -75,7 +77,7 @@ internal class StudentRepositoryImpl @Inject constructor( grade: Int, classRoom: Int, number: Int, - ): HashedEmail = + ): Result = runCatching { networkStudentDataSource.findId( schoolId = schoolId, studentName = studentName, @@ -83,6 +85,7 @@ internal class StudentRepositoryImpl @Inject constructor( classRoom = classRoom, number = number, ).email + } override suspend fun resetPassword( accountId: String, @@ -90,7 +93,7 @@ internal class StudentRepositoryImpl @Inject constructor( email: String, emailVerificationCode: String, newPassword: String, - ) { + ): Result = runCatching { networkStudentDataSource.resetPassword( ResetPasswordRequest( accountId = accountId, @@ -102,26 +105,29 @@ internal class StudentRepositoryImpl @Inject constructor( ) } - override suspend fun checkIdDuplication(id: String) { + override suspend fun checkIdDuplication(id: String): Result = runCatching { networkStudentDataSource.checkIdDuplication(id = id) } - override suspend fun checkEmailDuplication(email: String) { + override suspend fun checkEmailDuplication(email: String): Result = runCatching { networkStudentDataSource.checkEmailDuplication(email = email) } - override suspend fun fetchMyPage(): MyPage = networkStudentDataSource.fetchMyPage().toModel() + override suspend fun fetchMyPage(): Result = runCatching { + networkStudentDataSource.fetchMyPage().toModel() + } - override suspend fun editProfile(profileImageUrl: String) { + override suspend fun editProfile(profileImageUrl: String): Result = runCatching { networkStudentDataSource.editProfile(request = EditProfileRequest(profileImageUrl)) } - override suspend fun withdraw() { + override suspend fun withdraw(): Result = runCatching { networkStudentDataSource.withdraw() jwtProvider.clearCaches() schoolProvider.clearCaches() } - override suspend fun fetchStudents(): List = + override suspend fun fetchStudents(): Result> = runCatching { networkStudentDataSource.fetchStudents().toModel() + } } diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/viewmodel/HomeViewModel.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/viewmodel/HomeViewModel.kt index b060dd3c1..d74bb27e6 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/viewmodel/HomeViewModel.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/viewmodel/HomeViewModel.kt @@ -20,9 +20,7 @@ internal class HomeViewModel @Inject constructor( private fun getMyPage() { viewModelScope.launch(Dispatchers.IO) { - runCatching { - studentRepository.fetchMyPage() - }.onSuccess { myPage -> + studentRepository.fetchMyPage().onSuccess { myPage -> setState { it.copy(myPage = myPage) } }.onFailure { throw it diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt index 040e6bff2..cb53c6194 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/meal/viewmodel/MealViewModel.kt @@ -27,9 +27,7 @@ internal class MealViewModel @Inject constructor( private fun getMeal(date: LocalDate? = null) { val selectedDate = date ?: uiState.value.selectedDate viewModelScope.launch(Dispatchers.IO) { - runCatching { - mealRepository.fetchMeal(date = selectedDate) - }.onSuccess { successfulMeal -> + mealRepository.fetchMeal(date = selectedDate).onSuccess { successfulMeal -> setState { it.copy(meal = successfulMeal) } } } diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt index b0f76f5fc..cab11c36f 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt @@ -58,9 +58,7 @@ internal class SignInViewModel @Inject constructor( private fun getDeviceToken() { viewModelScope.launch(Dispatchers.IO) { - runCatching { - notificationRepository.getDeviceToken() - }.onSuccess { deviceToken -> + notificationRepository.getDeviceToken().onSuccess { deviceToken -> setState { it.copy(deviceToken = deviceToken) } } } From 5c57a632f15f8eb34ac810cd66b23cbfac127124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=84=AD?= Date: Wed, 24 Dec 2025 19:13:16 +0900 Subject: [PATCH 11/11] =?UTF-8?q?feat=20::=20home=20screen=20=ED=86=A0?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team/aliens/dms/android/app/DmsApp.kt | 133 +++++++++--------- .../feature/main/home/navigation/HomeRoute.kt | 4 +- 2 files changed, 70 insertions(+), 67 deletions(-) diff --git a/app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt b/app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt index 0ea703a02..9ec9c41d0 100644 --- a/app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt +++ b/app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt @@ -1,11 +1,9 @@ package team.aliens.dms.android.app import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding -import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.windowsizeclass.WindowSizeClass @@ -80,78 +78,81 @@ fun DmsApp( } } - Scaffold( - bottomBar = { - if (shouldShowBottomBar) { - BottomNavigationBar( - currentScreen = currentScreen, - onNavigate = { destination -> - if (currentScreen != destination) { - backStack.removeAll { - it is HomeScreenNav || - it is ApplicationScreenNav || - it is MyPageScreenNav + Box { + Scaffold( + bottomBar = { + if (shouldShowBottomBar) { + BottomNavigationBar( + currentScreen = currentScreen, + onNavigate = { destination -> + if (currentScreen != destination) { + backStack.removeAll { + it is HomeScreenNav || + it is ApplicationScreenNav || + it is MyPageScreenNav + } + backStack.add(destination) } - backStack.add(destination) } - } - ) - } - } - ) { paddingValues -> - NavDisplay( - modifier = Modifier - .padding(paddingValues) - .navigationBarsPadding(), - backStack = backStack, - onBack = { backStack.removeLastOrNull() }, - entryProvider = entryProvider { - entry { - OnboardingRoute( - navigateToSignIn = { - backStack.clear() - backStack.add(SignInScreenNav) - }, - ) - } - entry { - SignInRoute( - navigateToMain = { - backStack.clear() - backStack.add(HomeScreenNav) - }, - navigateToSignUp = {}, - onShowSnackBar = { snackBarType, message -> - appState.showSnackBar(snackBarType, message) - }, - ) - } - entry { - HomeRoute( - onNavigateMeal = { - backStack.add(MealScreenNav) - } - ) - } - entry { - ApplicationRoute() - } - entry { - MyPageRoute() - } - entry { - MealRoute( - onNavigateBack = { backStack.removeLastOrNull() } ) } - }, - ) - Box { + } + ) { paddingValues -> + NavDisplay( + modifier = Modifier + .padding(paddingValues) + .navigationBarsPadding(), + backStack = backStack, + onBack = { backStack.removeLastOrNull() }, + entryProvider = entryProvider { + entry { + OnboardingRoute( + navigateToSignIn = { + backStack.clear() + backStack.add(SignInScreenNav) + }, + ) + } + entry { + SignInRoute( + navigateToMain = { + backStack.clear() + backStack.add(HomeScreenNav) + }, + navigateToSignUp = {}, + onShowSnackBar = { snackBarType, message -> + appState.showSnackBar(snackBarType, message) + }, + ) + } + entry { + HomeRoute( + onNavigateMeal = { + backStack.add(MealScreenNav) + }, + onShowSnackBar = { snackBarType, message -> + appState.showSnackBar(snackBarType, message) + }, + ) + } + entry { + ApplicationRoute() + } + entry { + MyPageRoute() + } + entry { + MealRoute( + onNavigateBack = { backStack.removeLastOrNull() } + ) + } + }, + ) SnackbarHost( modifier = Modifier .statusBarsPadding() .padding(top = 16.dp) - .align(Alignment.Center), + .align(Alignment.TopCenter), hostState = appState.snackBarHostState, snackbar = { val visuals = it.visuals as? DmsSnackBarVisuals ?: return@SnackbarHost diff --git a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeRoute.kt b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeRoute.kt index ed0b23012..7f57755fb 100644 --- a/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeRoute.kt +++ b/feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeRoute.kt @@ -2,17 +2,19 @@ package team.aliens.dms.android.feature.main.home.navigation import androidx.compose.runtime.Composable import kotlinx.serialization.Serializable +import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBarType import team.aliens.dms.android.feature.main.home.ui.Home @Composable fun HomeRoute( onNavigateMeal: () -> Unit, + onShowSnackBar: (DmsSnackBarType, String) -> Unit, ) { Home( onNavigateNotice = { }, onNavigateNoticeDetail = { }, onNavigatePointHistory = { }, onNavigateMeal = onNavigateMeal, - onShowSnackBar = { _, _ -> }, + onShowSnackBar = onShowSnackBar, ) }