Skip to content

Commit f9c32a7

Browse files
committed
feat: friend block list
1 parent ee682a3 commit f9c32a7

File tree

6 files changed

+87
-40
lines changed

6 files changed

+87
-40
lines changed

AVOS/Sources/Foundation/Query/LCQuery.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,11 @@ + (void)clearAllCachedResults
10031003

10041004
#pragma mark - Handle the data for communication with server
10051005
- (NSString *)queryPath {
1006-
return [LCObjectUtils objectPath:self.className objectId:nil];
1006+
if (self.endpoint) {
1007+
return self.endpoint;
1008+
} else {
1009+
return [LCObjectUtils objectPath:self.className objectId:nil];
1010+
}
10071011
}
10081012

10091013
+ (NSDictionary *)dictionaryFromIncludeKeys:(NSArray *)array {

AVOS/Sources/Foundation/Query/LCQuery_Internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
@property (nonatomic, readwrite, strong) NSMutableDictionary *where;
1414
@property (nonatomic) NSMutableSet<NSString *> *selectedKeys;
1515
@property (nonatomic, strong) NSMutableDictionary *extraParameters;
16+
@property (nonatomic) NSString *endpoint;
1617

1718
- (NSMutableDictionary *)assembleParameters;
1819
+ (NSDictionary *)dictionaryFromIncludeKeys:(NSArray *)array;

AVOS/Sources/Foundation/User/LCFriendship.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@ NS_ASSUME_NONNULL_BEGIN
6161
+ (void)declineRequest:(LCFriendshipRequest *)request
6262
callback:(void (^)(BOOL succeeded, NSError * _Nullable error))callback;
6363

64+
/// Block a friend by user id.
65+
/// @param userId The `objectId` of the user.
66+
/// @param callback Result callback.
67+
+ (void)blockFriendWithUserId:(NSString *)userId
68+
callback:(void (^)(BOOL succeeded, NSError * _Nullable error))callback;
69+
70+
/// Unblock a friend by user id.
71+
/// @param userId The `objectId` of the user.
72+
/// @param callback Result callback.
73+
+ (void)unblockFriendWithUserId:(NSString *)userId
74+
callback:(void (^)(BOOL succeeded, NSError * _Nullable error))callback;
75+
6476
@end
6577

6678
NS_ASSUME_NONNULL_END

AVOS/Sources/Foundation/User/LCFriendship.m

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,25 @@ + (void)requestWithUserId:(NSString *)userId callback:(void (^)(BOOL, NSError *
4242
+ (void)requestWithUserId:(NSString *)userId attributes:(NSDictionary *)attributes callback:(void (^)(BOOL, NSError * _Nullable))callback {
4343
if (!userId) {
4444
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Parameter `userId` invalid.", nil);
45-
dispatch_async(dispatch_get_main_queue(), ^{
46-
callback(false, error);
47-
});
45+
[LCUtils callBooleanResultBlock:callback error:error];
4846
return;
4947
}
5048
LCUser *currentUser = [LCUser currentUser];
5149
if (!currentUser.sessionToken) {
5250
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Please signin an user.", nil);
53-
dispatch_async(dispatch_get_main_queue(), ^{
54-
callback(false, error);
55-
});
51+
[LCUtils callBooleanResultBlock:callback error:error];
5652
return;
5753
}
5854
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
5955
parameters[@"user"] = [LCObjectUtils dictionaryFromObjectPointer:currentUser];
6056
parameters[@"friend"] = [LCObjectUtils dictionaryFromObjectPointer:[LCUser objectWithObjectId:userId]];
61-
if (attributes) {
57+
if (attributes && attributes.count > 0) {
6258
parameters[@"friendship"] = attributes;
6359
}
6460
[[LCPaasClient sharedInstance] postObject:@"users/friendshipRequests"
6561
withParameters:parameters
6662
block:^(id _Nullable object, NSError * _Nullable error) {
67-
dispatch_async(dispatch_get_main_queue(), ^{
68-
callback(!error, error);
69-
});
63+
[LCUtils callBooleanResultBlock:callback error:error];
7064
}];
7165
}
7266

@@ -75,61 +69,79 @@ + (void)acceptRequest:(LCFriendshipRequest *)request callback:(void (^)(BOOL, NS
7569
}
7670

7771
+ (void)acceptRequest:(LCFriendshipRequest *)request attributes:(NSDictionary *)attributes callback:(void (^)(BOOL, NSError * _Nullable))callback {
72+
[self acceptOrDeclineRequest:request operation:@"accept" attributes:attributes callback:callback];
73+
}
74+
75+
+ (void)declineRequest:(LCFriendshipRequest *)request callback:(void (^)(BOOL, NSError * _Nullable))callback {
76+
[self acceptOrDeclineRequest:request operation:@"decline" attributes:nil callback:callback];
77+
}
78+
79+
+ (void)acceptOrDeclineRequest:(LCFriendshipRequest *)request
80+
operation:(NSString *)operation
81+
attributes:(NSDictionary *)attributes
82+
callback:(void (^)(BOOL, NSError * _Nullable))callback
83+
{
7884
if (!request.objectId) {
7985
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Parameter `request` invalid.", nil);
80-
dispatch_async(dispatch_get_main_queue(), ^{
81-
callback(false, error);
82-
});
86+
[LCUtils callBooleanResultBlock:callback error:error];
8387
return;
8488
}
8589
LCUser *currentUser = [LCUser currentUser];
8690
if (!currentUser.sessionToken) {
8791
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Please signin an user.", nil);
88-
dispatch_async(dispatch_get_main_queue(), ^{
89-
callback(false, error);
90-
});
92+
[LCUtils callBooleanResultBlock:callback error:error];
9193
return;
9294
}
93-
NSString *path = [NSString stringWithFormat:@"users/friendshipRequests/%@/accept", request.objectId];
95+
NSString *path = [NSString stringWithFormat:@"users/friendshipRequests/%@/%@", request.objectId, operation];
9496
NSDictionary *parameters;
95-
if (attributes) {
97+
if (attributes && attributes.count > 0) {
9698
parameters = @{ @"friendship" : attributes };
9799
}
98100
[[LCPaasClient sharedInstance] putObject:path
99101
withParameters:parameters
100102
sessionToken:currentUser.sessionToken
101103
block:^(id _Nullable object, NSError * _Nullable error) {
102-
dispatch_async(dispatch_get_main_queue(), ^{
103-
callback(!error, error);
104-
});
104+
[LCUtils callBooleanResultBlock:callback error:error];
105105
}];
106106
}
107107

108-
+ (void)declineRequest:(LCFriendshipRequest *)request callback:(void (^)(BOOL, NSError * _Nullable))callback {
109-
if (!request.objectId) {
110-
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Parameter `request` invalid.", nil);
111-
dispatch_async(dispatch_get_main_queue(), ^{
112-
callback(false, error);
113-
});
108+
+ (void)blockFriendWithUserId:(NSString *)userId callback:(void (^)(BOOL, NSError * _Nullable))callback {
109+
[self blockOrUnblockFriendWithUserId:userId isBlock:true callback:callback];
110+
}
111+
112+
+ (void)unblockFriendWithUserId:(NSString *)userId callback:(void (^)(BOOL, NSError * _Nullable))callback {
113+
[self blockOrUnblockFriendWithUserId:userId isBlock:false callback:callback];
114+
}
115+
116+
+ (void)blockOrUnblockFriendWithUserId:(NSString *)userId
117+
isBlock:(BOOL)isBlock
118+
callback:(void (^)(BOOL, NSError * _Nullable))callback
119+
{
120+
if (!userId) {
121+
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Parameter `userId` invalid.", nil);
122+
[LCUtils callBooleanResultBlock:callback error:error];
114123
return;
115124
}
116125
LCUser *currentUser = [LCUser currentUser];
117126
if (!currentUser.sessionToken) {
118127
NSError *error = LCError(LCErrorInternalErrorCodeInconsistency, @"Please signin an user.", nil);
119-
dispatch_async(dispatch_get_main_queue(), ^{
120-
callback(false, error);
121-
});
128+
[LCUtils callBooleanResultBlock:callback error:error];
122129
return;
123130
}
124-
NSString *path = [NSString stringWithFormat:@"users/friendshipRequests/%@/decline", request.objectId];
125-
[[LCPaasClient sharedInstance] putObject:path
126-
withParameters:nil
127-
sessionToken:currentUser.sessionToken
128-
block:^(id _Nullable object, NSError * _Nullable error) {
129-
dispatch_async(dispatch_get_main_queue(), ^{
130-
callback(!error, error);
131-
});
132-
}];
131+
NSString *path = [NSString stringWithFormat:@"users/self/friendBlocklist/%@", userId];
132+
if (isBlock) {
133+
[[LCPaasClient sharedInstance] postObject:path
134+
withParameters:nil
135+
block:^(id _Nullable object, NSError * _Nullable error) {
136+
[LCUtils callBooleanResultBlock:callback error:error];
137+
}];
138+
} else {
139+
[[LCPaasClient sharedInstance] deleteObject:path
140+
withParameters:nil
141+
block:^(id _Nullable object, NSError * _Nullable error) {
142+
[LCUtils callBooleanResultBlock:callback error:error];
143+
}];
144+
}
133145
}
134146

135147
@end

AVOS/Sources/Foundation/User/LCUser.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,12 @@ FOUNDATION_EXPORT LeanCloudSocialPlatform const LeanCloudSocialPlatformWeiXin;
553553
/// New query for followee objects.
554554
- (LCQuery *)followeeObjectsQuery;
555555

556+
/// New query for friend list.
557+
- (LCQuery *)friendshipQuery;
558+
559+
/// New query for block list.
560+
- (LCQuery *)friendshipBlockQuery;
561+
556562
/**
557563
* 通过ID来关注其他用户
558564
* @warning 如果需要被关注者收到消息 需要手动给他发送一条LCStatus.

AVOS/Sources/Foundation/User/LCUser.m

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,6 +1345,18 @@ - (LCQuery *)followeeObjectsQuery {
13451345
return query;
13461346
}
13471347

1348+
- (LCQuery *)friendshipQuery {
1349+
LCQuery *query = [LCQuery queryWithClassName:@"_Followee"];
1350+
query.endpoint = @"users/self/friends";
1351+
return query;
1352+
}
1353+
1354+
- (LCQuery *)friendshipBlockQuery {
1355+
LCQuery *query = [LCQuery queryWithClassName:@"_Blocklist"];
1356+
query.endpoint = @"users/self/friendBlocklist";
1357+
return query;
1358+
}
1359+
13481360
- (void)follow:(NSString *)userId andCallback:(LCBooleanResultBlock)callback {
13491361
[self follow:userId userDictionary:nil andCallback:callback];
13501362
}

0 commit comments

Comments
 (0)