// // UserManager.swift // IOS_study // // Created by CC-star on 2025/7/14. // import Foundation import LeanCloud final class UserManager { static var shared = UserManager() private init() {} private let className = "DBUser" func findUserByREST() async throws -> DBUser { let query = LCQuery(className: className) query.whereKey("id", .equalTo(AuthManager.shared.getUserID())) guard let objectId = (try await query.getFirst()).objectId?.value else { throw UserError.objectIdNotFound } let urlStr = "\(kServerURLStr)/1.1/classes/\(className)/\(objectId)" return try await RESTManager.shared.findOne(form: urlStr) } func create(user: LCUser) async throws { let dbUser = LCObject(className: className) try dbUser.set(DBUser.CodingKeys.id.rawValue, value: user.objectId) var nickName = "" if let objectId = user.objectId?.value { nickName = objectId.suffix(4).uppercased()//取后四位,并字母大写 } else { nickName = String.randomString(4) } try dbUser.set(DBUser.CodingKeys.nickName.rawValue, value: "数据猫用户\(nickName)") try await dbUser.save() } func update(user: DBUser) async throws { let query = LCQuery(className: className) query.whereKey("id", .equalTo(AuthManager.shared.getUserID())) let userObject = try await query.getFirst() try userObject.set(DBUser.CodingKeys.cName.rawValue, value: user.cName) try userObject.set(DBUser.CodingKeys.cLogoURLStr.rawValue, value: user.cLogoURLStr) try userObject.set(DBUser.CodingKeys.cImageURLStrs.rawValue, value: user.cImageURLStrs) try userObject.set(DBUser.CodingKeys.cAboutUS.rawValue, value: user.cAboutUS) try userObject.set(DBUser.CodingKeys.cProvince.rawValue, value: user.cProvince) try userObject.set(DBUser.CodingKeys.cCity.rawValue, value: user.cCity) try await userObject.save() } func setTo(filed: String, _ value: Bool) async throws { let query = LCQuery(className: className) query.whereKey("id", .equalTo(AuthManager.shared.getUserID())) let userObject = try await query.getFirst() try userObject.set(filed, value: value) try await userObject.save() } func removeUser(id: String) async { let query = LCQuery(className: className) query.whereKey("id", .equalTo(id)) guard let userObject = try? await query.getFirst() else { return } try? await userObject.delete() } }