175 lines
5.1 KiB
Swift
175 lines
5.1 KiB
Swift
import Foundation
|
||
|
||
// MARK: - Blind Box Media Type
|
||
enum BlindBoxMediaType {
|
||
case video
|
||
case image
|
||
case all
|
||
}
|
||
|
||
// MARK: - Blind Box List
|
||
struct BlindList: Codable, Identifiable {
|
||
// API 返回为字符串,这里按字符串处理
|
||
let id: String
|
||
let boxCode: String
|
||
let userId: String
|
||
let name: String
|
||
let boxType: String
|
||
let features: String?
|
||
let resultFile: FileInfo?
|
||
let status: String
|
||
let workflowInstanceId: String?
|
||
let videoGenerateTime: String?
|
||
let createTime: String
|
||
let coverFile: FileInfo?
|
||
let description: String?
|
||
|
||
struct FileInfo: Codable {
|
||
let id: String
|
||
let fileName: String?
|
||
let url: String?
|
||
// 为了兼容任意元数据结构,这里使用字典的最宽松版本
|
||
// 如果后续需要更强类型,可以引入自定义的 AnyCodable/JSONValue
|
||
let metadata: [String: String]?
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case id
|
||
case fileName = "file_name"
|
||
case url
|
||
case metadata
|
||
}
|
||
}
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case id
|
||
case boxCode = "box_code"
|
||
case userId = "user_id"
|
||
case name
|
||
case boxType = "box_type"
|
||
case features
|
||
case resultFile = "result_file"
|
||
case status
|
||
case workflowInstanceId = "workflow_instance_id"
|
||
case videoGenerateTime = "video_generate_time"
|
||
case createTime = "create_time"
|
||
case coverFile = "cover_file"
|
||
case description
|
||
}
|
||
}
|
||
|
||
// MARK: - Blind Box Count
|
||
struct BlindCount: Codable {
|
||
let availableQuantity: Int
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case availableQuantity = "available_quantity"
|
||
}
|
||
}
|
||
|
||
// MARK: - Blind Box Data
|
||
struct BlindBoxData: Codable {
|
||
let id: String
|
||
let boxCode: String
|
||
let userId: String
|
||
let name: String
|
||
let boxType: String
|
||
let features: String?
|
||
let resultFile: FileInfo?
|
||
let status: String
|
||
let workflowInstanceId: String?
|
||
let videoGenerateTime: String?
|
||
let createTime: String
|
||
let coverFile: FileInfo?
|
||
let description: String
|
||
|
||
// 添加计算属性以获取Int64值
|
||
var idValue: Int64 { Int64(id) ?? 0 }
|
||
var userIdValue: Int64 { Int64(userId) ?? 0 }
|
||
|
||
struct FileInfo: Codable {
|
||
let id: String
|
||
let fileName: String?
|
||
let url: String?
|
||
let metadata: [String: String]?
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case id
|
||
case fileName = "file_name"
|
||
case url
|
||
case metadata
|
||
}
|
||
}
|
||
|
||
enum CodingKeys: String, CodingKey {
|
||
case id
|
||
case boxCode = "box_code"
|
||
case userId = "user_id"
|
||
case name
|
||
case boxType = "box_type"
|
||
case features
|
||
case resultFile = "result_file"
|
||
case status
|
||
case workflowInstanceId = "workflow_instance_id"
|
||
case videoGenerateTime = "video_generate_time"
|
||
case createTime = "create_time"
|
||
case coverFile = "cover_file"
|
||
case description
|
||
}
|
||
|
||
init(id: String, boxCode: String, userId: String, name: String, boxType: String, features: String?, resultFile: FileInfo?, status: String, workflowInstanceId: String?, videoGenerateTime: String?, createTime: String, coverFile: FileInfo?, description: String) {
|
||
self.id = id
|
||
self.boxCode = boxCode
|
||
self.userId = userId
|
||
self.name = name
|
||
self.boxType = boxType
|
||
self.features = features
|
||
self.resultFile = resultFile
|
||
self.status = status
|
||
self.workflowInstanceId = workflowInstanceId
|
||
self.videoGenerateTime = videoGenerateTime
|
||
self.createTime = createTime
|
||
self.coverFile = coverFile
|
||
self.description = description
|
||
}
|
||
|
||
init(from listItem: BlindList) {
|
||
self.id = listItem.id
|
||
self.boxCode = listItem.boxCode
|
||
self.userId = listItem.userId
|
||
self.name = listItem.name
|
||
self.boxType = listItem.boxType
|
||
self.features = listItem.features
|
||
|
||
// 转换FileInfo类型
|
||
if let resultFileInfo = listItem.resultFile {
|
||
self.resultFile = FileInfo(
|
||
id: resultFileInfo.id,
|
||
fileName: resultFileInfo.fileName,
|
||
url: resultFileInfo.url,
|
||
metadata: resultFileInfo.metadata
|
||
)
|
||
} else {
|
||
self.resultFile = nil
|
||
}
|
||
|
||
self.status = listItem.status
|
||
self.workflowInstanceId = listItem.workflowInstanceId
|
||
self.videoGenerateTime = listItem.videoGenerateTime
|
||
self.createTime = listItem.createTime
|
||
|
||
// 转换coverFile的FileInfo类型
|
||
if let coverFileInfo = listItem.coverFile {
|
||
self.coverFile = FileInfo(
|
||
id: coverFileInfo.id,
|
||
fileName: coverFileInfo.fileName,
|
||
url: coverFileInfo.url,
|
||
metadata: coverFileInfo.metadata
|
||
)
|
||
} else {
|
||
self.coverFile = nil
|
||
}
|
||
|
||
self.description = listItem.description ?? ""
|
||
}
|
||
}
|