Skip to content

Commit

Permalink
Merge pull request #117 from apeun-gidaechi/feature/116-group-chat-re…
Browse files Browse the repository at this point in the history
…mote

Feature/Group Chat Remote
  • Loading branch information
8954sood authored Jun 18, 2024
2 parents ee0815c + 839f06e commit 6cdf393
Show file tree
Hide file tree
Showing 39 changed files with 333 additions and 235 deletions.
1 change: 1 addition & 0 deletions data/core/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
24 changes: 24 additions & 0 deletions data/core/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import com.apeun.gidaechi.dsl.android

plugins {
alias(libs.plugins.seugi.android)
alias(libs.plugins.seugi.android.kotlin)
alias(libs.plugins.seugi.android.hilt)
}

android {
android {
namespace = "com.apeun.gidaechi.data.core"

defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
}
}

dependencies {
implementation(projects.network.core)
implementation(projects.common)

implementation(libs.kotlinx.collections.immutable)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.apeun.gidaechi.data.core.mapper

import com.apeun.gidaechi.data.core.model.ChatRoomModel
import com.apeun.gidaechi.data.core.model.ChatRoomStatusType
import com.apeun.gidaechi.data.core.model.ChatRoomType
import com.apeun.gidaechi.network.core.response.ChatRoomResponse

fun List<ChatRoomResponse>.toModels() = this.map {
it.toModel()
}

fun ChatRoomResponse.toModel() = ChatRoomModel(
id = id,
workspaceId = workspaceId,
type = type.toChatRoomType(),
roomAdmin = roomAdmin,
chatName = chatName,
chatRoomImg = chatRoomImg,
createdAt = createdAt,
memberList = joinUserId.map {
it.toModel()
},
chatStatusEnum = chatStatusEnum.toChatRoomStatusType(),
lastMessage = lastMessage,
lastMessageTimestamp = lastMessageTimestamp,
notReadCnt = notReadCnt,
)

internal fun String.toChatRoomType() = when (this) {
"PERSONAL" -> ChatRoomType.PERSONAL
else -> ChatRoomType.GROUP
}

internal fun String.toChatRoomStatusType() = when (this) {
"ALIVE" -> ChatRoomStatusType.ALIVE
else -> ChatRoomStatusType.DELETE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.apeun.gidaechi.data.core.mapper

import com.apeun.gidaechi.data.core.model.UserModel
import com.apeun.gidaechi.network.core.response.UserResponse

fun UserResponse.toModel() = UserModel(
id = id,
email = email,
birth = birth,
name = name,
picture = picture,
)
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.apeun.gidaechi.data.personalchat.model
package com.apeun.gidaechi.data.core.model

import java.time.LocalDateTime

data class PersonalChatRoomModel(
data class ChatRoomModel(
val id: String,
val workspaceId: String,
val type: PersonalChatRoomType,
val type: ChatRoomType,
val chatName: String,
val roomAdmin: Int,
val createdAt: LocalDateTime,
val chatRoomImg: String,
val chatStatusEnum: PersonalChatRoomStatusType,
val memberList: List<PersonalChatUserModel>,
val chatStatusEnum: ChatRoomStatusType,
val memberList: List<UserModel>,
val lastMessage: String,
val lastMessageTimestamp: LocalDateTime,
val notReadCnt: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.apeun.gidaechi.data.core.model

enum class ChatRoomStatusType {
ALIVE,
DELETE,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.apeun.gidaechi.data.core.model

enum class ChatRoomType {
PERSONAL,
GROUP,
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.apeun.gidaechi.data.personalchat.model
package com.apeun.gidaechi.data.core.model

data class PersonalChatUserModel(
data class UserModel(
val id: Int,
val email: String,
val birth: String,
Expand Down
1 change: 1 addition & 0 deletions data/group-chat/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
20 changes: 20 additions & 0 deletions data/group-chat/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
plugins {
alias(libs.plugins.seugi.android)
alias(libs.plugins.seugi.android.kotlin)
alias(libs.plugins.seugi.android.hilt)
}

android {
namespace = "com.apeun.gidaechi.data.groupchat"
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
}


dependencies {
implementation(projects.network.core)
implementation(projects.network.groupChat)
implementation(projects.data.core)
implementation(projects.common)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.apeun.gidaechi.data.groupchat

import com.apeun.gidaechi.common.model.Result
import com.apeun.gidaechi.data.core.model.ChatRoomModel
import kotlinx.coroutines.flow.Flow

interface GroupChatRepository {

suspend fun getGroupRoomList(workspaceId: String): Flow<Result<List<ChatRoomModel>>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.apeun.gidaechi.data.groupchat.di

import com.apeun.gidaechi.data.groupchat.GroupChatRepository
import com.apeun.gidaechi.data.groupchat.repository.GroupChatRepositoryImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
interface RepositoryModule {

@Binds
@Singleton
fun providesGroupChatRepository(groupChatRepositoryImpl: GroupChatRepositoryImpl): GroupChatRepository
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.apeun.gidaechi.data.groupchat.repository

import com.apeun.gidaechi.common.model.Result
import com.apeun.gidaechi.common.model.asResult
import com.apeun.gidaechi.common.utiles.DispatcherType
import com.apeun.gidaechi.common.utiles.SeugiDispatcher
import com.apeun.gidaechi.data.core.mapper.toModels
import com.apeun.gidaechi.data.core.model.ChatRoomModel
import com.apeun.gidaechi.data.groupchat.GroupChatRepository
import com.apeun.gidaechi.network.core.response.safeResponse
import com.apeun.gidaechi.network.groupchat.GroupChatDataSource
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn

class GroupChatRepositoryImpl @Inject constructor(
private val dataSource: GroupChatDataSource,
@SeugiDispatcher(DispatcherType.IO) private val dispatcher: CoroutineDispatcher,
) : GroupChatRepository {
override suspend fun getGroupRoomList(workspaceId: String): Flow<Result<List<ChatRoomModel>>> = flow {
val response = dataSource.getGroupRoomList(workspaceId).safeResponse()

emit(response.toModels())
}
.flowOn(dispatcher)
.asResult()
}
1 change: 1 addition & 0 deletions data/perosnal-chat/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ android {
dependencies {
implementation(projects.network.core)
implementation(projects.network.personalChat)
implementation(projects.data.core)
implementation(projects.common)
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.apeun.gidaechi.data.personalchat

import com.apeun.gidaechi.common.model.Result
import com.apeun.gidaechi.data.personalchat.model.PersonalChatRoomModel
import com.apeun.gidaechi.data.core.model.ChatRoomModel
import kotlinx.coroutines.flow.Flow

interface PersonalChatRepository {

suspend fun getAllChat(workspaceId: String): Flow<Result<List<PersonalChatRoomModel>>>
suspend fun getAllChat(workspaceId: String): Flow<Result<List<ChatRoomModel>>>
}

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import com.apeun.gidaechi.common.model.Result
import com.apeun.gidaechi.common.model.asResult
import com.apeun.gidaechi.common.utiles.DispatcherType
import com.apeun.gidaechi.common.utiles.SeugiDispatcher
import com.apeun.gidaechi.data.core.mapper.toModels
import com.apeun.gidaechi.data.core.model.ChatRoomModel
import com.apeun.gidaechi.data.personalchat.PersonalChatDataSource
import com.apeun.gidaechi.data.personalchat.PersonalChatRepository
import com.apeun.gidaechi.data.personalchat.mapper.toModels
import com.apeun.gidaechi.data.personalchat.model.PersonalChatRoomModel
import com.apeun.gidaechi.network.core.response.safeResponse
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
Expand All @@ -19,7 +19,7 @@ class PersonalChatRepositoryImpl @Inject constructor(
@SeugiDispatcher(DispatcherType.IO) private val dispatcher: CoroutineDispatcher,
private val dataSource: PersonalChatDataSource,
) : PersonalChatRepository {
override suspend fun getAllChat(workspaceId: String): Flow<Result<List<PersonalChatRoomModel>>> = flow {
override suspend fun getAllChat(workspaceId: String): Flow<Result<List<ChatRoomModel>>> = flow {
val response = dataSource.getAllChat(workspaceId).safeResponse()
emit(response.toModels())
}
Expand Down
1 change: 1 addition & 0 deletions feature-main/chat/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ dependencies {
implementation(libs.kotlinx.collections.immutable)
implementation(projects.data.perosnalChat)
implementation(projects.common)
implementation(projects.data.core)
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
package com.apeun.gidaechi.chat.model

import com.apeun.gidaechi.data.personalchat.model.PersonalChatRoomModel
import com.apeun.gidaechi.data.core.model.ChatRoomModel
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf

data class ChatUiState(
val chatItems: ImmutableList<PersonalChatRoomModel> = persistentListOf(),
)

data class TestChatItem(
val chatId: Int = 0,
val userName: String,
val userProfile: String?,
val message: String,
val createdAt: String,
val count: Int?,
val chatItems: ImmutableList<ChatRoomModel> = persistentListOf(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,13 @@ internal fun MainScreen(navHostController: NavHostController = rememberNavContro
)

roomScreen(
navigateToChatDetail = {},
navigateToChatDetail = { chatId, workspaceId ->
navHostController.navigateToChatDetail(
chatRoomId = chatId,
workspace = workspaceId,
isPersonal = false,
)
},
navigateToCreateRoom = {
navHostController.navigateToRoomCreate()
},
Expand Down
3 changes: 3 additions & 0 deletions feature-main/room/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ android {
dependencies {

implementation(projects.designsystem)
implementation(projects.common)
implementation(projects.data.core)
implementation(projects.data.groupChat)
}
Loading

0 comments on commit 6cdf393

Please sign in to comment.