diff --git a/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/Contents.json b/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/Contents.json deleted file mode 100644 index 94a4c86..0000000 --- a/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "filename" : "ic_message_square_777.png", - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/ic_message_square_777.png b/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/ic_message_square_777.png deleted file mode 100644 index b4a2ed2..0000000 Binary files a/SodaLive/Resources/Assets.xcassets/ic_message_square_777 1.imageset/ic_message_square_777.png and /dev/null differ diff --git a/SodaLive/Sources/Chat/Talk/Room/Character/CharacterInfo.swift b/SodaLive/Sources/Chat/Talk/Room/Character/CharacterInfo.swift new file mode 100644 index 0000000..25a773e --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Character/CharacterInfo.swift @@ -0,0 +1,13 @@ +// +// CharacterInfo.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct CharacterInfo: Decodable { + let characterId: Int64 + let name: String + let profileImageUrl: String + let characterType: CharacterType +} diff --git a/SodaLive/Sources/Chat/Talk/Room/ChatRoomRepository.swift b/SodaLive/Sources/Chat/Talk/Room/ChatRoomRepository.swift new file mode 100644 index 0000000..933805e --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/ChatRoomRepository.swift @@ -0,0 +1,15 @@ +// +// ChatRoomRepository.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import Foundation +import CombineMoya +import Combine +import Moya + +class ChatRoomRepository { + private let talkApi = MoyaProvider() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/ChatRoomView.swift b/SodaLive/Sources/Chat/Talk/Room/ChatRoomView.swift new file mode 100644 index 0000000..4874900 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/ChatRoomView.swift @@ -0,0 +1,23 @@ +// +// ChatRoomView.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import SwiftUI + +struct ChatRoomView: View { + + @StateObject var viewModel = ChatRoomViewModel() + + var body: some View { + BaseView(isLoading: $viewModel.isLoading) { + + } + } +} + +#Preview { + ChatRoomView() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift b/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift new file mode 100644 index 0000000..8680046 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/ChatRoomViewModel.swift @@ -0,0 +1,21 @@ +// +// ChatRoomViewModel.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import Foundation +import Combine +import Moya + +final class ChatRoomViewModel: ObservableObject { + // MARK: - Published State + @Published var isLoading: Bool = false + @Published var errorMessage: String = "" + @Published var isShowPopup = false + + // MARK: - Private + private let repository = ChatRoomRepository() + private var subscription = Set() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomRequest.swift b/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomRequest.swift new file mode 100644 index 0000000..0529be1 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomRequest.swift @@ -0,0 +1,10 @@ +// +// CreateChatRoomRequest.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct CreateChatRoomRequest: Encodable { + let characterId: Int64 +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomResponse.swift b/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomResponse.swift new file mode 100644 index 0000000..7365de0 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Create/CreateChatRoomResponse.swift @@ -0,0 +1,10 @@ +// +// CreateChatRoomResponse.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct CreateChatRoomResponse: Decodable { + let chatRoomId: Int64 +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Enter/ChatRoomEnterResponse.swift b/SodaLive/Sources/Chat/Talk/Room/Enter/ChatRoomEnterResponse.swift new file mode 100644 index 0000000..09d0bac --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Enter/ChatRoomEnterResponse.swift @@ -0,0 +1,16 @@ +// +// ChatRoomEnterResponse.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct ChatRoomEnterResponse: Decodable { + let roomId: Int64 + let character: CharacterInfo + let messages: [ServerChatMessage] + let hasMoreMessages: Bool + let totalRemaining: Int + let nextRechargeAtEpoch: Int64? + let bgImageUrl: String? +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/AiMessageItemView.swift b/SodaLive/Sources/Chat/Talk/Room/Message/AiMessageItemView.swift new file mode 100644 index 0000000..a6931d2 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/AiMessageItemView.swift @@ -0,0 +1,18 @@ +// +// AiMessageItemView.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import SwiftUI + +struct AiMessageItemView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + AiMessageItemView() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageRequest.swift b/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageRequest.swift new file mode 100644 index 0000000..8437963 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageRequest.swift @@ -0,0 +1,10 @@ +// +// SendChatMessageRequest.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct SendChatMessageRequest: Encodable { + let message: String +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageResponse.swift b/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageResponse.swift new file mode 100644 index 0000000..abf75a0 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/SendChatMessageResponse.swift @@ -0,0 +1,12 @@ +// +// SendChatMessageResponse.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct SendChatMessageResponse: Decodable { + let messages: [ServerChatMessage] + let totalRemaining: Int + let nextRechargeAtEpoch: Int64? +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/ServerChatMessage.swift b/SodaLive/Sources/Chat/Talk/Room/Message/ServerChatMessage.swift new file mode 100644 index 0000000..3329eb1 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/ServerChatMessage.swift @@ -0,0 +1,18 @@ +// +// ServerChatMessage.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct ServerChatMessage: Decodable { + let messageId: Int64 + let message: String + let profileImageUrl: String + let mine: Bool + let createdAt: Int64 + let messageType: String + let imageUrl: String? + let price: Int? + let hasAccess: Bool +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/TypingIndicatorItemView.swift b/SodaLive/Sources/Chat/Talk/Room/Message/TypingIndicatorItemView.swift new file mode 100644 index 0000000..621ae8e --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/TypingIndicatorItemView.swift @@ -0,0 +1,18 @@ +// +// TypingIndicatorItemView.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import SwiftUI + +struct TypingIndicatorItemView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + TypingIndicatorItemView() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Message/UserMessageItemView.swift b/SodaLive/Sources/Chat/Talk/Room/Message/UserMessageItemView.swift new file mode 100644 index 0000000..16e479c --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Message/UserMessageItemView.swift @@ -0,0 +1,18 @@ +// +// UserMessageItemView.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import SwiftUI + +struct UserMessageItemView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + UserMessageItemView() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaNoticeItemView.swift b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaNoticeItemView.swift new file mode 100644 index 0000000..9745453 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaNoticeItemView.swift @@ -0,0 +1,18 @@ +// +// ChatQuotaNoticeItemView.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import SwiftUI + +struct ChatQuotaNoticeItemView: View { + var body: some View { + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + } +} + +#Preview { + ChatQuotaNoticeItemView() +} diff --git a/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift new file mode 100644 index 0000000..7bd49e9 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaPurchaseRequest.swift @@ -0,0 +1,8 @@ +// +// ChatQuotaPurchaseRequest.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import Foundation diff --git a/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaStatusResponse.swift b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaStatusResponse.swift new file mode 100644 index 0000000..68fd2f2 --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Quota/ChatQuotaStatusResponse.swift @@ -0,0 +1,8 @@ +// +// ChatQuotaStatusResponse.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +import Foundation diff --git a/SodaLive/Sources/Chat/Talk/Room/Reset/ChatRoomResetRequest.swift b/SodaLive/Sources/Chat/Talk/Room/Reset/ChatRoomResetRequest.swift new file mode 100644 index 0000000..e0e9a8f --- /dev/null +++ b/SodaLive/Sources/Chat/Talk/Room/Reset/ChatRoomResetRequest.swift @@ -0,0 +1,10 @@ +// +// ChatRoomResetRequest.swift +// SodaLive +// +// Created by klaus on 9/2/25. +// + +struct ChatRoomResetRequest: Encodable { + let container: String = "ios" +}