This commit is contained in:
2025-12-22 19:19:28 +08:00
parent 5cfc76e6c5
commit 4e6fd90668
20 changed files with 679 additions and 3 deletions

View File

@@ -8,6 +8,7 @@
#import <Foundation/Foundation.h>
#import "KBCharacter.h"
#import "KBMyTheme.h"
#import "KBConsumptionRecord.h"
@class KBUser;
NS_ASSUME_NONNULL_BEGIN
@@ -26,6 +27,7 @@ typedef void(^KBDeleteUserCharacterCompletion)(BOOL success, NSError * _Nullable
typedef void(^KBMyPurchasedThemesCompletion)(NSArray<KBMyTheme *> *_Nullable themes, NSError *_Nullable error);
typedef void(^KBDeleteThemesCompletion)(BOOL success, NSError *_Nullable error);
typedef void(^KBSubmitFeedbackCompletion)(BOOL success, NSError *_Nullable error);
typedef void(^KBMyPurchaseRecordCompletion)(NSArray<KBConsumptionRecord *> *_Nullable records, NSError *_Nullable error);
@interface KBMyVM : NSObject
@@ -39,6 +41,10 @@ typedef void(^KBSubmitFeedbackCompletion)(BOOL success, NSError *_Nullable error
/// 批量删除用户主题(/user-themes/batch-delete
- (void)deletePurchasedThemesWithIds:(NSArray<NSString *> *)themeIds
completion:(KBDeleteThemesCompletion)completion;
/// 分页查询钱包交易记录(/wallet/transactions
- (void)fetchWalletTransactionsWithPage:(NSInteger)pageNum
pageSize:(NSInteger)pageSize
completion:(KBMyPurchaseRecordCompletion)completion;
/// 本地已下载主题列表
- (void)fetchDownloadedThemesWithCompletion:(KBMyPurchasedThemesCompletion)completion;
/// 删除本地主题资源

View File

@@ -158,6 +158,47 @@ NSString * const KBUserCharacterDeletedNotification = @"KBUserCharacterDeletedNo
}];
}
- (void)fetchWalletTransactionsWithPage:(NSInteger)pageNum
pageSize:(NSInteger)pageSize
completion:(KBMyPurchaseRecordCompletion)completion {
NSInteger safePageNum = pageNum > 0 ? pageNum : 1;
NSInteger safePageSize = pageSize > 0 ? pageSize : 10;
NSDictionary *body = @{
@"pageNum": @(safePageNum),
@"pageSize": @(safePageSize)
};
[[KBNetworkManager shared] POST:API_WALLET_TRANSACTIONS
jsonBody:body
headers:nil
autoShowBusinessError:NO
completion:^(NSDictionary * _Nullable json,
NSURLResponse * _Nullable response,
NSError * _Nullable error) {
if (error) {
if (completion) completion(nil, error);
return;
}
id dataObj = json[KBData] ?: json[@"data"];
if (![dataObj isKindOfClass:[NSDictionary class]]) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorInvalidResponse
userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Invalid response")}];
if (completion) completion(nil, e);
return;
}
id recordsObj = [(NSDictionary *)dataObj objectForKey:@"records"];
if (![recordsObj isKindOfClass:[NSArray class]]) {
NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain
code:KBNetworkErrorInvalidResponse
userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Invalid response")}];
if (completion) completion(nil, e);
return;
}
NSArray<KBConsumptionRecord *> *records = [KBConsumptionRecord mj_objectArrayWithKeyValuesArray:(NSArray *)recordsObj];
if (completion) completion(records, nil);
}];
}
- (void)fetchDownloadedThemesWithCompletion:(KBMyPurchasedThemesCompletion)completion {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
NSArray<KBSkinDownloadRecord *> *records = [KBSkinInstallBridge installedSkinRecords];