feat(chat): 유저 크리에이터 DM을 추가한다

This commit is contained in:
Yu Sung
2026-07-12 04:48:17 +09:00
parent ce191539f2
commit 2dfff32ac1
23 changed files with 2410 additions and 6 deletions

View File

@@ -0,0 +1,52 @@
import Foundation
enum UserCreatorChatDisplayMessageStatus: Equatable {
case sent
case pending
case failed
}
struct UserCreatorChatDisplayMessage: Identifiable, Equatable {
let id: String
let requestId: String?
let messageId: Int?
let messageType: String
let mine: Bool
let createdAt: Int64
let textMessage: String?
let voiceMessageUrl: String?
let senderId: Int?
let senderNickname: String?
let senderProfileImageUrl: String?
var status: UserCreatorChatDisplayMessageStatus
init(message: UserCreatorChatMessageItem) {
self.id = "server-\(message.messageId)"
self.requestId = nil
self.messageId = message.messageId
self.messageType = message.messageType
self.mine = message.mine
self.createdAt = message.createdAt
self.textMessage = message.textMessage
self.voiceMessageUrl = message.voiceMessageUrl
self.senderId = message.senderId
self.senderNickname = message.senderNickname
self.senderProfileImageUrl = message.senderProfileImageUrl
self.status = .sent
}
init(pendingText text: String, requestId: String, createdAt: Int64) {
self.id = "pending-\(requestId)"
self.requestId = requestId
self.messageId = nil
self.messageType = "TEXT"
self.mine = true
self.createdAt = createdAt
self.textMessage = text
self.voiceMessageUrl = nil
self.senderId = nil
self.senderNickname = nil
self.senderProfileImageUrl = nil
self.status = .pending
}
}

View File

@@ -0,0 +1,44 @@
import Foundation
struct UserCreatorCreateRoomRequest: Encodable {
let creatorId: Int
}
struct UserCreatorCreateRoomResponse: Decodable {
let roomId: Int
}
struct UserCreatorOpenRoomResponse: Decodable {
let roomId: Int
let opponentNickname: String
let opponentProfileImageUrl: String?
let messages: [UserCreatorChatMessageItem]
let hasMore: Bool
let nextCursor: Int?
}
struct UserCreatorChatMessagesResponse: Decodable {
let messages: [UserCreatorChatMessageItem]
let hasMore: Bool
let nextCursor: Int?
}
struct UserCreatorChatMessageItem: Codable, Identifiable {
let messageId: Int
let messageType: String
let mine: Bool
let createdAt: Int64
let textMessage: String?
let voiceMessageUrl: String?
let senderId: Int
let senderNickname: String
let senderProfileImageUrl: String?
var id: Int { messageId }
}
struct UserCreatorVoiceMessageResponse: Decodable {
let message: UserCreatorChatMessageItem
let deliveredRealtime: Bool
let pushSent: Bool
}