Skip to content

Commit 6fc38b6

Browse files
committed
[IDLE-000] ChatRoom을 만들 때 UserId에 따라 분기 저장하도록 변경
1 parent 3cdaa5f commit 6fc38b6

6 files changed

Lines changed: 50 additions & 83 deletions

File tree

core/data/src/main/java/com/idle/data/repository/ChatRepositoryImpl.kt

Lines changed: 35 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,16 @@ class ChatRepositoryImpl @Inject constructor(
4646
val chatRoom = it.toVO()
4747

4848
if (!localChatDataSource.isChatRoomExist(chatRoom.id, userId)) {
49-
when (userType) {
50-
UserType.WORKER -> localChatDataSource.insertChatRoomByWorker(
51-
myId = userId,
52-
chatRoom = ChatRoom(
53-
id = chatRoom.id,
54-
opponentId = chatRoom.opponentId,
55-
lastMessage = chatRoom.lastMessage,
56-
lastMessageTime = chatRoom.lastMessageTime,
57-
unReadMessageCount = chatRoom.unReadMessageCount,
58-
)
49+
localChatDataSource.insertChatRoom(
50+
myId = userId,
51+
chatRoom = ChatRoom(
52+
id = chatRoom.id,
53+
opponentId = chatRoom.opponentId,
54+
lastMessage = chatRoom.lastMessage,
55+
lastMessageTime = chatRoom.lastMessageTime,
56+
unReadMessageCount = chatRoom.unReadMessageCount,
5957
)
60-
61-
UserType.CENTER -> localChatDataSource.insertChatRoomByCenter(
62-
myId = userId,
63-
chatRoom = ChatRoom(
64-
id = chatRoom.id,
65-
opponentId = chatRoom.opponentId,
66-
lastMessage = chatRoom.lastMessage,
67-
lastMessageTime = chatRoom.lastMessageTime,
68-
unReadMessageCount = chatRoom.unReadMessageCount,
69-
)
70-
)
71-
}
58+
)
7259
}
7360
chatRoom
7461
}
@@ -77,10 +64,12 @@ class ChatRepositoryImpl @Inject constructor(
7764

7865
override suspend fun retrieveChatRoomMessages(
7966
roomId: String,
67+
myId: String,
8068
messageId: String?
8169
): Result<List<ChatMessage>> = runCatching {
8270
localChatDataSource.getMessages(
8371
roomId = roomId,
72+
myId = myId,
8473
lastMessageId = messageId,
8574
)
8675
}
@@ -109,29 +98,16 @@ class ChatRepositoryImpl @Inject constructor(
10998
response.map {
11099
val message = it.toVO()
111100
if (!localChatDataSource.isChatRoomExist(message.roomId, myId)) {
112-
when (userType) {
113-
UserType.WORKER -> localChatDataSource.insertChatRoomByWorker(
114-
myId = myId,
115-
chatRoom = ChatRoom(
116-
id = message.roomId,
117-
opponentId = if (myId == message.senderId) message.receiverId else message.senderId,
118-
lastMessage = message.content,
119-
lastMessageTime = message.createdAt,
120-
unReadMessageCount = 1,
121-
)
122-
)
123-
124-
UserType.CENTER -> localChatDataSource.insertChatRoomByCenter(
125-
myId = myId,
126-
chatRoom = ChatRoom(
127-
id = message.roomId,
128-
opponentId = if (myId == message.senderId) message.receiverId else message.senderId,
129-
lastMessage = message.content,
130-
lastMessageTime = message.createdAt,
131-
unReadMessageCount = 1,
132-
)
101+
localChatDataSource.insertChatRoom(
102+
myId = myId,
103+
chatRoom = ChatRoom(
104+
id = message.roomId,
105+
opponentId = if (myId == message.senderId) message.receiverId else message.senderId,
106+
lastMessage = message.content,
107+
lastMessageTime = message.createdAt,
108+
unReadMessageCount = 1,
133109
)
134-
}
110+
)
135111
}
136112
localChatDataSource.insertMessage(message, myId)
137113
}
@@ -140,6 +116,7 @@ class ChatRepositoryImpl @Inject constructor(
140116

141117
return@runCatching localChatDataSource.getMessages(
142118
roomId = roomId,
119+
myId = myId,
143120
lastMessageId = messageId,
144121
)
145122
}
@@ -168,29 +145,16 @@ class ChatRepositoryImpl @Inject constructor(
168145
myId = userId,
169146
)
170147
) {
171-
when (userType) {
172-
UserType.WORKER -> localChatDataSource.insertChatRoomByWorker(
173-
myId = userId,
174-
chatRoom = ChatRoom(
175-
id = message.roomId,
176-
opponentId = if (userId == message.senderId) message.receiverId else message.senderId,
177-
lastMessage = message.content,
178-
lastMessageTime = message.createdAt,
179-
unReadMessageCount = 1,
180-
)
181-
)
182-
183-
UserType.CENTER -> localChatDataSource.insertChatRoomByCenter(
184-
myId = userId,
185-
chatRoom = ChatRoom(
186-
id = message.roomId,
187-
opponentId = if (userId == message.senderId) message.receiverId else message.senderId,
188-
lastMessage = message.content,
189-
lastMessageTime = message.createdAt,
190-
unReadMessageCount = 1,
191-
)
148+
localChatDataSource.insertChatRoom(
149+
myId = userId,
150+
chatRoom = ChatRoom(
151+
id = message.roomId,
152+
opponentId = if (userId == message.senderId) message.receiverId else message.senderId,
153+
lastMessage = message.content,
154+
lastMessageTime = message.createdAt,
155+
unReadMessageCount = 1,
192156
)
193-
}
157+
)
194158
}
195159

196160
localChatDataSource.insertMessage(message, userId)
@@ -199,7 +163,8 @@ class ChatRepositoryImpl @Inject constructor(
199163
is ReadMessage -> {
200164
localChatDataSource.readMessages(
201165
roomId = message.chatroomId,
202-
opponentId = message.opponentId,
166+
myId = userId,
167+
senderId = message.opponentId,
203168
)
204169
}
205170
}
@@ -233,6 +198,7 @@ class ChatRepositoryImpl @Inject constructor(
233198

234199
override suspend fun readMessage(
235200
chatroomId: String,
201+
myId: String,
236202
opponentId: String,
237203
userType: UserType,
238204
): Result<Unit> =
@@ -245,7 +211,8 @@ class ChatRepositoryImpl @Inject constructor(
245211
).onSuccess {
246212
localChatDataSource.readMessages(
247213
roomId = chatroomId,
248-
opponentId = opponentId,
214+
myId = myId,
215+
senderId = opponentId,
249216
)
250217
}
251218
}

core/database/src/main/java/com/idle/database/dao/MessagesDao.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ interface MessagesDao {
1515
"""
1616
SELECT * FROM message
1717
WHERE roomId = :roomId
18+
AND myId = :myId
1819
AND (:lastMessageId IS NULL OR id < :lastMessageId)
1920
ORDER BY id DESC
2021
LIMIT :limit
2122
"""
2223
)
2324
suspend fun getMessages(
2425
roomId: String,
26+
myId: String,
2527
lastMessageId: String?,
2628
limit: Int = 50
2729
): List<MessageEntity>
@@ -31,12 +33,14 @@ interface MessagesDao {
3133
UPDATE message
3234
SET isRead = 1
3335
WHERE roomId = :roomId
36+
AND myId = :myId
3437
AND senderId = :opponentId
3538
AND isRead = 0
3639
"""
3740
)
3841
suspend fun readMessages(
3942
roomId: String,
43+
myId: String,
4044
opponentId: String,
4145
)
4246

@@ -46,8 +50,8 @@ interface MessagesDao {
4650
SELECT 1
4751
FROM message
4852
WHERE roomId = :roomId
49-
AND id = :messageId
5053
AND myId = :myId
54+
AND id = :messageId
5155
)
5256
"""
5357
)

core/database/src/main/java/com/idle/database/model/ChatRoomEntity.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package com.idle.database.model
33
import androidx.room.Embedded
44
import androidx.room.Entity
55
import androidx.room.Index
6-
import androidx.room.PrimaryKey
7-
import androidx.room.Relation
86
import com.idle.domain.model.chat.ChatRoom
97
import java.time.LocalDateTime
108

core/database/src/main/java/com/idle/database/source/LocalChatDataSource.kt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,20 @@ class LocalChatDataSource @Inject constructor(
1919

2020
suspend fun getMessages(
2121
roomId: String,
22+
myId: String,
2223
lastMessageId: String?
2324
): List<ChatMessage> =
2425
messagesDao.getMessages(
2526
roomId = roomId,
27+
myId = myId,
2628
lastMessageId = lastMessageId,
2729
).map(MessageEntity::toDomain).reversed()
2830

2931
suspend fun readMessages(
3032
roomId: String,
31-
opponentId: String,
32-
): Unit = messagesDao.readMessages(roomId, opponentId)
33+
myId: String,
34+
senderId: String,
35+
): Unit = messagesDao.readMessages(roomId, myId, senderId)
3336

3437
suspend fun isMessageExist(roomId: String, myId: String, messageId: String): Boolean =
3538
messagesDao.isMessageExist(
@@ -38,7 +41,7 @@ class LocalChatDataSource @Inject constructor(
3841
messageId = messageId,
3942
)
4043

41-
suspend fun insertChatRoomByWorker(myId: String, chatRoom: ChatRoom) =
44+
suspend fun insertChatRoom(myId: String, chatRoom: ChatRoom) =
4245
chatRoomsDao.insertChatRoom(
4346
ChatRoomEntity(
4447
id = chatRoom.id,
@@ -47,15 +50,6 @@ class LocalChatDataSource @Inject constructor(
4750
)
4851
)
4952

50-
suspend fun insertChatRoomByCenter(myId: String, chatRoom: ChatRoom) =
51-
chatRoomsDao.insertChatRoom(
52-
ChatRoomEntity(
53-
id = chatRoom.id,
54-
opponentId = myId,
55-
myId = chatRoom.opponentId,
56-
)
57-
)
58-
5953
suspend fun isChatRoomExist(roomId: String, myId: String): Boolean =
6054
chatRoomsDao.isChatRoomExist(
6155
roomId = roomId,

core/domain/src/main/kotlin/com/idle/domain/repositorry/ChatRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ interface ChatRepository {
1919

2020
suspend fun retrieveChatRoomMessages(
2121
roomId: String,
22+
myId: String,
2223
messageId: String?,
2324
): Result<List<ChatMessage>>
2425

@@ -50,6 +51,7 @@ interface ChatRepository {
5051

5152
suspend fun readMessage(
5253
chatroomId: String,
54+
myId: String,
5355
opponentId: String,
5456
userType: UserType,
5557
): Result<Unit>

feature/chatting-detail/src/main/java/com/idle/chatting_detail/ChattingDetailViewModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ class ChattingDetailViewModel @Inject constructor(
109109
if (fromJobPosting) {
110110
chatRepository.retrieveChatRoomMessages(
111111
roomId = chatroomId,
112+
myId = myId,
112113
messageId = _chatMessages.value?.first()?.id,
113114
).onSuccess { messages ->
114115
if (messages.isEmpty()) _callType.value = MessageCallType.END
@@ -183,6 +184,7 @@ class ChattingDetailViewModel @Inject constructor(
183184
internal suspend fun readMessage() {
184185
chatRepository.readMessage(
185186
chatroomId = chatroomId,
187+
myId = myId,
186188
opponentId = opponentId,
187189
userType = myUserType,
188190
).onSuccess {

0 commit comments

Comments
 (0)