108 lines
2.2 KiB
Swift
108 lines
2.2 KiB
Swift
|
|
import Foundation
|
||
|
|
|
||
|
|
// MARK: - User
|
||
|
|
struct User: Codable, Identifiable {
|
||
|
|
let id: String?
|
||
|
|
let phone: String
|
||
|
|
let name: String?
|
||
|
|
let balance: Int
|
||
|
|
let telegramId: String?
|
||
|
|
|
||
|
|
enum CodingKeys: String, CodingKey {
|
||
|
|
case id = "device_id"
|
||
|
|
case phone
|
||
|
|
case name
|
||
|
|
case balance
|
||
|
|
case telegramId = "telegram_id"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Contact
|
||
|
|
struct Contact: Codable, Identifiable {
|
||
|
|
var id: String { phone }
|
||
|
|
let name: String
|
||
|
|
let phone: String
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Login Session
|
||
|
|
struct LoginSession: Codable {
|
||
|
|
let sessionId: String
|
||
|
|
let deviceId: String?
|
||
|
|
let pending: Bool?
|
||
|
|
|
||
|
|
enum CodingKeys: String, CodingKey {
|
||
|
|
case sessionId = "session_id"
|
||
|
|
case deviceId = "device_id"
|
||
|
|
case pending
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Transfer
|
||
|
|
struct TransferRequest: Codable {
|
||
|
|
let to: String
|
||
|
|
let amount: Int
|
||
|
|
}
|
||
|
|
|
||
|
|
struct TransferResponse: Codable {
|
||
|
|
let success: Bool
|
||
|
|
let newBalance: Int?
|
||
|
|
let error: String?
|
||
|
|
|
||
|
|
enum CodingKeys: String, CodingKey {
|
||
|
|
case success
|
||
|
|
case newBalance = "new_balance"
|
||
|
|
case error
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Chat Message
|
||
|
|
struct ChatMessage: Identifiable, Codable {
|
||
|
|
let id: UUID
|
||
|
|
let role: String
|
||
|
|
let content: String
|
||
|
|
let timestamp: Date
|
||
|
|
|
||
|
|
init(role: String, content: String) {
|
||
|
|
self.id = UUID()
|
||
|
|
self.role = role
|
||
|
|
self.content = content
|
||
|
|
self.timestamp = Date()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Phone Contact (from iOS Contacts)
|
||
|
|
struct PhoneContact: Identifiable {
|
||
|
|
let id: String
|
||
|
|
let name: String
|
||
|
|
let phone: String
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - P2P Message
|
||
|
|
struct P2PMessage: Identifiable, Codable {
|
||
|
|
let id: String
|
||
|
|
let fromPhone: String
|
||
|
|
let toPhone: String
|
||
|
|
let content: String
|
||
|
|
let timestamp: Date
|
||
|
|
let isRead: Bool
|
||
|
|
|
||
|
|
enum CodingKeys: String, CodingKey {
|
||
|
|
case id
|
||
|
|
case fromPhone = "from_phone"
|
||
|
|
case toPhone = "to_phone"
|
||
|
|
case content
|
||
|
|
case timestamp
|
||
|
|
case isRead = "is_read"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// MARK: - Conversation
|
||
|
|
struct Conversation: Identifiable {
|
||
|
|
var id: String { contactPhone }
|
||
|
|
let contactPhone: String
|
||
|
|
let contactName: String
|
||
|
|
let lastMessage: String
|
||
|
|
let lastMessageTime: Date
|
||
|
|
let unreadCount: Int
|
||
|
|
}
|