Payments
This commit is contained in:
145
pedi-foods/Sources/PediFoods/Services/ApiOrderModels.swift
Normal file
145
pedi-foods/Sources/PediFoods/Services/ApiOrderModels.swift
Normal file
@@ -0,0 +1,145 @@
|
||||
import Foundation
|
||||
|
||||
struct CreateOrderPayload: Encodable {
|
||||
let customer: CreateOrderCustomerPayload
|
||||
let items: [CreateOrderItemPayload]
|
||||
let total: Double
|
||||
let paymentMethod: String
|
||||
let deliveryType: String
|
||||
let address: CreateOrderAddressPayload?
|
||||
}
|
||||
|
||||
struct CreateOrderCustomerPayload: Encodable {
|
||||
let name: String
|
||||
let phone: String
|
||||
let email: String
|
||||
let asaasId: String?
|
||||
}
|
||||
|
||||
struct CreateOrderItemPayload: Encodable {
|
||||
let productId: String
|
||||
let name: String
|
||||
let qty: Int
|
||||
let price: Double
|
||||
let addons: [CreateOrderAddonPayload]
|
||||
}
|
||||
|
||||
struct CreateOrderAddonPayload: Encodable {
|
||||
let addonId: String
|
||||
let name: String
|
||||
let qty: Int
|
||||
let price: Double
|
||||
}
|
||||
|
||||
struct CreateOrderAddressPayload: Encodable {
|
||||
let street: String
|
||||
let number: String
|
||||
let neighborhood: String
|
||||
let city: String?
|
||||
let state: String?
|
||||
let zip: String?
|
||||
let complement: String?
|
||||
}
|
||||
|
||||
struct CreateOrderResult: Decodable {
|
||||
let id: String?
|
||||
let shortId: String?
|
||||
let status: String?
|
||||
let paymentStatus: String?
|
||||
let paymentMethod: String?
|
||||
let paymentPayload: CreateOrderPaymentPayload?
|
||||
let payment: CreateOrderPaymentInfo?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case shortId
|
||||
case status
|
||||
case paymentStatus
|
||||
case paymentMethod
|
||||
case paymentPayload
|
||||
case payment
|
||||
}
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
id = try? container.decode(String.self, forKey: .id)
|
||||
shortId = try? container.decode(String.self, forKey: .shortId)
|
||||
status = try? container.decode(String.self, forKey: .status)
|
||||
paymentStatus = try? container.decode(String.self, forKey: .paymentStatus)
|
||||
paymentMethod = try? container.decode(String.self, forKey: .paymentMethod)
|
||||
payment = try? container.decode(CreateOrderPaymentInfo.self, forKey: .payment)
|
||||
|
||||
if let objectPayload = try? container.decode(CreateOrderPaymentPayload.self, forKey: .paymentPayload) {
|
||||
paymentPayload = objectPayload
|
||||
} else if let stringPayload = try? container.decode(String.self, forKey: .paymentPayload) {
|
||||
paymentPayload = CreateOrderPaymentPayload(
|
||||
copyPaste: stringPayload,
|
||||
qrCodeImage: nil,
|
||||
expirationDate: nil
|
||||
)
|
||||
} else {
|
||||
paymentPayload = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct CreateOrderPaymentInfo: Decodable {
|
||||
let method: String?
|
||||
let status: String?
|
||||
let pix: CreateOrderPaymentPayload?
|
||||
}
|
||||
|
||||
struct CreateOrderPaymentPayload: Decodable {
|
||||
let copyPaste: String?
|
||||
let qrCodeImage: String?
|
||||
let expirationDate: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case copyPaste
|
||||
case payload
|
||||
case qrCodeImage
|
||||
case encodedImage
|
||||
case expirationDate
|
||||
}
|
||||
|
||||
init(copyPaste: String?, qrCodeImage: String?, expirationDate: String?) {
|
||||
self.copyPaste = copyPaste
|
||||
self.qrCodeImage = qrCodeImage
|
||||
self.expirationDate = expirationDate
|
||||
}
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
copyPaste = (try? container.decode(String.self, forKey: .copyPaste))
|
||||
?? (try? container.decode(String.self, forKey: .payload))
|
||||
qrCodeImage = (try? container.decode(String.self, forKey: .qrCodeImage))
|
||||
?? (try? container.decode(String.self, forKey: .encodedImage))
|
||||
expirationDate = try? container.decode(String.self, forKey: .expirationDate)
|
||||
}
|
||||
}
|
||||
|
||||
struct ValidateDeliveryAddressPayload: Encodable {
|
||||
let address: ValidateDeliveryAddressDataPayload
|
||||
}
|
||||
|
||||
struct ValidateDeliveryAddressDataPayload: Encodable {
|
||||
let street: String?
|
||||
let number: String?
|
||||
let neighborhood: String?
|
||||
let city: String?
|
||||
let state: String?
|
||||
let zip: String?
|
||||
let lat: Double?
|
||||
let lng: Double?
|
||||
}
|
||||
|
||||
struct ValidateDeliveryAddressResult: Decodable {
|
||||
let deliveryAllowed: Bool?
|
||||
let reasonCode: String?
|
||||
let reasonMessage: String?
|
||||
let deliveryMode: String?
|
||||
let distance: Double?
|
||||
let deliveryFee: Double?
|
||||
let deliveryTime: String?
|
||||
let sameCity: Bool?
|
||||
}
|
||||
Reference in New Issue
Block a user