Skip to content

Commit

Permalink
CHORE/#19: 저장소 관련 파일추가, 코드수정, 패키지구조변경
Browse files Browse the repository at this point in the history
  • Loading branch information
boiledEgg-s committed Jun 7, 2024
1 parent aab3eb9 commit fb985fd
Show file tree
Hide file tree
Showing 14 changed files with 102 additions and 77 deletions.
13 changes: 13 additions & 0 deletions app/src/main/java/com/sopt/now/compose/container/AppContainer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.sopt.now.compose.container

import com.sopt.now.compose.container.impl.AuthRepositoryImpl
import com.sopt.now.compose.container.impl.FollowerRepositoryImpl
import com.sopt.now.compose.container.impl.MemberRepositoryImpl
import com.sopt.now.compose.container.impl.UserRepositoryImpl

interface AppContainer{
val userRepository: UserRepositoryImpl
val followRepository: FollowerRepositoryImpl
val memberRepository: MemberRepositoryImpl
val authRepository: AuthRepositoryImpl
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,38 @@ package com.sopt.now.compose.container
import android.content.Context
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.sopt.now.compose.BuildConfig
import com.sopt.now.compose.container.PreferenceUserRepository.Companion.USER_ID_KEY
import com.sopt.now.compose.container.impl.UserRepositoryImpl.Companion.USER_ID_KEY
import com.sopt.now.compose.container.impl.AuthRepositoryImpl
import com.sopt.now.compose.container.impl.FollowerRepositoryImpl
import com.sopt.now.compose.container.impl.MemberRepositoryImpl
import com.sopt.now.compose.container.impl.UserRepositoryImpl
import com.sopt.now.compose.network.FollowService
import com.sopt.now.compose.network.AuthService
import kotlinx.serialization.json.Json
import okhttp3.Interceptor
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.create


interface AppContainer{
val userRepository: PreferenceUserRepository
val followRepository: NetworkFollowerRepository
val memberRepository: NetworkMemberRepository
val authRepository: NetworkAuthRepository
}


class SoptAppContainer(context: Context): AppContainer {

override val userRepository: PreferenceUserRepository by lazy {
PreferenceUserRepository(context.getSharedPreferences(PREFERENCE_ID, Context.MODE_PRIVATE))
override val userRepository: UserRepositoryImpl by lazy {
UserRepositoryImpl(context.getSharedPreferences(PREFERENCE_ID, Context.MODE_PRIVATE))
}

override val followRepository: NetworkFollowerRepository by lazy {
NetworkFollowerRepository(followService = retrofitFollower.create(FollowService::class.java))
override val followRepository: FollowerRepositoryImpl by lazy {
FollowerRepositoryImpl(followService = retrofitFollower.create(FollowService::class.java))
}

override val memberRepository: NetworkMemberRepository by lazy {
NetworkMemberRepository(authService = retrofitUser.create(AuthService::class.java))
override val memberRepository: MemberRepositoryImpl by lazy {
MemberRepositoryImpl(authService = retrofitUser.create(AuthService::class.java))
}

override val authRepository: NetworkAuthRepository by lazy {
NetworkAuthRepository(authService = retrofitLogin.create(AuthService::class.java))
override val authRepository: AuthRepositoryImpl by lazy {
AuthRepositoryImpl(authService = retrofitLogin.create(AuthService::class.java))
}

val retrofitLogin: Retrofit by lazy {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
package com.sopt.now.compose.container
package com.sopt.now.compose.container.impl

import com.sopt.now.compose.container.repository.AuthRepository
import com.sopt.now.compose.network.AuthService
import com.sopt.now.compose.network.dto.RequestLoginDto
import com.sopt.now.compose.network.dto.RequestSignUpDto
import com.sopt.now.compose.network.dto.ResponseLoginDto
import com.sopt.now.compose.network.dto.ResponseSignUpDto
import com.sopt.now.compose.ui.screens.login.LoginViewModel
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import retrofit2.Response

interface AuthRepository {
suspend fun postLogin(request: RequestLoginDto): Result<Response<ResponseLoginDto>>
suspend fun postSignUp(request: RequestSignUpDto): Result<Response<ResponseSignUpDto>>
}

class NetworkAuthRepository(
class AuthRepositoryImpl(
private val authService: AuthService
) : AuthRepository {
override suspend fun postLogin(request: RequestLoginDto): Result<Response<ResponseLoginDto>> =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package com.sopt.now.compose.container
package com.sopt.now.compose.container.impl

import com.sopt.now.compose.models.Follower
import com.sopt.now.compose.container.repository.FollowerRepository
import com.sopt.now.compose.network.FollowService
import com.sopt.now.compose.network.dto.ResponseFollowListDto
import retrofit2.Response

interface FollowerRepository{
suspend fun getFollowers(page: Int = 2): Result<Response<ResponseFollowListDto>>
}

class NetworkFollowerRepository(
class FollowerRepositoryImpl(
private val followService: FollowService
): FollowerRepository {
override suspend fun getFollowers(page: Int): Result<Response<ResponseFollowListDto>> = runCatching {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
package com.sopt.now.compose.container
package com.sopt.now.compose.container.impl

import com.sopt.now.compose.container.repository.MemberRepository
import com.sopt.now.compose.models.User
import com.sopt.now.compose.network.AuthService
import com.sopt.now.compose.network.dto.RequestChangePasswordDto
import com.sopt.now.compose.network.dto.ResponseChangePasswordDto
import retrofit2.Response

private const val TAG = "AuthRepository"

interface MemberRepository {
suspend fun getUserInfo(): Result<User>
suspend fun patchUserPassword(
request: RequestChangePasswordDto
): Response<ResponseChangePasswordDto>
}

class NetworkMemberRepository(
class MemberRepositoryImpl(
private val authService: AuthService
) : MemberRepository {
override suspend fun getUserInfo(): Result<User> = runCatching {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
package com.sopt.now.compose.container
package com.sopt.now.compose.container.impl

import android.content.SharedPreferences
import android.util.Log
import com.sopt.now.compose.container.repository.UserRepository
import com.sopt.now.compose.models.User
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext

interface UserRepository {
suspend fun getUserProfile(): User?
suspend fun setUserProfile(user: User)

suspend fun getUserId(): String
suspend fun setUserId(userId: String)
}

class PreferenceUserRepository(
val sharedPreferences: SharedPreferences
class UserRepositoryImpl(
private val sharedPreferences: SharedPreferences
) : UserRepository {
override suspend fun getUserProfile(): User {
sharedPreferences.run {
Expand Down Expand Up @@ -43,7 +33,6 @@ class PreferenceUserRepository(
}

override suspend fun setUserId(userId: String) {
Log.d(TAG, "userId: $userId")
val edit = sharedPreferences.edit()
edit.putString(USER_ID_KEY, userId).apply()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.sopt.now.compose.container.repository

import com.sopt.now.compose.network.AuthService
import com.sopt.now.compose.network.dto.RequestLoginDto
import com.sopt.now.compose.network.dto.RequestSignUpDto
import com.sopt.now.compose.network.dto.ResponseLoginDto
import com.sopt.now.compose.network.dto.ResponseSignUpDto
import retrofit2.Response

interface AuthRepository {
suspend fun postLogin(request: RequestLoginDto): Result<Response<ResponseLoginDto>>
suspend fun postSignUp(request: RequestSignUpDto): Result<Response<ResponseSignUpDto>>
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.sopt.now.compose.container.repository

import com.sopt.now.compose.network.FollowService
import com.sopt.now.compose.network.dto.ResponseFollowListDto
import retrofit2.Response

interface FollowerRepository{
suspend fun getFollowers(page: Int = 2): Result<Response<ResponseFollowListDto>>
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.sopt.now.compose.container.repository

import com.sopt.now.compose.models.User
import com.sopt.now.compose.network.dto.RequestChangePasswordDto
import com.sopt.now.compose.network.dto.ResponseChangePasswordDto
import retrofit2.Response

interface MemberRepository {
suspend fun getUserInfo(): Result<User>
suspend fun patchUserPassword(
request: RequestChangePasswordDto
): Response<ResponseChangePasswordDto>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.sopt.now.compose.container.repository

import android.content.SharedPreferences
import android.util.Log
import com.sopt.now.compose.models.User

interface UserRepository {
suspend fun getUserProfile(): User?
suspend fun setUserProfile(user: User)

suspend fun getUserId(): String
suspend fun setUserId(userId: String)
}

Original file line number Diff line number Diff line change
@@ -1,21 +1,14 @@
package com.sopt.now.compose.ui.screens.home

import android.util.Log
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import androidx.navigation.NavHostController
import com.sopt.now.compose.MainActivity.Companion.NAVIGATE_BACK_PRESSED_KEY
import com.sopt.now.compose.MainActivity.Companion.NAVIGATE_LOGIN_KEY
import com.sopt.now.compose.SoptApplication
import com.sopt.now.compose.container.FollowerRepository
import com.sopt.now.compose.container.NetworkMemberRepository
import com.sopt.now.compose.models.Follower
import com.sopt.now.compose.models.User
import com.sopt.now.compose.container.repository.FollowerRepository
import com.sopt.now.compose.container.impl.MemberRepositoryImpl
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
Expand All @@ -25,7 +18,7 @@ private const val TAG = "HomeViewModel"

class HomeViewModel(
private val followerRepository: FollowerRepository,
private val authRepository: NetworkMemberRepository
private val authRepository: MemberRepositoryImpl
) : ViewModel() {

private val _uiState = MutableStateFlow<HomeUiState>(HomeUiState.Loading())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import com.sopt.now.compose.SoptApplication
import com.sopt.now.compose.container.NetworkAuthRepository
import com.sopt.now.compose.container.PreferenceUserRepository
import com.sopt.now.compose.container.impl.AuthRepositoryImpl
import com.sopt.now.compose.container.impl.UserRepositoryImpl
import com.sopt.now.compose.network.dto.RequestLoginDto
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
Expand All @@ -19,8 +19,8 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject

class LoginViewModel(
private val userRepository: PreferenceUserRepository,
private val authRepository: NetworkAuthRepository
private val userRepository: UserRepositoryImpl,
private val authRepository: AuthRepositoryImpl
): ViewModel() {
private val _uiState = MutableStateFlow(LoginUiState())
val uiState: StateFlow<LoginUiState> = _uiState.asStateFlow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import com.sopt.now.compose.SoptApplication
import com.sopt.now.compose.container.NetworkMemberRepository
import com.sopt.now.compose.container.impl.MemberRepositoryImpl
import com.sopt.now.compose.models.User
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch

class ProfileViewModel(
private val authRepository: NetworkMemberRepository
private val authRepository: MemberRepositoryImpl
): ViewModel() {
private val _uiState = MutableStateFlow<ProfileUiState>(ProfileUiState.Loading)
val uiState: StateFlow<ProfileUiState> = _uiState.asStateFlow()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import com.sopt.now.compose.SoptApplication
import com.sopt.now.compose.container.NetworkAuthRepository
import com.sopt.now.compose.container.impl.AuthRepositoryImpl
import com.sopt.now.compose.network.dto.RequestSignUpDto
import com.sopt.now.compose.ui.screens.login.LoginViewModel
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -18,7 +18,7 @@ import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject

class SignUpViewModel(
private val authRepository: NetworkAuthRepository
private val authRepository: AuthRepositoryImpl
): ViewModel() {
private val _uiState = MutableStateFlow(SignUpState())
val uiState: StateFlow<SignUpState> = _uiState.asStateFlow()
Expand Down

0 comments on commit fb985fd

Please sign in to comment.