Files
suixinkan_uikit/suixinkan/Features/Orders/Utils/SaleUserQrParser.swift

56 lines
1.9 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// SaleUserQrParser.swift
// suixinkan
//
import Foundation
/// Android `SaleUserQrParser`
enum SaleUserQrParser {
static let methodSaleUserBind = "sale_user_bind"
static func parseSaleUserId(_ content: String) -> Int? {
let trimmed = content.trimmingCharacters(in: .whitespacesAndNewlines)
guard !trimmed.isEmpty else { return nil }
if trimmed.hasPrefix("{"), let data = trimmed.data(using: .utf8),
let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] {
if let fromMethod = parseFromJSON(json) { return fromMethod }
}
if let intValue = Int(trimmed), intValue > 0 { return intValue }
if trimmed.contains("://") || trimmed.contains("?"),
let components = URLComponents(string: trimmed) {
for key in ["sale_user_id", "saleUserId", "user_id", "id"] {
if let value = components.queryItems?.first(where: { $0.name == key })?.value,
let intValue = Int(value), intValue > 0 {
return intValue
}
}
}
return nil
}
private static func parseFromJSON(_ json: [String: Any]) -> Int? {
if let method = json["method"] as? String, method == methodSaleUserBind,
let id = readInt(json["sale_user_id"]), id > 0 {
return id
}
for key in ["sale_user_id", "saleUserId", "user_id", "id"] {
if let id = readInt(json[key]), id > 0 { return id }
}
return nil
}
private static func readInt(_ value: Any?) -> Int? {
if let intValue = value as? Int { return intValue }
if let stringValue = value as? String, let intValue = Int(stringValue.trimmingCharacters(in: .whitespacesAndNewlines)) {
return intValue
}
if let doubleValue = value as? Double { return Int(doubleValue) }
return nil
}
}