jsdw_ios/QuickLocation/Service/GroupService.swift

239 lines
9.4 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.

//
// GroupService.swift
// QuickLocation
//
// Created by on 2026/6/1.
//
import Foundation
import RxSwift
import Moya
struct GroupService {
static let disposeBag = DisposeBag()
private static let notifyingOperations: Set<String> = [
"create", "join", "setdefault", "editmateinfo", "changeprivilege"
]
private static func postGroupDataChange(operation: String,
requestData: [String: Any],
responseData: [String: Any]? = nil) {
var userInfo: [AnyHashable: Any] = [
GroupDataChangeUserInfoKey.operation: operation,
GroupDataChangeUserInfoKey.source: GroupDataChangeSource.api
]
let responseGroupKey = responseData?[GroupDataChangeUserInfoKey.groupKey] as? String
if let groupKey = requestData[GroupDataChangeUserInfoKey.groupKey] as? String
?? responseGroupKey,
!groupKey.isEmpty {
userInfo[GroupDataChangeUserInfoKey.groupKey] = groupKey
}
let userId = requestData[GroupDataChangeUserInfoKey.userId] as? String
?? requestData["review_userid"] as? String
?? requestData["kick_userid"] as? String
?? (requestData["kick_userid"] as? [String])?.first
if let userId, !userId.isEmpty {
userInfo[GroupDataChangeUserInfoKey.userId] = userId
}
let post = {
NotificationCenter.default.post(
name: .RefreshGroupInfoNotification,
object: nil,
userInfo: userInfo
)
}
if Thread.isMainThread {
post()
} else {
DispatchQueue.main.async(execute: post)
}
}
private static func notifyGroupInfoChange<T>(operation: String,
requestData: [String: Any]) -> (T) -> Void {
{ _ in
postGroupDataChange(operation: operation, requestData: requestData)
}
}
///
static func groupInfo() -> Observable<UserGroupResponse> {
let api = GroupAPI.groupInfo.multiTarget
return APIProvider.request(token: api)
.map(UserGroupResponse.self)
.map { response in
if let model = response.model {
AppContextManager.shared.defaultGroupKey = model.default_group_key
}
return response
}
.asObservable()
}
///
static func groupTemplates() -> Observable<GroupTemplateResponse> {
let api = GroupAPI.groupTemplates.multiTarget
return APIProvider.request(token: api)
.map(GroupTemplateResponse.self)
.asObservable()
}
///
static func groupUsers(groupKey: String) -> Observable<GroupUsersResponse> {
let api = GroupAPI.groupUsers(groupKey: groupKey).multiTarget
return APIProvider.request(token: api)
.map(GroupUsersResponse.self)
.asObservable()
}
///
/// - Parameters:
/// - opType: createdismisssetdefault
/// - requestData[String: Any]
static func operate(opType: String, requestData: [String: Any]) -> Observable<ResponseModel> {
let api = GroupAPI.operate(opType: opType, requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(ResponseModel.self)
.map { response in
if opType == "setdefault",
let key = requestData["group_key"] as? String,
!key.isEmpty {
AppContextManager.shared.defaultGroupKey = key
}
return response
}
.do(onSuccess: { response in
guard notifyingOperations.contains(opType) else { return }
postGroupDataChange(
operation: opType,
requestData: requestData,
responseData: response.data
)
})
.asObservable()
}
///
static func recommand(count: Int) -> Observable<RecommandGroupResponse> {
let api = GroupAPI.operate(opType: "recommand", requestData: ["recommand_count": count]).multiTarget
return APIProvider.request(token: api)
.map(RecommandGroupResponse.self)
.asObservable()
}
/// key
static func groupInfoByKey(_ key: String) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "info", requestData: ["group_key": key]).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key group_name
static func editName(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "changename", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "changename", requestData: requestData))
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key icon_index
static func changeIcon(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "changeicon", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "changeicon", requestData: requestData))
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key description
static func editDesc(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "changedescription", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "changedescription", requestData: requestData))
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key review
static func changeReview(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "changereview", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "changereview", requestData: requestData))
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key labels
static func editLabels(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "changelabels", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "changelabels", requestData: requestData))
.asObservable()
}
///
/// - Parameters:
/// - requestDatagroup_key
static func reviewlist(requestData: [String: Any]) -> Observable<ReviewMemberListResponse> {
let api = GroupAPI.operate(opType: "reviewlist", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(ReviewMemberListResponse.self)
.asObservable()
}
///
static func reviewMember(requestData: [String: Any]) -> Observable<ResponseModel> {
let api = GroupAPI.operate(opType: "review", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(ResponseModel.self)
.do(onSuccess: notifyGroupInfoChange(operation: "review", requestData: requestData))
.asObservable()
}
///
static func kickMember(requestData: [String: Any]) -> Observable<ResponseModel> {
let api = GroupAPI.operate(opType: "kick", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(ResponseModel.self)
.do(onSuccess: notifyGroupInfoChange(operation: "kick", requestData: requestData))
.asObservable()
}
/// 退
/// - Parameters:
/// - requestDatagroup_key
static func leave(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "leave", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "leave", requestData: requestData))
.asObservable()
}
///
static func dismiss(requestData: [String: Any]) -> Observable<GroupInfoResponse> {
let api = GroupAPI.operate(opType: "dismiss", requestData: requestData).multiTarget
return APIProvider.request(token: api)
.map(GroupInfoResponse.self)
.do(onSuccess: notifyGroupInfoChange(operation: "dismiss", requestData: requestData))
.asObservable()
}
}