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/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/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/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..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 @@ -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 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/data/src/main/java/team/aliens/dms/android/data/auth/di/RepositoryModule.kt b/data/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.data/auth/model/HashedEmail.kt 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..4ca8a72ae --- /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, + ): 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): Result + + 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 new file mode 100644 index 000000000..c0bf2561e --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/auth/repository/AuthRepositoryImpl.kt @@ -0,0 +1,88 @@ +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, + ): Result = runCatching { + 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, + ): Result = runCatching { + networkAuthDataSource.sendEmailVerificationCode( + request = SendEmailVerificationCodeRequest( + email = email, + type = type.name, + ), + ) + } + + override suspend fun checkEmailVerificationCode( + email: String, + code: String, + type: EmailVerificationType, + ): Result = runCatching { + networkAuthDataSource.checkEmailVerificationCode( + email = email, + code = code, + type = type.name, + ) + } + + override suspend fun checkIdExists(accountId: String): Result = runCatching { + networkAuthDataSource.checkIdExists( + accountId = accountId, + ).email + } + + + override suspend fun signOut(): Result = runCatching { + jwtProvider.clearCaches() + schoolProvider.clearCaches() + } +} 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/notification/di/RepositoryModule.kt b/data/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.data/notification/model/NotificationTopicGroup.kt 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..9263584b8 --- /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): Result + + // TODO core 이전 고민 + 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): Result + + // TODO device token 파라미터 고민 + abstract suspend fun fetchNotificationStatus(deviceToken: String): Result> + + abstract suspend fun fetchNotifications(): Result> + + abstract suspend fun saveDeviceToken(deviceToken: String): Result + + 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 new file mode 100644 index 000000000..dde4ea9b2 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/notification/repository/NotificationRepositoryImpl.kt @@ -0,0 +1,77 @@ +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): Result = runCatching { + TODO("Not yet implemented") + } + + override suspend fun cancelDeviceTokenRegistration(deviceToken: String): Result = runCatching { + TODO("Not yet implemented") + } + + override suspend fun subscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ): Result = runCatching { + networkNotificationDataSource.subscribeNotificationTopic( + request = SubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + } + + override suspend fun unsubscribeNotificationTopic( + deviceToken: String, + topic: NotificationTopic, + ): Result = runCatching { + networkNotificationDataSource.unsubscribeNotificationTopic( + request = UnsubscribeNotificationTopicRequest( + deviceToken = deviceToken, + topic = topic.name, + ), + ) + } + + override suspend fun batchUpdateNotificationTopic( + subscriptions: List, + ): Result = runCatching { + networkNotificationDataSource.batchUpdateNotificationTopic( + request = BatchUpdateNotificationTopicRequest( + topics = subscriptions.toModel(), + ), + ) + } + + override suspend fun fetchNotificationStatus(deviceToken: String): Result> = runCatching { + networkNotificationDataSource.fetchNotificationTopicStatus(deviceToken = deviceToken) + .toModel() + } + + override suspend fun fetchNotifications(): Result> = runCatching { + networkNotificationDataSource.fetchNotifications().toModel() + } + + override suspend fun saveDeviceToken(deviceToken: String): Result = runCatching { + deviceDataStoreDataSource.storeDeviceToken(deviceToken) + } + + override suspend fun getDeviceToken(): Result = runCatching { + deviceDataStoreDataSource.loadDeviceToken() + } +} diff --git a/data/src/main/java/team/aliens/dms/android/data/point/di/RepositoryModule.kt b/data/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.data/point/model/PointType.kt 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..54e6eafbe --- /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, + ): 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 new file mode 100644 index 000000000..b66fbfc49 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/point/repository/PointRepositoryImpl.kt @@ -0,0 +1,23 @@ +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?, + ): Result = runCatching { + networkPointDataSource.fetchPoints( + type = type.name, + page = page, + size = size, + ).toModel() + } +} diff --git a/data/src/main/java/team/aliens/dms/android/data/student/di/RepositoryModule.kt b/data/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.data/student/model/StudentName.kt 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..c1ed46573 --- /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?, + ): Result + + abstract suspend fun examineStudentNumber( + schoolId: UUID, + grade: Int, + classroom: Int, + number: Int, + ): Result + + abstract suspend fun findId( + schoolId: UUID, + studentName: String, + grade: Int, + classRoom: Int, + number: Int, + ): Result + + abstract suspend fun resetPassword( + accountId: String, + studentName: String, + email: String, + emailVerificationCode: String, + newPassword: String, + ): Result + + abstract suspend fun checkIdDuplication(id: String): Result + + abstract suspend fun checkEmailDuplication(email: String): Result + + abstract suspend fun fetchMyPage(): Result + + abstract suspend fun editProfile(profileImageUrl: String): Result + + abstract suspend fun withdraw(): Result + + 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 new file mode 100644 index 000000000..513e1cca8 --- /dev/null +++ b/data/src/dev/kotlin/team.aliens.dms.android.data/student/repository/StudentRepositoryImpl.kt @@ -0,0 +1,133 @@ +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?, + ): Result = runCatching { + 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, + ): Result = runCatching { + 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, + ): Result = runCatching { + 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, + ): Result = runCatching { + networkStudentDataSource.resetPassword( + ResetPasswordRequest( + accountId = accountId, + studentName = studentName, + email = email, + emailVerificationCode = emailVerificationCode, + newPassword = newPassword, + ), + ) + } + + override suspend fun checkIdDuplication(id: String): Result = runCatching { + networkStudentDataSource.checkIdDuplication(id = id) + } + + override suspend fun checkEmailDuplication(email: String): Result = runCatching { + networkStudentDataSource.checkEmailDuplication(email = email) + } + + override suspend fun fetchMyPage(): Result = runCatching { + networkStudentDataSource.fetchMyPage().toModel() + } + + override suspend fun editProfile(profileImageUrl: String): Result = runCatching { + networkStudentDataSource.editProfile(request = EditProfileRequest(profileImageUrl)) + } + + override suspend fun withdraw(): Result = runCatching { + networkStudentDataSource.withdraw() + jwtProvider.clearCaches() + schoolProvider.clearCaches() + } + + override suspend fun fetchStudents(): Result> = runCatching { + networkStudentDataSource.fetchStudents().toModel() + } +} 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/prod/kotlin/team/aliens/dms/android/data/auth/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/di/RepositoryModule.kt new file mode 100644 index 000000000..233f8f350 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/exception/AuthException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/AuthException.kt new file mode 100644 index 000000000..dddeb40ba --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/exception/BadRequestException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/BadRequestException.kt new file mode 100644 index 000000000..981b71a2f --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/PasswordMismatchException.kt new file mode 100644 index 000000000..1479d7a5d --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/exception/UserNotFoundException.kt new file mode 100644 index 000000000..fa3f24e73 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/mapper/AuthMapper.kt new file mode 100644 index 000000000..07fd3f585 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/EmailVerificationType.kt new file mode 100644 index 000000000..fcd5b758d --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/auth/model/HashedEmail.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/auth/model/HashedEmail.kt new file mode 100644 index 000000000..e88ecdfa4 --- /dev/null +++ b/data/src/prod/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/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..9504d1789 --- /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): Meal + + 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 new file mode 100644 index 000000000..7b46c6181 --- /dev/null +++ b/data/src/prod/kotlin/team/aliens/dms/android/data/meal/repository/MealRepositoryImpl.kt @@ -0,0 +1,32 @@ +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): Meal = try { + databaseMealDataSource.queryMeal(date).toModel() + } catch (_: Exception) { + try { + this.updateMeal(date = date) + } catch (_: Exception) { + throw CannotFindMealException() + } + } + + override suspend fun updateMeal(date: LocalDate): Meal { + return 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/prod/kotlin/team/aliens/dms/android/data/notification/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/di/RepositoryModule.kt new file mode 100644 index 000000000..941558dd0 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/notification/model/Notification.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/Notification.kt new file mode 100644 index 000000000..3149c6b37 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopic.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopic.kt new file mode 100644 index 000000000..d7fe9a9ec --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/notification/model/NotificationTopicGroup.kt new file mode 100644 index 000000000..02486a0cf --- /dev/null +++ b/data/src/prod/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/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/prod/kotlin/team/aliens/dms/android/data/point/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/di/RepositoryModule.kt new file mode 100644 index 000000000..2b40f7c86 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/point/mapper/PointMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/mapper/PointMapper.kt new file mode 100644 index 000000000..9867e20cd --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/point/model/Point.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/Point.kt new file mode 100644 index 000000000..29e9fdc44 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/point/model/PointStatus.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointStatus.kt new file mode 100644 index 000000000..8ae4d5545 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/point/model/PointType.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/point/model/PointType.kt new file mode 100644 index 000000000..f1e07406b --- /dev/null +++ b/data/src/prod/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/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/prod/kotlin/team/aliens/dms/android/data/student/di/RepositoryModule.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/di/RepositoryModule.kt new file mode 100644 index 000000000..70cd0d9cf --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/student/mapper/StudentMapper.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/mapper/StudentMapper.kt new file mode 100644 index 000000000..97cf9f1cf --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/student/model/HashedEmail.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/HashedEmail.kt new file mode 100644 index 000000000..40a7f81cd --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/student/model/MyPage.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/MyPage.kt new file mode 100644 index 000000000..24efe466b --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/student/model/Student.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/Student.kt new file mode 100644 index 000000000..d32bfde24 --- /dev/null +++ b/data/src/prod/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/prod/kotlin/team/aliens/dms/android/data/student/model/StudentName.kt b/data/src/prod/kotlin/team/aliens/dms/android/data/student/model/StudentName.kt new file mode 100644 index 000000000..53f3415de --- /dev/null +++ b/data/src/prod/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/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 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, ) } 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/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 231dc0b98..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,10 +27,9 @@ 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) } - } + 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) } } } 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..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,10 +39,10 @@ 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 ui.bottomPadding -import ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding +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 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/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 62f3fa18a..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 @@ -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.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 +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..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 @@ -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.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.ExtraLargeVerticalSpace +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 +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..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 @@ -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.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.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 +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..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 @@ -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.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.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.LargeVerticalSpace +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 +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 @@ -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/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..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,10 +34,10 @@ 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 ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.topPadding +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 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..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,10 +37,10 @@ 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 ui.collectInLaunchedEffectWithLifecycle -import ui.horizontalPadding -import ui.topPadding +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 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..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 @@ -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.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.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 +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..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 @@ -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.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.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 +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..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 @@ -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.designsystem.PaddingDefaults -import ui.bottomPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 +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..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 @@ -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.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.DefaultHorizontalSpace +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 +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..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 @@ -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.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.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.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 +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..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 @@ -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.designsystem.PaddingDefaults -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.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 +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..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 @@ -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.designsystem.PaddingDefaults -import ui.endPadding -import ui.horizontalPadding -import ui.startPadding -import ui.topPadding -import ui.verticalPadding +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +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 +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..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 @@ -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.designsystem.PaddingDefaults -import ui.composable.FloatingNotice -import ui.horizontalPadding -import ui.startPadding +import team.aliens.dms.android.core.ui.DefaultHorizontalSpace +import team.aliens.dms.android.core.ui.DefaultVerticalSpace +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 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..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,9 +41,9 @@ 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 ui.bottomPadding -import ui.horizontalPadding +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 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..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,9 +54,9 @@ 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 ui.bottomPadding -import ui.horizontalPadding +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 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..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,9 +42,9 @@ 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 ui.bottomPadding -import ui.horizontalPadding +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 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..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,9 +52,9 @@ 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 ui.bottomPadding -import ui.horizontalPadding +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 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 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 { diff --git a/network/src/main/java/team/aliens/dms/android/network/auth/apiservice/AuthApiService.kt b/network/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt 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/notice/apiservice/NoticeApiService.kt b/network/src/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/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/dev/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt diff --git a/network/src/prod/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/apiservice/AuthApiService.kt new file mode 100644 index 000000000..4d745e987 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSource.kt new file mode 100644 index 000000000..5ae96f871 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/datasource/NetworkAuthDataSourceImpl.kt new file mode 100644 index 000000000..d121b92f8 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/ApiServiceModule.kt new file mode 100644 index 000000000..1bbef4cbf --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/di/DataSourceModule.kt new file mode 100644 index 000000000..72e72f799 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/CheckIdExistsResponse.kt new file mode 100644 index 000000000..29edebc2a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SendEmailVerificationCodeRequest.kt new file mode 100644 index 000000000..cb207619d --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInRequest.kt new file mode 100644 index 000000000..f81d368b1 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/auth/model/SignInResponse.kt new file mode 100644 index 000000000..381f2c100 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/apiservice/FileApiService.kt new file mode 100644 index 000000000..87ee32225 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSource.kt new file mode 100644 index 000000000..fc0b600d6 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/datasource/NetworkFileDataSourceImpl.kt new file mode 100644 index 000000000..939e8329b --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/di/ApiServiceModule.kt new file mode 100644 index 000000000..8acc82c11 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/di/DataSourceModule.kt new file mode 100644 index 000000000..522ca87a1 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/model/FetchPresignedUrlResponse.kt new file mode 100644 index 000000000..7cc3619c0 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/file/model/UploadFileResponse.kt new file mode 100644 index 000000000..968c66edb --- /dev/null +++ b/network/src/prod/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/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/prod/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/apiservice/NoticeApiService.kt new file mode 100644 index 000000000..c4267c523 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSource.kt new file mode 100644 index 000000000..7a77d8209 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/datasource/NetworkNoticeDataSourceImpl.kt new file mode 100644 index 000000000..d4cf56dad --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/ApiServiceModule.kt new file mode 100644 index 000000000..1e8c3d13d --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/di/DataSourceModule.kt new file mode 100644 index 000000000..6e69018b8 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticeDetailsResponse.kt new file mode 100644 index 000000000..69e93a640 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchNoticesResponse.kt new file mode 100644 index 000000000..92846c69e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notice/model/FetchWhetherNewNoticesExistResponse.kt new file mode 100644 index 000000000..2425df223 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/apiservice/NotificationApiService.kt new file mode 100644 index 000000000..720a11be8 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSource.kt new file mode 100644 index 000000000..78f12d7c5 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/datasource/NetworkNotificationDataSourceImpl.kt new file mode 100644 index 000000000..9613061a4 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/ApiServiceModule.kt new file mode 100644 index 000000000..ba53fca4a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/di/DataSourceModule.kt new file mode 100644 index 000000000..84369f548 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/BatchUpdateNotificationTopicRequest.kt new file mode 100644 index 000000000..bfe154b1e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/CancelFcmDeviceTokenRegistrationRequest.kt new file mode 100644 index 000000000..a1a408f51 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationTopicStatusResponse.kt new file mode 100644 index 000000000..057b4820e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/FetchNotificationsResponse.kt new file mode 100644 index 000000000..380122724 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/NotificationTopicGroup.kt new file mode 100644 index 000000000..c144aafe5 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/RegisterFcmDeviceTokenRequest.kt new file mode 100644 index 000000000..24d0c78d1 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/SubscribeNotificationTopicRequest.kt new file mode 100644 index 000000000..1f73551ab --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/notification/model/UnsubscribeNotificationTopicRequest.kt new file mode 100644 index 000000000..5f30bc353 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/apiservice/OutingApiService.kt new file mode 100644 index 000000000..7d2d3506e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSource.kt new file mode 100644 index 000000000..c21825c75 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/datasource/OutingNetworkDataSourceImpl.kt new file mode 100644 index 000000000..781f636df --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/ApiServiceModule.kt new file mode 100644 index 000000000..aa0d14f25 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/di/DataSourceModule.kt new file mode 100644 index 000000000..06707e34e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingRequest.kt new file mode 100644 index 000000000..51a56a734 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/ApplyOutingResponse.kt new file mode 100644 index 000000000..fbfef2743 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchCurrentAppliedOutingApplicationResponse.kt new file mode 100644 index 000000000..af845242d --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingApplicationDetailsResponse.kt new file mode 100644 index 000000000..58ae9b027 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/FetchOutingTypesResponse.kt new file mode 100644 index 000000000..8c64f8b40 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/outing/model/OutingAvailableTimeResponse.kt new file mode 100644 index 000000000..8359efb44 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/apiservice/PointApiService.kt new file mode 100644 index 000000000..ca0f79217 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSource.kt new file mode 100644 index 000000000..28cb43369 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/datasource/NetworkPointDataSourceImpl.kt new file mode 100644 index 000000000..28386ac12 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/di/ApiServiceModule.kt new file mode 100644 index 000000000..b69a52e38 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/di/DataSourceModule.kt new file mode 100644 index 000000000..c763dd010 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/point/model/FetchPointsResponse.kt new file mode 100644 index 000000000..66735cbbe --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/apiservice/RemainsApiService.kt new file mode 100644 index 000000000..f336d2df7 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSource.kt new file mode 100644 index 000000000..816a68abe --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/datasource/NetworkRemainsDataSourceImpl.kt new file mode 100644 index 000000000..95f73d225 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/ApiServiceModule.kt new file mode 100644 index 000000000..665c43069 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/di/DataSourceModule.kt new file mode 100644 index 000000000..70ffd1c55 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchAppliedRemainsOptionResponse.kt new file mode 100644 index 000000000..b8c135d5f --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsApplicationTimeResponse.kt new file mode 100644 index 000000000..8f2a292fc --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/remains/model/FetchRemainsOptionsResponse.kt new file mode 100644 index 000000000..b6a2d497b --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/apiservice/SchoolApiService.kt new file mode 100644 index 000000000..3b3db2f85 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSource.kt new file mode 100644 index 000000000..5f8a29e89 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/datasource/NetworkSchoolDataSourceImpl.kt new file mode 100644 index 000000000..6970cfa59 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/di/ApiServiceModule.kt new file mode 100644 index 000000000..014af5db4 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/di/DataSourceModule.kt new file mode 100644 index 000000000..ef0827376 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/ExamineSchoolVerificationCodeResponse.kt new file mode 100644 index 000000000..cd2a84a3a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolVerificationQuestionResponse.kt new file mode 100644 index 000000000..b98673d9c --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/school/model/FetchSchoolsResponse.kt new file mode 100644 index 000000000..ba6cfc93c --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/apiservice/StudentApiService.kt new file mode 100644 index 000000000..519cbc3da --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSource.kt new file mode 100644 index 000000000..a0ca73258 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/datasource/NetworkStudentDataSourceImpl.kt new file mode 100644 index 000000000..c2f5ffaf1 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/di/ApiServiceModule.kt new file mode 100644 index 000000000..0a397a6ab --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/di/DataSourceModule.kt new file mode 100644 index 000000000..2e61b0a43 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/EditProfileRequest.kt new file mode 100644 index 000000000..52a6fe542 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ExamineStudentNumberResponse.kt new file mode 100644 index 000000000..c1f3f61f3 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchMyPageResponse.kt new file mode 100644 index 000000000..964e6c10b --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FetchStudentsResponse.kt new file mode 100644 index 000000000..af7e1779e --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/FindIdResponse.kt new file mode 100644 index 000000000..d2b34c6bc --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/ResetPasswordRequest.kt new file mode 100644 index 000000000..06bcf2c24 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpRequest.kt new file mode 100644 index 000000000..7d8116307 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/student/model/SignUpResponse.kt new file mode 100644 index 000000000..d5a41e335 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/apiservice/StudyRoomApiService.kt new file mode 100644 index 000000000..533f8755a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSource.kt new file mode 100644 index 000000000..940a13cbf --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/datasource/NetworkStudyRoomDataSourceImpl.kt new file mode 100644 index 000000000..37743c145 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/ApiServiceModule.kt new file mode 100644 index 000000000..f7ff1b221 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/di/DataSourceModule.kt new file mode 100644 index 000000000..5a6b4bd02 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAppliedStudyRoomResponse.kt new file mode 100644 index 000000000..58e7259a9 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchAvailableStudyRoomTimesResponse.kt new file mode 100644 index 000000000..912e56def --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchSeatTypesResponse.kt new file mode 100644 index 000000000..a7b099661 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomApplicationTimeResponse.kt new file mode 100644 index 000000000..1813ea222 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomDetailsResponse.kt new file mode 100644 index 000000000..6c1f61710 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/studyroom/model/FetchStudyRoomsResponse.kt new file mode 100644 index 000000000..a6422d4a8 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/apiservice/UserApiService.kt new file mode 100644 index 000000000..c08987cbe --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSource.kt new file mode 100644 index 000000000..a22084ba3 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/datasource/NetworkUserDataSourceImpl.kt new file mode 100644 index 000000000..4caf00d07 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/di/ApiServiceModule.kt new file mode 100644 index 000000000..6ec73b920 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/di/DataSourceModule.kt new file mode 100644 index 000000000..300b6b1c6 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/exception/PasswordMismatchException.kt new file mode 100644 index 000000000..eeaaff894 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/user/model/EditPasswordRequest.kt new file mode 100644 index 000000000..f725332c9 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/apiservice/VotingApiService.kt new file mode 100644 index 000000000..eac7cc4a9 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSource.kt new file mode 100644 index 000000000..3390a7c7a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/datasource/NetworkVotingDataSourceImpl.kt new file mode 100644 index 000000000..567861f2a --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/ApiServiceModule.kt new file mode 100644 index 000000000..fc56e7e75 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/di/DataSourceModule.kt new file mode 100644 index 000000000..f4812af87 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchAllVoteSearchResponse.kt new file mode 100644 index 000000000..2f076c827 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchCheckVotingItemResponse.kt new file mode 100644 index 000000000..b3ac42051 --- /dev/null +++ b/network/src/prod/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/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt b/network/src/prod/kotlin/team.aliens.dms.android.network/voting/model/FetchModelStudentCandidatesResponse.kt new file mode 100644 index 000000000..8f11687b6 --- /dev/null +++ b/network/src/prod/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, + ) +}