|
//
// GroupRemoteAPI.swift
// PaiaiDataKit
//
// Created by ffib on 2018/12/29.
// Copyright © 2018 yb. All rights reserved.
//
import Foundation
import RxSwift
public enum QRType {
case group
case session
}
struct GroupRemoteAPI {
private func parse(_ json: JSON) -> NetworkArrayData<GroupItem>? {
guard let data = json["data"] as? [String: AnyObject] else { return nil }
return NetworkArrayData(json: data, dataField: "groups")
}
private func parseGroup(_ json: JSON) -> GroupItem? {
guard let data = json["data"] as? [String: AnyObject],
let groupInfo = data["group"] as? [String: AnyObject] else {
return nil
}
return GroupItem(value: groupInfo)
}
func loadContent(page: Int) -> Single<NetworkArrayData<GroupItem>> {
let resource = ContentResource<NetworkArrayData<GroupItem>>(path: .groupList,
parameter: ["user_id": ShareUserId, "page": page, "num": 20],
parseJSON: parse)
return resource.loadContent()
}
func create(groupName: String, avatar: String) -> Single<GroupItem> {
let createResource = ContentResource<GroupItem>(path: .groupCreate,
parameter: ["user_id": ShareUserId,
"group_name": groupName,
"group_default_avatar": avatar],
parseJSON: parseGroup)
return createResource.loadContent()
}
func join(type: QRType, parameter: Parameter) -> Single<GroupItem> {
var joinResource: ContentResource<GroupItem>
switch type {
case .group:
joinResource = ContentResource<GroupItem>(path: .joinGroup,
parameter: parameter + ["user_id": ShareUserId],
parseJSON: parseGroup)
case .session:
joinResource = ContentResource<GroupItem>(path: .joinSession,
parameter: parameter + ["user_id": ShareUserId],
parseJSON: parseGroup)
}
return joinResource.loadContent()
}
func remove(groupId: String) -> Completable {
let removeResource = StatusResource(path: .groupDelete,
parameter: ["user_id": ShareUserId, "group_id": groupId])
return removeResource.getStatus()
}
}
|