characters_repository.dart 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. import 'package:injectable/injectable.dart';
  2. import 'package:get/get.dart';
  3. import 'package:keyboard/data/api/request/character_custom_update_request.dart';
  4. import 'package:keyboard/data/api/response/character_add_response.dart';
  5. import 'package:keyboard/data/api/response/character_custom_page_response.dart';
  6. import 'package:keyboard/data/api/response/character_custom_update_response.dart';
  7. import 'package:keyboard/data/api/response/character_unlock_response.dart';
  8. import 'package:keyboard/data/api/response/new_user_get_character_response.dart';
  9. import 'package:keyboard/data/repository/keyboard_repository.dart';
  10. import '../../base/app_base_request.dart';
  11. import '../../di/get_it.dart';
  12. import '../../module/character/content/character_group_content_controller.dart';
  13. import '../../utils/atmob_log.dart';
  14. import '../../utils/http_handler.dart';
  15. import '../api/atmob_api.dart';
  16. import '../api/request/character_add_request.dart';
  17. import '../api/request/character_custom_add_request.dart';
  18. import '../api/request/character_custom_delete_request.dart';
  19. import '../api/request/character_custom_generate_request.dart';
  20. import '../api/request/character_custom_page_request.dart';
  21. import '../api/request/character_page_request.dart';
  22. import '../api/request/character_unlock_request.dart';
  23. import '../api/response/character_custom_generate_response.dart';
  24. import '../api/response/character_group_response.dart';
  25. import '../api/response/character_page_response.dart';
  26. import '../bean/character_group_info.dart';
  27. @lazySingleton
  28. class CharactersRepository {
  29. final AtmobApi atmobApi;
  30. final String tag = "CharactersRepository";
  31. // 人设主题
  32. final RxList<CharacterGroupInfo> _characterGroupList =
  33. RxList<CharacterGroupInfo>();
  34. RxList<CharacterGroupInfo> get characterGroupList => _characterGroupList;
  35. CharactersRepository(this.atmobApi) {
  36. AtmobLog.d(tag, '$tag....init');
  37. getCharactersGroup();
  38. }
  39. void refreshCharacterGroup(){
  40. KeyboardRepository.getInstance().keyboardInfoList.forEach((keyboardInfo) {
  41. CharactersRepository.getInstance().characterGroupList.forEach((characterGroupInfo) {
  42. final tag = "CharacterGroupContentController${keyboardInfo.id}${characterGroupInfo.id}";
  43. if (Get.isRegistered<CharacterGroupContentController>(tag: tag)) {
  44. var controller = Get.find<CharacterGroupContentController>(tag: tag);
  45. controller.refreshData();
  46. }
  47. });
  48. });
  49. }
  50. // 获取主题
  51. Future<CharacterGroupResponse> getCharactersGroup() async {
  52. return atmobApi
  53. .getCharactersGroup(AppBaseRequest())
  54. .then(HttpHandler.handle(true))
  55. .then((response) {
  56. _characterGroupList.value = response.characterGroups;
  57. return response;
  58. });
  59. }
  60. // 获取人设列表
  61. Future<CharacterPageResponse> getCharactersPage({
  62. required String groupId,
  63. required String keyboardId,
  64. int page = 1,
  65. int pageSize = 10,
  66. }) {
  67. return atmobApi
  68. .getCharactersPage(
  69. CharacterPageRequest(
  70. keyboardId: keyboardId,
  71. groupId: groupId,
  72. page: page,
  73. pageSize: pageSize,
  74. ),
  75. )
  76. .then(HttpHandler.handle(true));
  77. }
  78. // 添加人设
  79. Future<CharacterAddResponse> characterAdd({
  80. required String characterId,
  81. required String keyboardId,
  82. }) {
  83. return atmobApi
  84. .addCharacter(
  85. CharacterAddRequest(characterId: characterId, keyboardId: keyboardId),
  86. )
  87. .then(HttpHandler.handle(false));
  88. }
  89. // 解锁人设
  90. Future<CharacterUnlockResponse> characterUnlock({
  91. required String characterId,
  92. required String keyboardId,
  93. }) {
  94. return atmobApi
  95. .unlockCharacter(
  96. CharacterUnlockRequest(
  97. characterId: characterId,
  98. keyboardId: keyboardId,
  99. ),
  100. )
  101. .then(HttpHandler.handle(true));
  102. }
  103. ///生成自定义人设
  104. Future<CharacterCustomGenerateResponse> generateCharacterCustom({
  105. String? name,
  106. String? birthday,
  107. String? imageUrl,
  108. int? gender,
  109. List<String>? hobbies,
  110. List<String>? characters,
  111. }) {
  112. return atmobApi
  113. .generateCharacterCustom(
  114. CharacterCustomGenerateRequest(
  115. name: name,
  116. birthday: birthday,
  117. imageUrl: imageUrl,
  118. gender: gender,
  119. hobbies: hobbies,
  120. characters: characters,
  121. ),
  122. )
  123. .then(HttpHandler.handle(true));
  124. }
  125. // 更新定制人设信息
  126. Future<CharacterCustomUpdateResponse> characterCustomUpdate({
  127. required String id,
  128. String? name,
  129. String? birthday,
  130. String? imgUrl,
  131. int? gender,
  132. List<String>? hobbies,
  133. List<String>? characters,
  134. }) {
  135. return atmobApi
  136. .updateCustomCharacter(
  137. CharacterCustomUpdateRequest(
  138. id: id,
  139. name: name,
  140. birthday: birthday,
  141. imageUrl: imgUrl,
  142. gender: gender,
  143. hobbies: hobbies,
  144. characters: characters,
  145. ),
  146. )
  147. .then(HttpHandler.handle(true));
  148. }
  149. // 添加定制人设到键盘
  150. Future<CharacterCustomUpdateResponse> addCustomCharacter({
  151. required String characterId,
  152. required String keyboardId,
  153. }) {
  154. return atmobApi
  155. .addCustomCharacter(
  156. CharacterCustomAddRequest(
  157. characterId: characterId,
  158. keyboardId: keyboardId,
  159. ),
  160. )
  161. .then(HttpHandler.handle(true));
  162. }
  163. // 分页查询定制人设列表
  164. Future<CharacterCustomPageResponse> getCustomCharactersPage({
  165. String? keyboardId,
  166. int page = 1,
  167. int pageSize = 10,
  168. }) {
  169. return atmobApi
  170. .getCustomCharactersPage(
  171. CharacterCustomPageRequest(
  172. keyboardId: keyboardId,
  173. page: page,
  174. pageSize: pageSize,
  175. ),
  176. )
  177. .then(HttpHandler.handle(true));
  178. }
  179. // 删除定制人设
  180. Future<void> deleteCustomCharacter({required String characterId}) {
  181. return atmobApi
  182. .deleteCustomCharacter(
  183. CharacterCustomDeleteRequest(characterId: characterId),
  184. )
  185. .then(HttpHandler.handle(true));
  186. }
  187. // 获取新人人设列表
  188. Future<NewUserGetCharacterResponse> getNewUserCharactersList() {
  189. return atmobApi
  190. .getNewUserCharactersList(AppBaseRequest())
  191. .then(HttpHandler.handle(true));
  192. }
  193. static CharactersRepository getInstance() =>
  194. getIt.get<CharactersRepository>();
  195. }
  196. class CharacterException implements Exception {
  197. final String msg;
  198. final int? code;
  199. CharacterException(this.msg, {this.code});
  200. @override
  201. String toString() => msg;
  202. }