HadoopProvider.swift 2.2 KB
//
//  HadoopProvider.swift
//  AoleiSports
//
//  Created by ilCode on 2024/6/26.
//

import UIKit

enum HadoopTarget: TargetType {
    case bigDataList
    
    var task: Moya.Task {
        let parameters = ["query": """
            query{
                \(APIs.kBigDataList)
                }
        """]
        return .requestParameters(parameters: parameters, encoding: JSONEncoding.default)
    }
}

class HadoopProvider<Target: TargetType>: BaseMoyaProvider<Target> {
    var bigDataList = BehaviorRelay<[HadoopMatchModel]>(value: [])
    var predictData = BehaviorRelay<(Int, String)>(value: (0, "0"))
    var matchTotalCount = BehaviorRelay<Int>(value: 0)
    var comList = BehaviorRelay<[HadoopComModel]>(value: [])

    func bigDataListRequest(completion: @escaping (Result<Bool, AsError>) -> Void) {
        moyaPost(api: APIs.kBigDataList, target: HadoopTarget.bigDataList) { midResult in
            // DDLogInfo("大数据研究列表接口数据:\(midResult)")
            
            switch midResult {
            case let .success(midSuccessResult):
                let requestModel = HadoopRequestModel(JSON: midSuccessResult)
                
                if let tmpReult = requestModel?.result, !tmpReult.isEmpty {
                    self.bigDataList.accept(tmpReult)
                }
                
                if let predictData = requestModel?.predictData,
                    let predictResult = predictData.predictResult,
                   let totalCount = predictResult["total_count"] as? Int,
                   let predict = predictResult["predict"] as? [String : Any],
                   let rate = predict["rate"] as? String {
                    self.predictData.accept((totalCount, rate))
                }
                
                if let total = requestModel?.total {
                    self.matchTotalCount.accept(total)
                }
                
                if let tmpComList = requestModel?.competitionList, !tmpComList.isEmpty {
                    self.comList.accept(tmpComList)
                }
                
                completion(.success(true))
            case .failure(let err):
                completion(.failure(err))
            }
        }
    }
}