IOS_Boss/IOS_study/Manager/PLJobManager.swift
2025-07-27 12:33:06 +08:00

195 lines
8.3 KiB
Swift
Raw 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.

//
// PLJobManager.swift
// IOS_study
//
// Created by CC-star on 2025/7/2.
//
import Foundation
import LeanCloud
final class PLJobManager {
//
static var shared = PLJobManager()
private init() {}
private let className = "PLJob"
// //
// func findJobs() async throws -> [PLJob] {
// let query = LCQuery(className: className)
// query.whereKey(PLJob.CodingKeys.isActive.rawValue,.equalTo(true))//equalTo -> =
// query.whereKey("updatedAt", .descending)//
//
// return try await query.find(as: PLJob.self)
// }
// MARK: -
func findJobsByREST(limit: Int, skip: Int, filter: PLFilter, order: PLOrder) async throws -> [PLJob] {
// let urlStr = """
// \(kServerURLStr)/1.1/classes/\(className)?where={\(PLJob.CodingKeys.isActive.rawValue): true }&order=-updatedAt
// """
var components = URLComponents(string: "\(kServerURLStr)/1.1/classes/\(className)")!
//
var whereDic: [String: Any] = [PLJob.CodingKeys.isActive.rawValue: true]
if let business = filter.business {//
whereDic[PLJob.CodingKeys.business.rawValue] = business
}
if let city = filter.city {//
whereDic[PLJob.CodingKeys.city.rawValue] = city
}
//
let whereData = try JSONSerialization.data(withJSONObject: whereDic)
guard let whereStr = String(data: whereData, encoding: .utf8) else { throw URLError(.badURL) }
//
var orderStr = ""
switch order {
case .updatedAt:
orderStr = "-updatedAt"
case .hourlywage:
orderStr = "-hourlywage"
}
components.queryItems = [
URLQueryItem(name: "where", value: whereStr),
URLQueryItem(name: "order", value: orderStr),
URLQueryItem(name: "limit", value: "\(limit)"),
URLQueryItem(name: "skip", value: "\(skip)")
]
guard let urlstr = components.url?.absoluteString else { throw URLError(.badURL) }
return try await RESTManager.shared.find(form: urlstr)
}
// MARK: -
func findJobsByREST(by userID: String, limit: Int, skip: Int) async throws -> [PLJob] {
var components = URLComponents(string: "\(kServerURLStr)/1.1/classes/\(className)")!
//
let whereDic: [String: Any] = [PLJob.CodingKeys.userID.rawValue: userID]
//
let whereData = try JSONSerialization.data(withJSONObject: whereDic)
guard let whereStr = String(data: whereData, encoding: .utf8) else { throw URLError(.badURL) }
//
components.queryItems = [
URLQueryItem(name: "where", value: whereStr),
URLQueryItem(name: "order", value: "-updatedAt"),
URLQueryItem(name: "limit", value: "\(limit)"),
URLQueryItem(name: "skip", value: "\(skip)")
]
guard let urlstr = components.url?.absoluteString else { throw URLError(.badURL) }
return try await RESTManager.shared.find(form: urlstr)
}
// MARK: - job线/
func findJobsCount(by userID: String, onlyActive: Bool = false) async -> Int {
let query = LCQuery(className: className)
query.whereKey(PLJob.CodingKeys.userID.rawValue, .equalTo(userID))
if onlyActive { query.whereKey(PLJob.CodingKeys.isActive.rawValue, .equalTo(true)) }
return (try? await query.count()) ?? 0
}
func save(job: PLJob, isEditing: Bool = false) async throws {
//
var lcObject = LCObject(className: "PLJob")
if isEditing {
let query = LCQuery(className: className)
query.whereKey("id", .equalTo(job.id))
lcObject = try await query.getFirst()
}
//
try lcObject.set(PLJob.CodingKeys.id.rawValue, value: job.id)
try lcObject.set(PLJob.CodingKeys.isActive.rawValue, value: job.isActive)
try lcObject.set(PLJob.CodingKeys.title.rawValue, value: job.title)
try lcObject.set(PLJob.CodingKeys.business.rawValue, value: job.business)
try lcObject.set(PLJob.CodingKeys.tax.rawValue, value: job.tax)
try lcObject.set(PLJob.CodingKeys.hourlyWage.rawValue, value: job.hourlyWage)
try lcObject.set(PLJob.CodingKeys.wantNum.rawValue, value: job.wantNum)
try lcObject.set(PLJob.CodingKeys.contactType.rawValue, value: job.contactType)
try lcObject.set(PLJob.CodingKeys.contact.rawValue, value: job.contact)
//
try lcObject.set(PLJob.CodingKeys.startHour.rawValue, value: job.startHour)
try lcObject.set(PLJob.CodingKeys.startMin.rawValue, value: job.startMin)
try lcObject.set(PLJob.CodingKeys.endHour.rawValue, value: job.endHour)
try lcObject.set(PLJob.CodingKeys.endMin.rawValue, value: job.endMin)
try lcObject.set(PLJob.CodingKeys.has2.rawValue, value: job.has2)
try lcObject.set(PLJob.CodingKeys.startHour2.rawValue, value: job.startHour2)
try lcObject.set(PLJob.CodingKeys.startMin2.rawValue, value: job.startMin2)
try lcObject.set(PLJob.CodingKeys.endHour2.rawValue, value: job.endHour2)
try lcObject.set(PLJob.CodingKeys.endMin2.rawValue, value: job.endMin2)
try lcObject.set(PLJob.CodingKeys.otherTime.rawValue, value: job.otherTime)
//
try lcObject.set(PLJob.CodingKeys.placeName.rawValue, value: job.placeName)
try lcObject.set(PLJob.CodingKeys.province.rawValue, value: job.province)
try lcObject.set(PLJob.CodingKeys.city.rawValue, value: job.city)
try lcObject.set(PLJob.CodingKeys.workContent.rawValue, value: job.workContent)
//
try lcObject.set(PLJob.CodingKeys.needExp.rawValue, value: job.needExp)
try lcObject.set(PLJob.CodingKeys.needEdu.rawValue, value: job.needEdu)
try lcObject.set(PLJob.CodingKeys.needLan.rawValue, value: job.needLan)
try lcObject.set(PLJob.CodingKeys.needFrame.rawValue, value: job.needFrame)
try lcObject.set(PLJob.CodingKeys.otherNeed.rawValue, value: job.otherNeed)
//
try lcObject.set(PLJob.CodingKeys.moveFee.rawValue, value: job.moveFee)
try lcObject.set(PLJob.CodingKeys.noOverTime.rawValue, value: job.noOverTime)
try lcObject.set(PLJob.CodingKeys.otherBenefit.rawValue, value: job.otherBenefit)
//
try lcObject.set(PLJob.CodingKeys.companyName.rawValue, value: job.companyName)
try lcObject.set(PLJob.CodingKeys.userID.rawValue, value: job.userID)
// try lcObject.set("updatedAT", value: job.updatedAT)
//
// _ = lcObject.save { result in
// switch result {
// case .success:
// //
// break
// case .failure(error: let error):
// //
// print(error)
// }
// }
try await lcObject.save()
}
func saveByREST(job: PLJob) async throws {
//
// guard let url = URL(string: "\(kServerURLStr)/1.1/classes/PLJob") else {
// throw NetworkError.invalidURL// ->
// }//urlelse
//
try await RESTManager.shared.save(to: "\(kServerURLStr)/1.1/classes/\(className)", object: job)
}
// MARK: - /线
func toggleJobStatus(id: String, isAictive: Bool) async throws {
let query = LCQuery(className: className)
query.whereKey("id", .equalTo(id))
let lcObject = try await query.getFirst()
try lcObject.set(PLJob.CodingKeys.isActive.rawValue, value: isAictive)
try await lcObject.save()
}
// MARK: -
func removeJob(id: String) async throws {
let query = LCQuery(className: className)
query.whereKey("id", .equalTo(id))
let lcObject = try await query.getFirst()
try await lcObject.delete()
}
// MARK: -job
func removeJobs(by userID: String) async {
let query = LCQuery(className: className)
query.whereKey(PLJob.CodingKeys.userID.rawValue, .equalTo(userID))
guard let jobObjects = try? await query.find() else { return }
try? await LCObject.delete(jobObjects)//
}
}