roomapi.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #include "roomapi.h"
  2. #include "qjsonobject.h"
  3. #include "qtjsonserializer_global.h"
  4. #include "util/jsonmapper.h"
  5. #include <cstddef>
  6. #include <utility>
  7. // std::optional<QString> id; // 房间当前id
  8. // std::optional<QString> name; // 房间名
  9. // std::optional<QString> description; // 房间的描述信息
  10. // std::optional<int> maxUsers; // 最大用户数
  11. // std::optional<qint64> status; // 1: normal 2: ban | 状态 1 正常 2 禁用
  12. // std::optional<qint64> createdAt; // 创建日期
  13. // std::optional<qint64> updatedAt; // 修改日期
  14. // std::optional<QString> createdId; // 创建者
  15. // std::optional<QString> ownerId; // 房主ID,关联用户表
  16. #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
  17. // 为 Qt 5 注册 std::optional 类型
  18. Q_DECLARE_METATYPE(std::optional<QString>)
  19. Q_DECLARE_METATYPE(std::optional<int>)
  20. Q_DECLARE_METATYPE(std::optional<qint64>)
  21. // 对于 QString 类型还需要流运算符
  22. QDataStream &operator<<(QDataStream &out, const std::optional<QString> &opt)
  23. {
  24. out << static_cast<bool>(opt.has_value());
  25. if (opt)
  26. out << *opt;
  27. return out;
  28. }
  29. QDataStream &operator>>(QDataStream &in, std::optional<QString> &opt)
  30. {
  31. bool hasValue;
  32. in >> hasValue;
  33. if (hasValue) {
  34. QString value;
  35. in >> value;
  36. opt = value;
  37. } else {
  38. opt = std::nullopt;
  39. }
  40. return in;
  41. }
  42. void initRoomType()
  43. {
  44. QtJsonSerializer::registerTypes();
  45. QtJsonSerializer::JsonSerializer::registerOptionalConverters<QString>();
  46. QtJsonSerializer::JsonSerializer::registerOptionalConverters<int>();
  47. QtJsonSerializer::JsonSerializer::registerOptionalConverters<qint64>();
  48. QtJsonSerializer::JsonSerializer::registerListConverters<RoomInfo>();
  49. QtJsonSerializer::JsonSerializer::registerListConverters<RoomUserInfo>();
  50. qRegisterMetaType<RoomInfo>("RoomInfo");
  51. qRegisterMetaType<RoomListData>("RoomListData");
  52. qRegisterMetaType<RoomUserInfo>("RoomUserInfo");
  53. qRegisterMetaType<RoomUsersResp>("RoomUsersResp");
  54. qRegisterMetaType<std::optional<QString>>("std::optional<QString>");
  55. qRegisterMetaType<std::optional<int>>("std::optional<int>");
  56. qRegisterMetaType<std::optional<qint64>>("std::optional<qint64>");
  57. }
  58. #endif
  59. RoomListData::RoomListData(const QJsonObject &object)
  60. {
  61. // 正式开始
  62. QtJsonSerializer::JsonSerializer serializer;
  63. // serializer.setAllowDefaultNull(true);
  64. RoomListData roomList;
  65. try {
  66. roomList = serializer.deserialize<RoomListData>(object);
  67. data = roomList.data;
  68. total = roomList.total;
  69. } catch (const QtJsonSerializer::Exception &e) {
  70. qDebug() << "Deserialization error:" << e.what();
  71. }
  72. }
  73. QList<RoomInfo> RoomListData::getRooms() const
  74. {
  75. return data;
  76. }
  77. QFuture<HttpResponse> getRoomListApi(const RoomInfo &roomInfo, int page, int pageSize)
  78. {
  79. QJsonObject jsonData;
  80. QJsonValue value = JsonMapper::toJson(roomInfo);
  81. jsonData["page"] = page;
  82. jsonData["pageSize"] = pageSize;
  83. if (value.isObject()) {
  84. QJsonObject nested = value.toObject();
  85. for (const QString &key : nested.keys()) {
  86. if (!nested[key].isNull()) {
  87. jsonData[key] = nested[key];
  88. }
  89. }
  90. }
  91. // 活驴
  92. qDebug() << jsonData;
  93. QJsonDocument doc(jsonData);
  94. return TC::RequestClient::globalInstance()->postAsync("/room/list", doc);
  95. }
  96. QFuture<HttpResponse> getRoomApi(const QString &id)
  97. {
  98. QJsonObject jsonData;
  99. jsonData["id"] = id;
  100. // 活驴
  101. qDebug() << jsonData;
  102. QJsonDocument doc(jsonData);
  103. return TC::RequestClient::globalInstance()->postAsync("/room", doc);
  104. }
  105. RoomUsersResp::RoomUsersResp(const QJsonObject &object)
  106. {
  107. QtJsonSerializer::JsonSerializer serializer;
  108. RoomUsersResp roomUsersResp;
  109. try {
  110. roomUsersResp = serializer.deserialize<RoomUsersResp>(object);
  111. data = roomUsersResp.data;
  112. total = roomUsersResp.total;
  113. } catch (const QtJsonSerializer::Exception &e) {
  114. qDebug() << "Deserialization error:" << e.what();
  115. }
  116. }
  117. QList<RoomUserInfo> RoomUsersResp::getRoomUsers() const
  118. {
  119. return data;
  120. }
  121. QFuture<HttpResponse> getRoomUsersApi(const QString &roomId)
  122. {
  123. QJsonObject jsonData;
  124. jsonData["id"] = roomId;
  125. qDebug() << jsonData;
  126. QJsonDocument doc(jsonData);
  127. return TC::RequestClient::globalInstance()->postAsync("/room/users", doc);
  128. }