Files
keyboard/keyBoard/Class/Home/VM/KBHomeVM.m
2025-12-03 19:00:55 +08:00

117 lines
3.7 KiB
Objective-C

//
// KBHomeVM.m
// keyBoard
//
// Created by Mac on 2025/12/3.
//
#import "KBHomeVM.h"
#import "KBCharacter.h"
#import "KBTag.h"
#import "KBNetworkManager.h"
#import "KBHUD.h"
#import "KBBizCode.h"
@interface KBHomeVM ()
@property (nonatomic, copy, readwrite, nullable) NSArray<KBCharacter *> *rankList;
@property (nonatomic, copy, readwrite, nullable) NSArray<KBTag *> *tagList;
@end
@implementation KBHomeVM
- (void)fetchRankListWithParams:(nullable NSDictionary *)params
needShow:(BOOL)needShow
completion:(KBHomeRankCompletion)completion {
if (needShow) {
[KBHUD show];
}
[[KBNetworkManager shared] GET:KB_API_CHARACTER_LIST
parameters:params
headers:nil
autoShowBusinessError:NO
completion:^(NSDictionary * _Nullable json, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (needShow) {
[KBHUD dismiss];
}
if (error) {
// 若是业务错误,优先展示服务端 message
NSString *msg = KBBizMessageFromJSONObject(json) ?: error.localizedDescription ?: KBLocalized(@"Network error");
[KBHUD showInfo:msg];
if (completion) {
completion(nil, error);
}
return;
}
id dataObj = json[KBData] ?: json[@"data"];
if (![dataObj isKindOfClass:[NSArray class]]) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorInvalidResponse
userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Invalid response")}];
[KBHUD showInfo:e.localizedDescription];
if (completion) {
completion(nil, e);
}
return;
}
// 使用 MJExtension 将数组字典解析为模型数组
NSArray<KBCharacter *> *list = [KBCharacter mj_objectArrayWithKeyValuesArray:(NSArray *)dataObj];
self.rankList = list;
if (completion) {
completion(list, nil);
}
}];
}
- (void)fetchTagListWithParams:(nullable NSDictionary *)params
needShow:(BOOL)needShow
completion:(KBHomeTagCompletion)completion {
if (needShow) {
[KBHUD show];
}
[[KBNetworkManager shared] GET:KB_API_TAG_LIST
parameters:params
headers:nil
autoShowBusinessError:NO
completion:^(NSDictionary * _Nullable json, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (needShow) {
[KBHUD dismiss];
}
if (error) {
NSString *msg = KBBizMessageFromJSONObject(json) ?: error.localizedDescription ?: KBLocalized(@"Network error");
[KBHUD showInfo:msg];
if (completion) {
completion(nil, error);
}
return;
}
id dataObj = json[KBData] ?: json[@"data"];
if (![dataObj isKindOfClass:[NSArray class]]) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorInvalidResponse
userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Invalid response")}];
[KBHUD showInfo:e.localizedDescription];
if (completion) {
completion(nil, e);
}
return;
}
NSArray<KBTag *> *list = [KBTag mj_objectArrayWithKeyValuesArray:(NSArray *)dataObj];
self.tagList = list;
if (completion) {
completion(list, nil);
}
}];
}
@end