Skip to content

Commit

Permalink
✨ 팔로잉 유저들의 게시글을 불러와 커뮤니티 메인 탭에 띄워주는 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
soopeach committed Dec 21, 2023
1 parent adae55a commit 9353611
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 13 deletions.
6 changes: 6 additions & 0 deletions app/src/main/java/com/whyranoid/walkie/KoinModules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ import com.whyranoid.domain.repository.UserRepository
import com.whyranoid.domain.usecase.GetChallengeDetailUseCase
import com.whyranoid.domain.usecase.GetChallengePreviewsByTypeUseCase
import com.whyranoid.domain.usecase.GetChallengingPreviewsUseCase
import com.whyranoid.domain.usecase.GetFollowingsPostsUseCase
import com.whyranoid.domain.usecase.GetMyFollowingUseCase
import com.whyranoid.domain.usecase.GetNewChallengePreviewsUseCase
import com.whyranoid.domain.usecase.GetPostUseCase
import com.whyranoid.domain.usecase.GetUserBadgesUseCase
Expand All @@ -68,6 +70,7 @@ import com.whyranoid.domain.usecase.running.RunningStartUseCase
import com.whyranoid.domain.usecase.running.SendLikeUseCase
import com.whyranoid.presentation.screens.mypage.editprofile.EditProfileViewModel
import com.whyranoid.presentation.viewmodel.AddPostViewModel
import com.whyranoid.presentation.viewmodel.CommunityScreenViewModel
import com.whyranoid.presentation.viewmodel.RunningEditViewModel
import com.whyranoid.presentation.viewmodel.RunningViewModel
import com.whyranoid.presentation.viewmodel.SearchFriendViewModel
Expand Down Expand Up @@ -103,6 +106,7 @@ val viewModelModule = module {
factory { AddPostViewModel(get()) }
factory { SearchFriendViewModel(get(), get(), get()) }
factory { DialogViewModel(get(), get(), get(), get(), get(), get()) }
factory { CommunityScreenViewModel(get(), get()) }
}

val repositoryModule = module {
Expand Down Expand Up @@ -151,6 +155,8 @@ val useCaseModule = module {
single { GetNetworkState(get()) }
single { FollowUseCase(get(), get()) }
single { UnFollowUseCase(get(), get()) }
single { GetMyFollowingUseCase(get(), get()) }
single { GetFollowingsPostsUseCase(get(), get()) }
}

val databaseModule = module {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.whyranoid.domain.model.post.Post
import com.whyranoid.presentation.icons.buttoniconpack.CommentButtonIcon
import com.whyranoid.presentation.icons.buttoniconpack.HeartButtonIcon
import com.whyranoid.presentation.theme.WalkieTypography

@Composable
fun PostContentItem() {
fun PostContentItem(post: Post) {
Column(
modifier = Modifier
.fillMaxWidth()
Expand All @@ -32,7 +33,7 @@ fun PostContentItem() {
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(
text = "좋아요 11",
text = "좋아요 ${post.likeCount}",
style = WalkieTypography.Body1
)

Expand Down Expand Up @@ -67,7 +68,7 @@ fun PostContentItem() {
Spacer(modifier = Modifier.size(13.dp))

Text(
text = "사랑이 넘쳐나는... 더보기",
text = post.contents,
style = WalkieTypography.Body1_Normal
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.whyranoid.domain.model.post.Post

@Composable
fun PostItem() {
fun PostItem(post: Post) {
Column(
modifier = Modifier
.fillMaxHeight()
Expand All @@ -25,18 +26,17 @@ fun PostItem() {
.height(1.dp)
)

PostProfileItem()
PostProfileItem(post.author)

AsyncImage(
model = "https://picsum.photos/250/250 ", contentDescription = "게시글 사진",
model = post.imageUrl, contentDescription = "게시글 사진",
modifier = Modifier
.fillMaxWidth()
.aspectRatio(1f),
contentScale = ContentScale.Crop
)

PostContentItem()

PostContentItem(post)

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import com.whyranoid.domain.model.user.User
import com.whyranoid.presentation.theme.WalkieColor
import com.whyranoid.presentation.theme.WalkieTypography

@Composable
fun PostProfileItem() {
fun PostProfileItem(user: User) {
Row(
modifier = Modifier
.fillMaxWidth()
Expand All @@ -37,7 +38,7 @@ fun PostProfileItem() {
contentAlignment = Alignment.Center
) {
AsyncImage(
model = "https://picsum.photos/250/250 ", contentDescription = "내 프로필 이미지",
model = user.imageUrl, contentDescription = "내 프로필 이미지",
modifier = Modifier
.size(24.dp)
.border(0.5.dp, WalkieColor.GrayBorder, CircleShape)
Expand All @@ -48,7 +49,7 @@ fun PostProfileItem() {
Spacer(modifier = Modifier.size(11.dp))
Column {
Text(
"tiny_soo_99",
user.nickname,
style = WalkieTypography.Body1
)
Text(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.KeyboardArrowDown
import androidx.compose.material.icons.filled.Search
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
Expand All @@ -23,11 +24,18 @@ import com.whyranoid.presentation.component.bar.WalkieTopBar
import com.whyranoid.presentation.component.community.PostItem
import com.whyranoid.presentation.component.community.RunningFollowerItem
import com.whyranoid.presentation.theme.WalkieTypography
import com.whyranoid.presentation.viewmodel.CommunityScreenViewModel
import org.koin.androidx.compose.koinViewModel
import org.orbitmvi.orbit.compose.collectAsState

@Composable
fun CommunityScreen(
navController: NavController,
) {

val viewModel = koinViewModel<CommunityScreenViewModel>()
val state by viewModel.collectAsState()

Scaffold(
topBar = {
WalkieTopBar(
Expand Down Expand Up @@ -85,9 +93,9 @@ fun CommunityScreen(
}
}

repeat(10) {
state.posts.getDataOrNull()?.forEach { post ->
item {
PostItem()
PostItem(post = post)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.whyranoid.presentation.viewmodel

import androidx.lifecycle.ViewModel
import com.whyranoid.domain.model.post.Post
import com.whyranoid.domain.model.user.User
import com.whyranoid.domain.usecase.GetMyFollowingUseCase
import com.whyranoid.domain.usecase.GetFollowingsPostsUseCase
import com.whyranoid.presentation.model.UiState
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.syntax.simple.intent
import org.orbitmvi.orbit.syntax.simple.reduce
import org.orbitmvi.orbit.viewmodel.container

sealed interface CommunityScreenSideEffect {

}

data class CommunityScreenState(
val posts: UiState<List<Post>> = UiState.Idle,
val following: UiState<List<User>> = UiState.Idle,
)

class CommunityScreenViewModel(
private val getMyFollowingUseCase: GetMyFollowingUseCase,
private val getFollowingsPostsUseCase: GetFollowingsPostsUseCase
) : ViewModel(), ContainerHost<CommunityScreenState, CommunityScreenSideEffect> {

override val container =
container<CommunityScreenState, CommunityScreenSideEffect>(CommunityScreenState())

init {
intent {
val result = getMyFollowingUseCase()
result.onSuccess { myFollowing ->
reduce {
state.copy(
following = UiState.Success(myFollowing)
)
}
}
}
getPosts()
}

fun getPosts() = intent {
val result = getFollowingsPostsUseCase()
println("결과 : $result")
result.onSuccess { posts ->
reduce {
state.copy(
posts = UiState.Success(
(state.posts.getDataOrNull() ?: emptyList()) +
posts
)
)
}
}
}
}

0 comments on commit 9353611

Please sign in to comment.