Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#54 [ui] 행복루틴 삭제하기 뷰 #61

Merged
merged 32 commits into from
Jan 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
48d22d1
Merge remote-tracking branch 'origin/develop' into develop
pump9918 Jan 14, 2024
cc00adb
#54 [ui] 행복루틴 삭제하기 xml
pump9918 Jan 15, 2024
0dd5cb9
#54 [ui] 행복루틴 삭제하기 뷰로직
pump9918 Jan 15, 2024
fa07a12
Merge remote-tracking branch 'origin/develop' into develop
pump9918 Jan 15, 2024
c080f49
Merge remote-tracking branch 'origin/develop' into feature/#54-ui-hap…
pump9918 Jan 15, 2024
5a1dc39
Merge remote-tracking branch 'origin/develop' into develop
pump9918 Jan 15, 2024
d78583f
Merge remote-tracking branch 'origin/develop' into feature/#54-ui-hap…
pump9918 Jan 15, 2024
b690202
#54 [chore] 버튼 크기 수정
pump9918 Jan 15, 2024
744abed
#54 [ui] 편집 버튼 Fragment 이동
pump9918 Jan 15, 2024
0d14afa
#54 [chore] xml 간격 조정
pump9918 Jan 15, 2024
69ce3a2
#54 [ui] 삭제하기 바텀시트 버튼 스낵바
pump9918 Jan 15, 2024
147dcb5
Merge remote-tracking branch 'origin/develop' into feature/#54-ui-hap…
pump9918 Jan 15, 2024
61f624a
#54 [chore] 세부 사항 정렬
pump9918 Jan 15, 2024
fb3d90c
#54 [chore] CI 공백 정렬
pump9918 Jan 15, 2024
164053d
#54 [chore] 불필요한 코드 삭제
pump9918 Jan 15, 2024
4a0bb3d
Merge remote-tracking branch 'origin/develop' into develop
pump9918 Jan 15, 2024
147be9f
#64 [feat] 행복루틴 목록 칩 서버통신
pump9918 Jan 15, 2024
acc3d3b
#64 [feat] 칩 서버통신 리스폰스 뷰모델에 가져오기
pump9918 Jan 15, 2024
872b290
#64 [feat] null -> 서버통신 뷰모델 옵저버
pump9918 Jan 15, 2024
8887a98
#64 [chore] xml 뷰모델 코드 삭제
pump9918 Jan 15, 2024
7d56904
#64 [ui] API명세서 수정에 따른 데이터 클래스 수정
pump9918 Jan 16, 2024
5b43ef9
#64 [feat] 테마별 행복루틴 리스트 서버통신
pump9918 Jan 16, 2024
67e6f02
#64 [feat] 뷰모델 및 액티비티 서버 규격 통일
pump9918 Jan 16, 2024
6b8f18d
#54 [chore] xml 스트링 추출 수정
pump9918 Jan 16, 2024
a8816c9
Merge remote-tracking branch 'origin/develop' into feature/#54-ui-hap…
pump9918 Jan 16, 2024
bd67a46
#54 [chore] conflict 해결
pump9918 Jan 16, 2024
adc82c5
Merge remote-tracking branch 'origin/develop' into feature/#54-ui-hap…
pump9918 Jan 16, 2024
2a30117
#54 [chore] conflict 해결
pump9918 Jan 16, 2024
a494c5c
#54 [chore] 바텀시트 string 추출, 불필요한 클릭리스너 삭제
pump9918 Jan 16, 2024
9248bc5
Merge branch 'feature/#64-feat-happy-addlist-server' into feature/#54…
pump9918 Jan 16, 2024
ecc155f
#54 [chore] conflict 해결
pump9918 Jan 16, 2024
44711cc
#54 [chore] CI 공백 수정
pump9918 Jan 16, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.sopetit.softie.data.entity.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class HappyChipResponse(
@SerialName("themes")
val themes: List<HappyChip>
) {
@Serializable
data class HappyChip(
@SerialName("themeId")
val themeId: Int,
@SerialName("name")
val name: String,
)

fun toHappyChip() = themes.map { happychip ->
com.sopetit.softie.domain.entity.HappyChip(
themeId = happychip.themeId,
name = happychip.name,
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.sopetit.softie.data.entity.response

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class HappyContentResponse(
@SerialName("routines")
val routines: List<HappyContent>
) {
@Serializable
data class HappyContent(
@SerialName("routineId")
val routineId: Int,
@SerialName("name")
val name: String,
@SerialName("nameColor")
val nameColor: String,
@SerialName("title")
val title: String,
@SerialName("iconImageUrl")
val iconImageUrl: String
)

fun toHappyContent() = routines.map { happycontent ->
com.sopetit.softie.domain.entity.HappyContent(
routineId = happycontent.routineId,
name = happycontent.name,
nameColor = happycontent.nameColor,
title = happycontent.title,
iconImageUrl = happycontent.iconImageUrl
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.sopetit.softie.data.repositoryImpl

import com.sopetit.softie.data.source.HappinessRoutineDataSource
import com.sopetit.softie.domain.entity.HappyChip
import com.sopetit.softie.domain.entity.HappyContent
import com.sopetit.softie.domain.repository.HappinessRoutineRepository
import javax.inject.Inject

class HappinessRoutineRepositoryImpl @Inject constructor(
private val happinessRoutineDataSource: HappinessRoutineDataSource
) : HappinessRoutineRepository {
override suspend fun getHappyChip(): Result<List<HappyChip>> =
runCatching { happinessRoutineDataSource.getHappyChip() }.map { response ->
requireNotNull(response.data).toHappyChip()
}

override suspend fun getHappyContent(themeId: Int): Result<List<HappyContent>> =
runCatching { happinessRoutineDataSource.getHappyContent(themeId) }.map { response ->
requireNotNull(response.data).toHappyContent()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sopetit.softie.data.service

import com.sopetit.softie.data.entity.BaseResponse
import com.sopetit.softie.data.entity.response.HappyChipResponse
import com.sopetit.softie.data.entity.response.HappyContentResponse
import retrofit2.http.GET
import retrofit2.http.Query

interface HappinessRoutineService {
@GET("api/v1/routines/happiness/themes")
suspend fun getHappyChip(): BaseResponse<HappyChipResponse>

@GET("api/v1/routines/happiness")
suspend fun getHappyContent(
@Query("themeId") themeId: Int
): BaseResponse<HappyContentResponse>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.sopetit.softie.data.source

import com.sopetit.softie.data.entity.BaseResponse
import com.sopetit.softie.data.entity.response.HappyChipResponse
import com.sopetit.softie.data.entity.response.HappyContentResponse
import com.sopetit.softie.data.service.HappinessRoutineService
import javax.inject.Inject

class HappinessRoutineDataSource @Inject constructor(
private val happinessRoutineService: HappinessRoutineService
) {
suspend fun getHappyChip(): BaseResponse<HappyChipResponse> =
happinessRoutineService.getHappyChip()

suspend fun getHappyContent(themeId: Int): BaseResponse<HappyContentResponse> =
happinessRoutineService.getHappyContent(themeId)
}
8 changes: 8 additions & 0 deletions app/src/main/java/com/sopetit/softie/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package com.sopetit.softie.di

import com.sopetit.softie.data.repositoryImpl.DailyRoutineRepositoryImpl
import com.sopetit.softie.data.repositoryImpl.DollRepositoryImpl
import com.sopetit.softie.data.repositoryImpl.HappinessRoutineRepositoryImpl
import com.sopetit.softie.data.repositoryImpl.MemberRepositoryImpl
import com.sopetit.softie.domain.repository.DailyRoutineRepository
import com.sopetit.softie.domain.repository.DollRepository
import com.sopetit.softie.domain.repository.HappinessRoutineRepository
import com.sopetit.softie.domain.repository.MemberRepository
import dagger.Binds
import dagger.Module
Expand Down Expand Up @@ -32,4 +34,10 @@ abstract class RepositoryModule {
abstract fun bindToDollRepository(
dollRepositoryImpl: DollRepositoryImpl
): DollRepository

@Binds
@Singleton
abstract fun bindToHappinessRoutineRepository(
happinessRoutineRepositoryImpl: HappinessRoutineRepositoryImpl
): HappinessRoutineRepository
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.sopetit.softie.di

import com.sopetit.softie.data.service.DailyRoutineService
import com.sopetit.softie.data.service.DollService
import com.sopetit.softie.data.service.HappinessRoutineService
import com.sopetit.softie.data.service.MemberService
import dagger.Module
import dagger.Provides
Expand All @@ -23,4 +24,8 @@ object RetrofitServiceModule {
@Provides
fun providesDollService(@RetrofitModule.SoftieType retrofit: Retrofit): DollService =
retrofit.create(DollService::class.java)

@Provides
fun providesHappinessRoutineService(@RetrofitModule.SoftieType retrofit: Retrofit): HappinessRoutineService =
retrofit.create(HappinessRoutineService::class.java)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.sopetit.softie.domain.entity

import androidx.annotation.DrawableRes

data class HappyContent(
val routineId: Int,
val name: String,
val nameColor: String,
val title: String,
val content: String,
@DrawableRes val imageUrl: Int,
val iconImageUrl: String,
)
14 changes: 14 additions & 0 deletions app/src/main/java/com/sopetit/softie/domain/entity/HappyUser.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.sopetit.softie.domain.entity

import androidx.annotation.DrawableRes

data class HappyUser(
val routineId: Int,
@DrawableRes val imageUrl: Int,
val title: String,
val content: String,
val detailTitle: String,
val detailContent: String,
val detailTime: String,
val detailPlace: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.sopetit.softie.domain.repository

import com.sopetit.softie.domain.entity.HappyChip
import com.sopetit.softie.domain.entity.HappyContent

interface HappinessRoutineRepository {
suspend fun getHappyChip(): Result<List<HappyChip>>
suspend fun getHappyContent(themeId: Int): Result<List<HappyContent>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.sopetit.softie.domain.usecase

import com.sopetit.softie.domain.repository.HappinessRoutineRepository
import javax.inject.Inject

class GetHappyChipUseCase @Inject constructor(
private val happinessRoutineRepository: HappinessRoutineRepository
) {
suspend operator fun invoke() = happinessRoutineRepository.getHappyChip()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.sopetit.softie.domain.usecase

import com.sopetit.softie.domain.repository.HappinessRoutineRepository
import javax.inject.Inject

class GetHappyContentUseCase @Inject constructor(
private val happinessRoutineRepository: HappinessRoutineRepository
) {
suspend operator fun invoke(themeId: Int) =
happinessRoutineRepository.getHappyContent(themeId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import androidx.activity.viewModels
import androidx.recyclerview.widget.RecyclerView
import com.sopetit.softie.R
import com.sopetit.softie.databinding.ActivityHappyAddListBinding
import com.sopetit.softie.domain.entity.HappyContent
import com.sopetit.softie.ui.happyroutine.adddetail.HappyDetailActivity
import com.sopetit.softie.util.HorizontalChipItemDecoration
import com.sopetit.softie.util.VerticalItemDecoration
Expand All @@ -25,18 +24,18 @@ class HappyAddListActivity :
private var happyAddListChipContentAdapter: HappyAddListChipContentAdapter? = null
private var happyAddListContentAdapter: HappyAddListContentAdapter? = null

private val themeId = 0

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityHappyAddListBinding.inflate(layoutInflater)
setContentView(binding.root)
setStatusBarColorFromResource(R.color.background)

viewModel.getHappyChip()

setChipAdapters()
setBackEnter()
setItemDeco()
setupAdapter(themeId)
setupAdapter()
}

private fun setChipAdapters() {
Expand All @@ -57,33 +56,20 @@ class HappyAddListActivity :
binding.rvHappyAddListChip.addItemDecoration(chipDeco)
}

private fun setupAdapter(themeId: Int) {
private fun setupAdapter() {
with(binding) {
rvHappyAddListChip.adapter = happyAddListChipContentAdapter
rvHappyAddList.adapter = happyAddListContentAdapter
}
happyAddListChipContentAdapter?.submitList(viewModel.mockHappyChipList.value)
happyAddListContentAdapter?.submitList(viewModel.mockHappyContentList.value)

happyAddListChipContentAdapter?.setOnChipClickListener { handleChipClick(it.themeId) }
}

private fun handleChipClick(themeId: Int) {
val listToSubmit = when (themeId) {
1 -> viewModel.mockHappyContentList.value
2 -> viewModel.mockHappyContentListOne.value
3 -> viewModel.mockHappyContentListTwo.value
4 -> viewModel.mockHappyContentListThree.value
5 -> viewModel.mockHappyContentListFour.value
6 -> viewModel.mockHappyContentListFive.value
else -> viewModel.mockHappyContentList.value
viewModel.happyChipResponse.observe(this) {
happyAddListChipContentAdapter?.submitList(viewModel.happyChipResponse.value)
}
viewModel.happyContentResponse.observe(this) {
happyAddListContentAdapter?.submitList(viewModel.happyContentResponse.value)
}
happyAddListChipContentAdapter?.setOnChipClickListener {
viewModel.getHappyContent(it.themeId)
}

listToSubmit?.let { makeSubmitList(it) }
}

private fun makeSubmitList(list: List<HappyContent>) {
happyAddListContentAdapter?.submitList(list)
}

private fun moveToDetail(id: Int) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.sopetit.softie.ui.happyroutine.addlist

import android.graphics.Color
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import coil.load
import com.sopetit.softie.databinding.ItemHappyAddListBinding
import com.sopetit.softie.domain.entity.HappyContent
import com.sopetit.softie.util.ItemDiffCallback
Expand All @@ -22,9 +24,10 @@ class HappyAddListContentAdapter(private val moveToDetail: (Int) -> Unit) :
) :
RecyclerView.ViewHolder(binding.root) {
fun onBind(data: HappyContent) {
binding.tvHappyListItemTitle.text = data.title
binding.tvHappyListItemContent.text = data.content
binding.ivHappyListItemIcon.setImageResource(data.imageUrl)
binding.tvHappyListItemTitle.text = data.name
binding.tvHappyListItemTitle.setTextColor(Color.parseColor(data.nameColor))
binding.tvHappyListItemContent.text = data.title
binding.ivHappyListItemIcon.load(data.iconImageUrl)

binding.root.setOnClickListener {
moveToDetail(data.routineId)
Expand Down
Loading