Skip to content

Commit

Permalink
[feat] GET 추천 태그 조회 (#71)
Browse files Browse the repository at this point in the history
  • Loading branch information
visionWWW committed Jul 21, 2022
1 parent 9a88827 commit 2e94086
Show file tree
Hide file tree
Showing 14 changed files with 165 additions and 33 deletions.
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
+

</service>
<!--푸시 아이콘 지정-->
<meta-data
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
package com.photosurfer.android.di

import com.photosurfer.android.data.remote.datasource.RemoteChooseTagDataSource
import com.photosurfer.android.data.remote.datasource.RemoteChooseTagDataSourceImpl
import com.photosurfer.android.data.remote.datasource.RemotePushSettingDataSource
import com.photosurfer.android.data.remote.datasource.RemotePushSettingDataSourceImpl
import com.photosurfer.android.data.remote.datasource.RemoteUrgentAlarmListDataSource
import com.photosurfer.android.data.remote.datasource.RemoteUrgentAlarmListDataSourceImpl
import com.photosurfer.android.data.remote.datasource.*
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
Expand All @@ -27,4 +22,8 @@ interface RemoteDataSourceModule {
@Binds
@Singleton
fun bindsRemoteUrgentAlarmListDataSource(source: RemoteUrgentAlarmListDataSourceImpl): RemoteUrgentAlarmListDataSource

@Binds
@Singleton
fun bindsRemoteTagListDataSource(source: RemoteTagListDataSourceImpl): RemoteTagListDataSource
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.photosurfer.android.di

import com.photosurfer.android.data.remote.model.response.UrgentAlarmListResponse
import com.photosurfer.android.data.remote.service.ChooseTagService
import com.photosurfer.android.data.remote.service.PushSettingService
import com.photosurfer.android.data.remote.service.UrgentAlarmListService
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.intellij.lang.annotations.PrintFormat
import retrofit2.Retrofit
import retrofit2.create
import javax.inject.Singleton

@Module
Expand All @@ -23,4 +26,9 @@ object RetrofitServiceModule {
@Singleton
fun providesUrgentAlarmListService(retrofit: Retrofit): UrgentAlarmListService =
retrofit.create(UrgentAlarmListService::class.java)

@Provides
@Singleton
fun providesTagListService(retrofit: Retrofit): ChooseTagService =
retrofit.create(ChooseTagService::class.java)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.photosurfer.android.data.remote.datasource

import com.photosurfer.android.data.remote.calladapter.NetworkState
import com.photosurfer.android.data.remote.model.response.BaseResponse
import com.photosurfer.android.data.remote.model.response.TagListResponse

interface RemoteTagListDataSource {

suspend fun getTagList(): NetworkState<BaseResponse<TagListResponse>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.photosurfer.android.data.remote.datasource

import com.photosurfer.android.data.remote.calladapter.NetworkState
import com.photosurfer.android.data.remote.model.response.BaseResponse
import com.photosurfer.android.data.remote.model.response.TagListResponse
import com.photosurfer.android.data.remote.service.ChooseTagService
import javax.inject.Inject

class RemoteTagListDataSourceImpl @Inject constructor(
private val chooseTagListService: ChooseTagService
): RemoteTagListDataSource {
override suspend fun getTagList(): NetworkState<BaseResponse<TagListResponse>> =
chooseTagListService.getTagList()
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
package com.photosurfer.android.data.remote.mapper

import com.photosurfer.android.data.remote.model.request.Tag
import com.photosurfer.android.domain.entity.TagIdNameType
import com.photosurfer.android.domain.entity.TagNameType
import javax.inject.Inject

class TagMapper @Inject constructor() {

fun toDomainTag(tag: com.photosurfer.android.domain.entity.request.Tag):Tag =
Tag(name = tag.name, type = tag.type)

fun toDataTag(tag: Tag):com.photosurfer.android.domain.entity.request.Tag =
com.photosurfer.android.domain.entity.request.Tag(name = tag.name, type = tag.type)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.photosurfer.android.data.remote.model.response


import com.photosurfer.android.domain.entity.TagInfo
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class TagListResponse(
@SerialName("often")
val often: Often,
@SerialName("recent")
val recent: Recent,
@SerialName("platform")
val platform: Platform
)

data class Often(
@SerialName("tags")
val tags: List<TagInfo>
)

data class Recent(
@SerialName("tags")
val tags: List<TagInfo>
)

data class Platform(
@SerialName("tags")
val tags: List<TagInfo>
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import com.photosurfer.android.data.remote.calladapter.NetworkState
import com.photosurfer.android.data.remote.model.request.ChooseTagRequest
import com.photosurfer.android.data.remote.model.response.BaseResponse
import com.photosurfer.android.data.remote.model.response.ChooseTagResponse
import com.photosurfer.android.data.remote.model.response.TagListResponse
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST

interface ChooseTagService {
Expand All @@ -13,4 +15,6 @@ interface ChooseTagService {
@Body body: ChooseTagRequest
): NetworkState<BaseResponse<ChooseTagResponse>>

@GET("tag/main")
suspend fun getTagList(): NetworkState<BaseResponse<TagListResponse>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,32 @@ package com.photosurfer.android.data.repository
import com.photosurfer.android.core.exception.RetrofitFailureStateException
import com.photosurfer.android.data.remote.calladapter.NetworkState
import com.photosurfer.android.data.remote.datasource.RemoteChooseTagDataSource
import com.photosurfer.android.data.remote.datasource.RemoteTagListDataSource
import com.photosurfer.android.data.remote.mapper.TagMapper
import com.photosurfer.android.data.remote.model.request.ChooseTagRequest
import com.photosurfer.android.domain.entity.TagNameType
import com.photosurfer.android.domain.entity.TagIdNameType
import com.photosurfer.android.domain.entity.TagInfo
import com.photosurfer.android.domain.entity.ThreeTagList
import com.photosurfer.android.domain.entity.request.DomainChooseTagRequest
import com.photosurfer.android.domain.repository.ChooseTagRepository
import timber.log.Timber
import javax.inject.Inject

class ChooseTagRepositoryImpl @Inject constructor(
private val remoteChooseTagDataSource: RemoteChooseTagDataSource,
private val tagMapper: TagMapper
private val remoteTagListDataSource: RemoteTagListDataSource
) : ChooseTagRepository {
override suspend fun postTag(domainChooseTagRequest: DomainChooseTagRequest): Result<List<TagNameType>> {
override suspend fun postTag(domainChooseTagRequest: DomainChooseTagRequest): Result<List<TagIdNameType>> {
when(
val response = remoteChooseTagDataSource.postTag(
ChooseTagRequest(
file = domainChooseTagRequest.file,
tags = domainChooseTagRequest.tags.map{
tagMapper.toDomainTag(it)
}
tags = domainChooseTagRequest.tags
)
)
) {
is NetworkState.Success -> return Result.success(
response.body.data.tag.map{
tagMapper.toDataTag(it)
}
response.body.data.tag
)
is NetworkState.Failure -> return Result.failure(
RetrofitFailureStateException(
Expand All @@ -49,4 +48,48 @@ class ChooseTagRepositoryImpl @Inject constructor(
return Result.failure(IllegalStateException("NetworkError or UnKnownError please check timber"))
}

override suspend fun getTagList(): Result<ThreeTagList> {
when(
val response = remoteTagListDataSource.getTagList()
) {
is NetworkState.Success -> {
val tempOftenTagList = mutableListOf<TagInfo>()
val tempRecentTagList = mutableListOf<TagInfo>()
val tempPlatformTagList = mutableListOf<TagInfo>()

tempOftenTagList.addAll(
response.body.data.often.tags
)
tempRecentTagList.addAll(
response.body.data.recent.tags
)
tempPlatformTagList.addAll(
response.body.data.platform.tags
)
return Result.success(
ThreeTagList(
recentTagList = tempRecentTagList,
oftenTagList = tempOftenTagList,
platformTagList = tempPlatformTagList
)
)
}
is NetworkState.Failure -> return Result.failure(
RetrofitFailureStateException(
response.error,
response.code
)
)
is NetworkState.NetworkError -> Timber.d(
response.error,
"${this.javaClass.name}_getUrgentAlarmList"
)
is NetworkState.UnknownError -> Timber.d(
response.t,
"${this.javaClass.name}_getUrgentAlarmList"
)
}
return Result.failure(java.lang.IllegalStateException("NetworkError or UnKnownError please check timber"))
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.photosurfer.android.domain.entity

data class ThreeTagList(
val recentTagList: MutableList<TagInfo>,
val oftenTagList: MutableList<TagInfo>,
val platformTagList: MutableList<TagInfo>
)
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package com.photosurfer.android.domain.repository

import com.photosurfer.android.domain.entity.TagIdNameType
import com.photosurfer.android.domain.entity.TagInfo
import com.photosurfer.android.domain.entity.ThreeTagList
import com.photosurfer.android.domain.entity.request.DomainChooseTagRequest
import com.photosurfer.android.domain.entity.request.Tag

interface ChooseTagRepository {

suspend fun postTag(
domainChooseTagRequest: DomainChooseTagRequest
): Result<List<Tag>>
): Result<List<TagIdNameType>>

suspend fun getTagList(): Result<ThreeTagList>
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import com.photosurfer.android.core.base.BaseFragment
import com.photosurfer.android.core.util.PhotoSurferSnackBar
import com.photosurfer.android.domain.entity.TagInfo
import com.photosurfer.android.register_tag.databinding.FragmentChooseTagBinding
import dagger.hilt.android.AndroidEntryPoint
import java.io.File


@AndroidEntryPoint
class ChooseTagFragment : BaseFragment<FragmentChooseTagBinding>(R.layout.fragment_choose_tag) {

private val chooseTagViewModel: ChooseTagViewModel by viewModels()
Expand All @@ -38,6 +39,7 @@ class ChooseTagFragment : BaseFragment<FragmentChooseTagBinding>(R.layout.fragme
deleteInput()
checkInputNum()
initRecyclerViewLayout()
chooseTagViewModel.getTagList()

val file: File = setImgToFile(getImgToUri())

Expand All @@ -46,7 +48,7 @@ class ChooseTagFragment : BaseFragment<FragmentChooseTagBinding>(R.layout.fragme

private fun initButtonSaveClickListener() {
binding.tvSave.setOnClickListener {
chooseTagViewModel.postChooseTag()
//chooseTagViewModel.postChooseTag()
}
}

Expand Down Expand Up @@ -138,7 +140,7 @@ class ChooseTagFragment : BaseFragment<FragmentChooseTagBinding>(R.layout.fragme
}

private fun addTagWithInputText() {
chooseTagViewModel.inputList.add(TagInfo(0L, binding.etTag.text.toString()))
chooseTagViewModel.inputList.add(TagInfo(0, binding.etTag.text.toString()))
chooseTagViewModel.setEmptyInput(chooseTagViewModel.inputList.size)
binding.etTag.text.clear()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.photosurfer.android.register_tag

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
Expand All @@ -21,9 +22,9 @@ class ChooseTagViewModel @Inject constructor(
private var _isEmptyInput = MutableLiveData<Int>()
val isEmptyInput: LiveData<Int> get() = _isEmptyInput
var inputList: MutableList<TagInfo> = mutableListOf()
val recentList: MutableList<TagInfo> = mutableListOf()
val oftenList: MutableList<TagInfo> = mutableListOf()
val platformList: MutableList<TagInfo> = mutableListOf()
var recentList: MutableList<TagInfo> = mutableListOf()
var oftenList: MutableList<TagInfo> = mutableListOf()
var platformList: MutableList<TagInfo> = mutableListOf()

private val _chooseTagSuccess = MutableLiveData<Event<Boolean>>()
val chooseTagSuccess: LiveData<Event<Boolean>> = _chooseTagSuccess
Expand Down Expand Up @@ -100,4 +101,17 @@ class ChooseTagViewModel @Inject constructor(
// }
// }

fun getTagList() {
viewModelScope.launch {
chooseTagRepository.getTagList()
.onSuccess {
recentList = it.recentTagList
oftenList = it.oftenTagList
platformList = it.platformTagList
Log.d("되니?", "된다....")
}.onFailure {
Log.d("되니?", "안되니...")
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.photosurfer.android.register_tag

import android.os.Bundle
import androidx.activity.viewModels
import com.photosurfer.android.core.base.BaseActivity
import com.photosurfer.android.register_tag.databinding.ActivityRegisterTagBinding
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint
class RegisterTagActivity :
BaseActivity<ActivityRegisterTagBinding>(R.layout.activity_register_tag) {

private lateinit var chooseTagFragment: ChooseTagFragment
private lateinit var chooseTagViewModel: ChooseTagViewModel

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

chooseTagViewModel = ChooseTagViewModel()
navigateToChooseTagFragment()
}

Expand Down

0 comments on commit 2e94086

Please sign in to comment.