同步个人空间配置页面
This commit is contained in:
@ -62,6 +62,241 @@ struct UpdateInfoRequest: Encodable {
|
||||
let avatar: String?
|
||||
}
|
||||
|
||||
/// 摄影师个人空间配置响应,对齐 Android `ProfileInfoResponse`。
|
||||
struct PhotographerProfileInfoResponse: Decodable, Equatable {
|
||||
let id: Int
|
||||
let scenicId: Int
|
||||
let photogUid: Int
|
||||
let realName: String
|
||||
let nickname: String
|
||||
let avatar: String
|
||||
let scenicCertification: [String]
|
||||
let description: String
|
||||
let attrLabel: [String]
|
||||
let shootLabel: [String]
|
||||
let cameraDevice: [String]
|
||||
let businessStartTime: String
|
||||
let businessEndTime: String
|
||||
let holidayStartTime: String
|
||||
let holidayEndTime: String
|
||||
let businessRange: [Int]
|
||||
let acceptOrderStatus: Int
|
||||
let schedule: [String: [PhotographerSchedule]]
|
||||
let virtualPhone: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case scenicId = "scenic_id"
|
||||
case photogUid = "photog_uid"
|
||||
case realName = "real_name"
|
||||
case nickname
|
||||
case avatar
|
||||
case scenicCertification = "scenic_certification"
|
||||
case description
|
||||
case attrLabel = "attr_label"
|
||||
case shootLabel = "shoot_label"
|
||||
case cameraDevice = "camera_device"
|
||||
case businessStartTime = "business_start_time"
|
||||
case businessEndTime = "business_end_time"
|
||||
case holidayStartTime = "holiday_start_time"
|
||||
case holidayEndTime = "holiday_end_time"
|
||||
case businessRange = "business_range"
|
||||
case acceptOrderStatus = "accept_order_status"
|
||||
case schedule
|
||||
case virtualPhone = "virtual_phone"
|
||||
}
|
||||
|
||||
init(
|
||||
id: Int = 0,
|
||||
scenicId: Int = 0,
|
||||
photogUid: Int = 0,
|
||||
realName: String = "",
|
||||
nickname: String = "",
|
||||
avatar: String = "",
|
||||
scenicCertification: [String] = [],
|
||||
description: String = "",
|
||||
attrLabel: [String] = [],
|
||||
shootLabel: [String] = [],
|
||||
cameraDevice: [String] = [],
|
||||
businessStartTime: String = "",
|
||||
businessEndTime: String = "",
|
||||
holidayStartTime: String = "",
|
||||
holidayEndTime: String = "",
|
||||
businessRange: [Int] = [],
|
||||
acceptOrderStatus: Int = 0,
|
||||
schedule: [String: [PhotographerSchedule]] = [:],
|
||||
virtualPhone: String = ""
|
||||
) {
|
||||
self.id = id
|
||||
self.scenicId = scenicId
|
||||
self.photogUid = photogUid
|
||||
self.realName = realName
|
||||
self.nickname = nickname
|
||||
self.avatar = avatar
|
||||
self.scenicCertification = scenicCertification
|
||||
self.description = description
|
||||
self.attrLabel = attrLabel
|
||||
self.shootLabel = shootLabel
|
||||
self.cameraDevice = cameraDevice
|
||||
self.businessStartTime = businessStartTime
|
||||
self.businessEndTime = businessEndTime
|
||||
self.holidayStartTime = holidayStartTime
|
||||
self.holidayEndTime = holidayEndTime
|
||||
self.businessRange = businessRange
|
||||
self.acceptOrderStatus = acceptOrderStatus
|
||||
self.schedule = schedule
|
||||
self.virtualPhone = virtualPhone
|
||||
}
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
id = try container.decodeLossyInt(forKey: .id) ?? 0
|
||||
scenicId = try container.decodeLossyInt(forKey: .scenicId) ?? 0
|
||||
photogUid = try container.decodeLossyInt(forKey: .photogUid) ?? 0
|
||||
realName = try container.decodeLossyString(forKey: .realName)
|
||||
nickname = try container.decodeLossyString(forKey: .nickname)
|
||||
avatar = try container.decodeLossyString(forKey: .avatar)
|
||||
scenicCertification = try container.decodeLossyStringArray(forKey: .scenicCertification)
|
||||
description = try container.decodeLossyString(forKey: .description)
|
||||
attrLabel = try container.decodeLossyStringArray(forKey: .attrLabel)
|
||||
shootLabel = try container.decodeLossyStringArray(forKey: .shootLabel)
|
||||
cameraDevice = try container.decodeLossyStringArray(forKey: .cameraDevice)
|
||||
businessStartTime = try container.decodeLossyString(forKey: .businessStartTime)
|
||||
businessEndTime = try container.decodeLossyString(forKey: .businessEndTime)
|
||||
holidayStartTime = try container.decodeLossyString(forKey: .holidayStartTime)
|
||||
holidayEndTime = try container.decodeLossyString(forKey: .holidayEndTime)
|
||||
businessRange = try container.decodeLossyIntArray(forKey: .businessRange)
|
||||
acceptOrderStatus = try container.decodeLossyInt(forKey: .acceptOrderStatus) ?? 0
|
||||
schedule = try container.decodeIfPresent([String: [PhotographerSchedule]].self, forKey: .schedule) ?? [:]
|
||||
virtualPhone = try container.decodeLossyString(forKey: .virtualPhone)
|
||||
}
|
||||
}
|
||||
|
||||
/// 摄影师日程实体,对齐 Android `ScheduleEntity`。
|
||||
struct PhotographerSchedule: Decodable, Equatable, Hashable, Sendable {
|
||||
let id: Int
|
||||
let name: String
|
||||
let remark: String
|
||||
let startTime: String
|
||||
let endTime: String
|
||||
let scheduleDate: String
|
||||
let orderNumber: String?
|
||||
let userNickname: String?
|
||||
let userPhone: String?
|
||||
let orderStatus: Int?
|
||||
let orderStatusName: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case name
|
||||
case remark
|
||||
case startTime = "start_time"
|
||||
case endTime = "end_time"
|
||||
case scheduleDate = "schedule_date"
|
||||
case orderNumber = "order_number"
|
||||
case userNickname = "user_nickname"
|
||||
case userPhone = "user_phone"
|
||||
case orderStatus = "order_status"
|
||||
case orderStatusName = "order_status_name"
|
||||
}
|
||||
|
||||
init(
|
||||
id: Int = 0,
|
||||
name: String = "",
|
||||
remark: String = "",
|
||||
startTime: String = "",
|
||||
endTime: String = "",
|
||||
scheduleDate: String = "",
|
||||
orderNumber: String? = nil,
|
||||
userNickname: String? = nil,
|
||||
userPhone: String? = nil,
|
||||
orderStatus: Int? = nil,
|
||||
orderStatusName: String? = nil
|
||||
) {
|
||||
self.id = id
|
||||
self.name = name
|
||||
self.remark = remark
|
||||
self.startTime = startTime
|
||||
self.endTime = endTime
|
||||
self.scheduleDate = scheduleDate
|
||||
self.orderNumber = orderNumber
|
||||
self.userNickname = userNickname
|
||||
self.userPhone = userPhone
|
||||
self.orderStatus = orderStatus
|
||||
self.orderStatusName = orderStatusName
|
||||
}
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
id = try container.decodeLossyInt(forKey: .id) ?? 0
|
||||
name = try container.decodeLossyString(forKey: .name)
|
||||
remark = try container.decodeLossyString(forKey: .remark)
|
||||
startTime = try container.decodeLossyString(forKey: .startTime)
|
||||
endTime = try container.decodeLossyString(forKey: .endTime)
|
||||
scheduleDate = try container.decodeLossyString(forKey: .scheduleDate)
|
||||
orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber)
|
||||
userNickname = try container.decodeIfPresent(String.self, forKey: .userNickname)
|
||||
userPhone = try container.decodeIfPresent(String.self, forKey: .userPhone)
|
||||
orderStatus = try container.decodeLossyInt(forKey: .orderStatus)
|
||||
orderStatusName = try container.decodeIfPresent(String.self, forKey: .orderStatusName)
|
||||
}
|
||||
}
|
||||
|
||||
/// 摄影师个人空间配置更新请求,对齐 Android `UpdateProfileInfoRequest`。
|
||||
struct UpdatePhotographerProfileInfoRequest: Encodable, Equatable {
|
||||
let scenicId: String
|
||||
let description: String
|
||||
let cameraDevice: [String]
|
||||
let attrLabel: [String]
|
||||
let shootLabel: [String]
|
||||
let businessStartTime: String
|
||||
let businessEndTime: String
|
||||
let holidayStartTime: String
|
||||
let holidayEndTime: String
|
||||
let businessRange: [Int]
|
||||
let acceptOrderStatus: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case scenicId = "scenic_id"
|
||||
case description
|
||||
case cameraDevice = "camera_device"
|
||||
case attrLabel = "attr_label"
|
||||
case shootLabel = "shoot_label"
|
||||
case businessStartTime = "business_start_time"
|
||||
case businessEndTime = "business_end_time"
|
||||
case holidayStartTime = "holiday_start_time"
|
||||
case holidayEndTime = "holiday_end_time"
|
||||
case businessRange = "business_range"
|
||||
case acceptOrderStatus = "accept_order_status"
|
||||
}
|
||||
}
|
||||
|
||||
/// 摄影师新增日程请求,对齐 Android `AddScheduleRequest`。
|
||||
struct AddPhotographerScheduleRequest: Encodable, Equatable {
|
||||
var scenicId: String
|
||||
var name: String
|
||||
var remark: String
|
||||
var startTime: String
|
||||
var endTime: String
|
||||
var scheduleDate: String
|
||||
var orderNumber: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case scenicId = "scenic_id"
|
||||
case name
|
||||
case remark
|
||||
case startTime = "start_time"
|
||||
case endTime = "end_time"
|
||||
case scheduleDate = "schedule_date"
|
||||
case orderNumber = "order_number"
|
||||
}
|
||||
}
|
||||
|
||||
/// 摄影师删除日程请求,对齐 Android `ScheduleDeleteRequest`。
|
||||
struct PhotographerScheduleDeleteRequest: Encodable, Equatable {
|
||||
let id: Int
|
||||
}
|
||||
|
||||
/// 实名认证响应实体,包裹当前用户的认证详情。
|
||||
struct RealNameInfoResponse: Decodable, Equatable {
|
||||
let realNameInfo: RealNameInfo?
|
||||
@ -350,4 +585,31 @@ private extension KeyedDecodingContainer {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func decodeLossyStringArray(forKey key: Key) throws -> [String] {
|
||||
if let values = try? decodeIfPresent([String].self, forKey: key) {
|
||||
return values
|
||||
}
|
||||
if let values = try? decodeIfPresent([Int].self, forKey: key) {
|
||||
return values.map(String.init)
|
||||
}
|
||||
if let value = try? decodeIfPresent(String.self, forKey: key) {
|
||||
let text = value.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
return text.isEmpty ? [] : [text]
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
func decodeLossyIntArray(forKey key: Key) throws -> [Int] {
|
||||
if let values = try? decodeIfPresent([Int].self, forKey: key) {
|
||||
return values
|
||||
}
|
||||
if let values = try? decodeIfPresent([String].self, forKey: key) {
|
||||
return values.compactMap { Int($0.trimmingCharacters(in: .whitespacesAndNewlines)) }
|
||||
}
|
||||
if let value = try? decodeIfPresent(Int.self, forKey: key) {
|
||||
return [value]
|
||||
}
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user