feat(chat-room): 채팅방에서 메시지 보내기 API 연동
- 타이핑 indicator 동작하지 않던 버그 수정 - 이미지 4:5 비율로 보이도록 수정
This commit is contained in:
@@ -24,6 +24,8 @@ final class ChatRoomViewModel: ObservableObject {
|
||||
@Published private(set) var countdownText: String = "00:00:00"
|
||||
@Published private(set) var showQuotaNoticeView: Bool = false
|
||||
|
||||
@Published private(set) var showSendingMessage: Bool = false
|
||||
|
||||
// MARK: - Message State
|
||||
@Published var messageText: String = ""
|
||||
@Published private(set) var messages: [ServerChatMessage] = []
|
||||
@@ -48,8 +50,59 @@ final class ChatRoomViewModel: ObservableObject {
|
||||
let message = messageText.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
messageText = ""
|
||||
|
||||
// TODO: 실제 메시지 전송 로직 구현
|
||||
DEBUG_LOG("메시지 전송: \(message)")
|
||||
let nowMs = Int64(Date().timeIntervalSince1970 * 1000)
|
||||
|
||||
messages.append(
|
||||
ServerChatMessage(
|
||||
messageId: 0 - nowMs,
|
||||
message: message,
|
||||
profileImageUrl: "",
|
||||
mine: true,
|
||||
createdAt: nowMs,
|
||||
messageType: "TEXT",
|
||||
imageUrl: nil,
|
||||
price: nil,
|
||||
hasAccess: true
|
||||
)
|
||||
)
|
||||
|
||||
showSendingMessage = true
|
||||
repository.sendMessage(roomId: roomId, message: message)
|
||||
.sink { result in
|
||||
switch result {
|
||||
case .finished:
|
||||
DEBUG_LOG("finish")
|
||||
case .failure(let error):
|
||||
ERROR_LOG(error.localizedDescription)
|
||||
}
|
||||
} receiveValue: { [weak self] response in
|
||||
let responseData = response.data
|
||||
|
||||
do {
|
||||
let jsonDecoder = JSONDecoder()
|
||||
let decoded = try jsonDecoder.decode(ApiResponse<SendChatMessageResponse>.self, from: responseData)
|
||||
|
||||
if let data = decoded.data, decoded.success {
|
||||
self?.messages.append(contentsOf: data.messages)
|
||||
self?.updateQuota(totalRemaining: data.totalRemaining, nextRechargeAtEpoch: data.nextRechargeAtEpoch)
|
||||
} else {
|
||||
if let message = decoded.message {
|
||||
self?.errorMessage = message
|
||||
} else {
|
||||
self?.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
||||
}
|
||||
|
||||
self?.isShowPopup = true
|
||||
}
|
||||
|
||||
self?.showSendingMessage = false
|
||||
} catch {
|
||||
self?.showSendingMessage = false
|
||||
self?.errorMessage = "다시 시도해 주세요.\n계속 같은 문제가 발생할 경우 고객센터로 문의 주시기 바랍니다."
|
||||
self?.isShowPopup = true
|
||||
}
|
||||
}
|
||||
.store(in: &subscription)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
|
||||
Reference in New Issue
Block a user