Brak opisu

GroupRemoteAPI.swift 2.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // GroupRemoteAPI.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by ffib on 2018/12/29.
  6. // Copyright © 2018 yb. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. public enum QRType {
  11. case group
  12. case session
  13. }
  14. struct GroupRemoteAPI {
  15. private func parse(_ json: JSON) -> NetworkArrayData<GroupItem>? {
  16. guard let data = json["data"] as? [String: AnyObject] else { return nil }
  17. return NetworkArrayData(json: data, dataField: "groups")
  18. }
  19. private func parseGroup(_ json: JSON) -> GroupItem? {
  20. guard let data = json["data"] as? [String: AnyObject],
  21. let groupInfo = data["group"] as? [String: AnyObject] else {
  22. return nil
  23. }
  24. return GroupItem(value: groupInfo)
  25. }
  26. func loadContent(page: Int) -> Single<NetworkArrayData<GroupItem>> {
  27. let resource = ContentResource<NetworkArrayData<GroupItem>>(path: .groupList,
  28. parameter: ["user_id": ShareUserId, "page": page, "num": 20],
  29. parseJSON: parse)
  30. return resource.loadContent()
  31. }
  32. func create(groupName: String, avatar: String) -> Single<GroupItem> {
  33. let createResource = ContentResource<GroupItem>(path: .groupCreate,
  34. parameter: ["user_id": ShareUserId,
  35. "group_name": groupName,
  36. "group_default_avatar": avatar],
  37. parseJSON: parseGroup)
  38. return createResource.loadContent()
  39. }
  40. func join(type: QRType, parameter: Parameter) -> Single<GroupItem> {
  41. var joinResource: ContentResource<GroupItem>
  42. switch type {
  43. case .group:
  44. joinResource = ContentResource<GroupItem>(path: .joinGroup,
  45. parameter: parameter + ["user_id": ShareUserId],
  46. parseJSON: parseGroup)
  47. case .session:
  48. joinResource = ContentResource<GroupItem>(path: .joinSession,
  49. parameter: parameter + ["user_id": ShareUserId],
  50. parseJSON: parseGroup)
  51. }
  52. return joinResource.loadContent()
  53. }
  54. func remove(groupId: String) -> Completable {
  55. let removeResource = StatusResource(path: .groupDelete,
  56. parameter: ["user_id": ShareUserId, "group_id": groupId])
  57. return removeResource.getStatus()
  58. }
  59. }