12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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()
- }
- }
|