From 7050c2a46f42df0ebff7a6644c2e1e9ee28387c9 Mon Sep 17 00:00:00 2001 From: kimwest00 Date: Sun, 10 Dec 2023 17:22:19 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:#53=20scrap=20model=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20field=20=EC=B6=94=EA=B0=80=20gptmodel,=20date=20?= =?UTF-8?q?=EC=84=9C=EB=B2=84=20enum=20data=20->=20ui=20=EB=A1=9C=20?= =?UTF-8?q?=EB=B6=84=EA=B8=B0=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dev/briefing/data/api/AuthApi.kt | 6 +-- .../java/com/dev/briefing/data/model/Scrap.kt | 14 ++----- .../briefing/data/network/NetworkModule.kt | 38 ------------------- .../main/java/com/dev/briefing/model/Scrap.kt | 14 +++++-- .../presentation/scrap/ScrapScreen.kt | 11 +----- .../presentation/scrap/ScrapViewModel.kt | 17 ++++----- .../presentation/setting/SettingScreen.kt | 2 +- 7 files changed, 28 insertions(+), 74 deletions(-) delete mode 100644 app/src/main/java/com/dev/briefing/data/network/NetworkModule.kt diff --git a/app/src/main/java/com/dev/briefing/data/api/AuthApi.kt b/app/src/main/java/com/dev/briefing/data/api/AuthApi.kt index 8b59484..4250da6 100644 --- a/app/src/main/java/com/dev/briefing/data/api/AuthApi.kt +++ b/app/src/main/java/com/dev/briefing/data/api/AuthApi.kt @@ -12,17 +12,17 @@ import retrofit2.http.Path import retrofit2.http.Query interface AuthApi { - @POST("/members/auth/google") + @POST("/v2/members/auth/google") suspend fun getLoginToken( @Body identityToken : GoogleRequest, ): CommonResponse - @DELETE("/members/{memberId}") + @DELETE("/v2/members/{memberId}") suspend fun signOut( @Path("memberId") memberId : Int, ): CommonResponse - @POST("/members/auth/token") + @POST("/v2/members/auth/token") suspend fun getAccessToken( @Body refreshToken : TokenRequest, ): CommonResponse diff --git a/app/src/main/java/com/dev/briefing/data/model/Scrap.kt b/app/src/main/java/com/dev/briefing/data/model/Scrap.kt index 5d5695b..c8f3bf7 100644 --- a/app/src/main/java/com/dev/briefing/data/model/Scrap.kt +++ b/app/src/main/java/com/dev/briefing/data/model/Scrap.kt @@ -38,14 +38,8 @@ data class ScrapResponse( val subtitle: String, @SerializedName("date") val date: String, + @SerializedName("gptModel") + val gptModel: String, + @SerializedName("timeOfDay") + val timeOfDay: String, ) -data class ScrapViewData( - @SerializedName("briefingId") - val briefingId: Int, - @SerializedName("ranks") - val ranks: Int, - @SerializedName("title") - val title: String, - @SerializedName("subtitle") - val subtitle: String, -) \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/data/network/NetworkModule.kt b/app/src/main/java/com/dev/briefing/data/network/NetworkModule.kt deleted file mode 100644 index a305024..0000000 --- a/app/src/main/java/com/dev/briefing/data/network/NetworkModule.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.dev.briefing.data.network - -import android.util.Log -import com.dev.briefing.BuildConfig -import com.dev.briefing.util.SERVER_TAG -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory - -object RetrofitClient { - //retrofit 객체 생성 - private var retrofitClient: Retrofit? = null - fun getClient(): Retrofit? { - - //api 통신상태를 상세하게 로깅 찍을수있는 httpclient - val okHttpClient: OkHttpClient by lazy { - OkHttpClient.Builder() - .addInterceptor(HttpLoggingInterceptor().apply { - level = HttpLoggingInterceptor.Level.BODY - }) - .addInterceptor(NetworkInterceptor()) - .addInterceptor(AddCookiesInterceptor()) - .build() - } - //아직 retrofit 객체가 생성되지않았다면 - if (retrofitClient == null) { - //생성해준다 - Log.d(SERVER_TAG, "retrofitClient - init start") - retrofitClient = Retrofit.Builder() - .baseUrl(BuildConfig.BASE_URL) - .addConverterFactory(GsonConverterFactory.create()) - .client(okHttpClient) - .build() - } - return retrofitClient - } -} diff --git a/app/src/main/java/com/dev/briefing/model/Scrap.kt b/app/src/main/java/com/dev/briefing/model/Scrap.kt index 28abe8a..d32b9db 100644 --- a/app/src/main/java/com/dev/briefing/model/Scrap.kt +++ b/app/src/main/java/com/dev/briefing/model/Scrap.kt @@ -7,21 +7,29 @@ data class Scrap( val ranks: Int, val title: String, val subtitle: String, - val date: String + val date: String, + val gptModel: String, + val timeOfDay: String ) + val tmpScrap = Scrap( briefingId = 1, title = "title", subtitle = "subtitle", ranks = 1, - date = "2023-1-1" + date = "2023-1-1", + gptModel = "gpt-3.5-turbo", + timeOfDay = "Morning" ) + fun ScrapResponse.toScrap(): Scrap { return Scrap( briefingId = this.briefingId, ranks = this.ranks, title = this.title, subtitle = this.subtitle, - date = this.date + date = this.date, + gptModel = if (this.gptModel == "gpt-3.5-turbo") "GPT-3" else "GPT-4", + timeOfDay = if (this.timeOfDay == "MORNING") "아침" else "저녁" ) } \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt index 2fd48f0..f642052 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt @@ -106,13 +106,7 @@ fun ScrapDefaultScreen() { @Composable fun PreviewScrapItem() { ScrapItem( - scrap = Scrap( - briefingId = 1, - title = "title", - subtitle = "subtitle", - ranks = 1, - date = "2023-1-1" - ), + scrap = tmpScrap, onItemClick = {} ) } @@ -139,8 +133,7 @@ fun ScrapItem( horizontalAlignment = Alignment.Start ) { Text( - //TODO: GPT 모델 번호 field 추가 - text = "${scrap.date} | 이슈 #${scrap.ranks} | GPT-3로 생성됨", + text = "${scrap.date} ${scrap.timeOfDay}| 이슈 #${scrap.ranks} | ${scrap.gptModel}로 생성됨", style = BriefingTheme.typography.DetailStyleRegular.copy( color = BriefingTheme.color.TextGray ) diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt index f1cd912..714cdf5 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt @@ -38,23 +38,20 @@ class ScrapViewModel(private val repository: ScrapRepository) : ViewModel() { val response = repository.getScrap( memberId = memberId ) - response.result.let {scrapList -> - scrapList.forEach {scrap-> - if(_scrap.value == null || _scrap.value!!.isEmpty()){ - _scrap.value = listOf(scrap.toScrap()) - }else{ - _scrap.value = _scrap.value!! + listOf(scrap.toScrap()) - } - Log.d(SERVER_TAG, _scrap.value.toString()) - + response.result.let { scrapList -> + val tmpScrapList: MutableList = mutableListOf() + scrapList.forEach { scrap -> + tmpScrapList.add(scrap.toScrap()) } + _scrap.value = tmpScrapList } } catch (e: Throwable) { Log.d(SERVER_TAG, e.toString()) } } } - fun getAcessToken(refreshToken:String) { + + fun getAcessToken(refreshToken: String) { viewModelScope.launch { try { val response = repository.getAccessToken( diff --git a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt index d086ec6..01fd10c 100644 --- a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt @@ -119,7 +119,7 @@ fun SettingScreen( horizontalAlignment = Alignment.Start, ) { item { - CommonHeader(onBackClick = onBackClick, header = "설정", color = BriefingTheme.color.BackgroundWhite) + CommonHeader(onBackClick = onBackClick, header = "설정", color = BriefingTheme.color.BackgroundWhite, isPadding = true) //알림 SettingSection(title = R.string.setting_section_alarm) SettingMenuItem( From 56c40416ab9b58771726ecb6e3a9ccc73559499c Mon Sep 17 00:00:00 2001 From: kimwest00 Date: Sat, 23 Dec 2023 09:09:40 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:#53=20data,=20repository=20return=20?= =?UTF-8?q?=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/respository/ScrapRepository.kt | 11 ++---- .../data/respository/ScrapRepositoryImpl.kt | 23 +++++------- .../presentation/scrap/ScrapScreen.kt | 3 +- .../presentation/scrap/ScrapViewModel.kt | 36 +++---------------- 4 files changed, 18 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/dev/briefing/data/respository/ScrapRepository.kt b/app/src/main/java/com/dev/briefing/data/respository/ScrapRepository.kt index 7655b34..cd70d77 100644 --- a/app/src/main/java/com/dev/briefing/data/respository/ScrapRepository.kt +++ b/app/src/main/java/com/dev/briefing/data/respository/ScrapRepository.kt @@ -1,16 +1,9 @@ package com.dev.briefing.data.respository -import com.dev.briefing.data.model.CommonResponse -import com.dev.briefing.data.model.GoogleSocialResponse -import com.dev.briefing.data.model.ScrapResponse -import com.dev.briefing.data.model.SetScrapRequest -import com.dev.briefing.data.model.SetScrapResponse -import com.dev.briefing.data.model.TokenRequest -import com.dev.briefing.data.model.UnScrapResponse +import com.dev.briefing.model.Scrap interface ScrapRepository { - suspend fun getScrap(memberId: Int): CommonResponse> - suspend fun getAccessToken(refreshToken: TokenRequest): CommonResponse + suspend fun getScrap(memberId: Int): List } \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/data/respository/ScrapRepositoryImpl.kt b/app/src/main/java/com/dev/briefing/data/respository/ScrapRepositoryImpl.kt index 760f716..9e27a5d 100644 --- a/app/src/main/java/com/dev/briefing/data/respository/ScrapRepositoryImpl.kt +++ b/app/src/main/java/com/dev/briefing/data/respository/ScrapRepositoryImpl.kt @@ -1,20 +1,15 @@ package com.dev.briefing.data.respository import com.dev.briefing.data.datasource.ScrapDataSource -import com.dev.briefing.data.model.CommonResponse -import com.dev.briefing.data.model.GoogleSocialResponse -import com.dev.briefing.data.model.ScrapResponse -import com.dev.briefing.data.model.SetScrapRequest -import com.dev.briefing.data.model.SetScrapResponse -import com.dev.briefing.data.model.TokenRequest -import com.dev.briefing.data.model.UnScrapResponse +import com.dev.briefing.model.Scrap +import com.dev.briefing.model.toScrap -class ScrapRepositoryImpl(private val scrapDataSource: ScrapDataSource): ScrapRepository { - override suspend fun getScrap(memberId: Int): CommonResponse> { - return scrapDataSource.getScrap(memberId) - } - - override suspend fun getAccessToken(refreshToken: TokenRequest): CommonResponse { - return scrapDataSource.getAccessToken(refreshToken) +class ScrapRepositoryImpl(private val scrapDataSource: ScrapDataSource) : ScrapRepository { + override suspend fun getScrap(memberId: Int): List { + val tmpList = mutableListOf() + scrapDataSource.getScrap(memberId).result.forEach { + tmpList.add(it.toScrap()) + } + return tmpList } } \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt index f642052..d4eb3f2 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.livedata.observeAsState @@ -67,7 +68,7 @@ fun ScrapScreen( ScrapItem(scrap = scrap.value!![idx], onItemClick = { id -> navController.navigate("${HomeScreen.Detail.route}/$id") }) - Divider(color = BriefingTheme.color.SeperatorGray) + HorizontalDivider(color = BriefingTheme.color.SeperatorGray) } } diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt index 714cdf5..3698aba 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt @@ -13,13 +13,15 @@ import com.dev.briefing.model.toScrap import com.dev.briefing.util.MEMBER_ID import com.dev.briefing.util.MainApplication import com.dev.briefing.util.SERVER_TAG +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch class ScrapViewModel(private val repository: ScrapRepository) : ViewModel() { - private val _scrap: MutableLiveData> = - MutableLiveData>(listOf()) - val scrap: LiveData> + private val _scrap: MutableStateFlow> = + MutableStateFlow(listOf()) + val scrap: StateFlow> get() = _scrap val memberId: Int = MainApplication.prefs.getSharedPreference(MEMBER_ID, 0) @@ -34,35 +36,7 @@ class ScrapViewModel(private val repository: ScrapRepository) : ViewModel() { */ fun getScrapData() { viewModelScope.launch { - try { - val response = repository.getScrap( - memberId = memberId - ) - response.result.let { scrapList -> - val tmpScrapList: MutableList = mutableListOf() - scrapList.forEach { scrap -> - tmpScrapList.add(scrap.toScrap()) - } - _scrap.value = tmpScrapList - } - } catch (e: Throwable) { - Log.d(SERVER_TAG, e.toString()) - } - } - } - fun getAcessToken(refreshToken: String) { - viewModelScope.launch { - try { - val response = repository.getAccessToken( - com.dev.briefing.data.model.TokenRequest( - refreshToken = refreshToken - ) - ) - Log.d(SERVER_TAG, response.code) - } catch (e: Throwable) { - Log.d(SERVER_TAG, e.toString()) - } } } From e6d23a63884dfaa4f54fee310c83e847dc0e452c Mon Sep 17 00:00:00 2001 From: kimwest00 Date: Sat, 23 Dec 2023 09:14:39 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:#53=20viewmodel,=20screen=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../briefing/presentation/scrap/ScrapScreen.kt | 3 ++- .../presentation/scrap/ScrapViewModel.kt | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt index d4eb3f2..4cc3707 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapScreen.kt @@ -9,6 +9,7 @@ import androidx.compose.material3.Divider import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -43,7 +44,7 @@ fun ScrapScreen( ) { val context = LocalContext.current val viewModel: ScrapViewModel = getViewModel() - val scrap = viewModel.scrap.observeAsState() + val scrap = viewModel.scrap.collectAsState() Column( modifier = modifier diff --git a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt index 3698aba..68c82bb 100644 --- a/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt +++ b/app/src/main/java/com/dev/briefing/presentation/scrap/ScrapViewModel.kt @@ -15,6 +15,7 @@ import com.dev.briefing.util.MainApplication import com.dev.briefing.util.SERVER_TAG import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class ScrapViewModel(private val repository: ScrapRepository) : ViewModel() { @@ -36,8 +37,23 @@ class ScrapViewModel(private val repository: ScrapRepository) : ViewModel() { */ fun getScrapData() { viewModelScope.launch { - + try { + val response = repository.getScrap( + memberId = memberId + ) + response.let { scrapList -> + val tmpScrapList: MutableList = mutableListOf() + scrapList.forEach { scrap -> + tmpScrapList.add(scrap) + } + _scrap.value = tmpScrapList + } + _scrap.collect() + } catch (e: Throwable) { + Log.d(SERVER_TAG, e.toString()) + } } } + } \ No newline at end of file