Advertisement
Guest User

Untitled

a guest
Feb 26th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.42 KB | None | 0 0
  1. //
  2. // ITAPIOperationFactory.m
  3. //
  4. //
  5. // Created by radu on 11/16/15.
  6. //
  7. //
  8.  
  9. #import "ITAPIOperationFactory.h"
  10. #import "Constants.h"
  11. #import "ObjectFactory.h"
  12. #import "AFNetworking.h"
  13. #import "ITKeychainWrapper.h"
  14. #import "CommonRetCodeResponse.h"
  15. #import "ConfigUtils.h"
  16. #import "AppDelegate.h"
  17.  
  18. @implementation ITAPIOperationFactory
  19.  
  20. #pragma mark -
  21. #pragma mark Device Operations
  22.  
  23. + (ITAPIOperation*)apiAddDeviceOperationWithName:(NSString *)name
  24. typeName:(NSString *)typeName
  25. password:(NSString *)password
  26. completion:(void (^)(AddDeviceResponse *response, ITAPIOperation *operation))completion;
  27. {
  28. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  29. [userInfo safeSetObject:name forKey:@"deviceName"];
  30. [userInfo safeSetObject:typeName forKey:@"deviceType"];
  31. [userInfo safeSetObject:password forKey:@"password"];
  32. ITLog(@"");
  33. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeAddDevice userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  34. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  35. [deviceManager addDevice:name password:password deviceTypeName:typeName success:success failure:failure];
  36. } completion:completion];
  37. }
  38.  
  39. + (ITAPIOperation*)apiRemoveDevice:(NSNumber *)deviceNumber
  40. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  41. {
  42. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  43. [userInfo safeSetObject:deviceNumber forKey:deviceNumber];
  44. ITLog(@"");
  45. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeRemoveDevice userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  46. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  47. [deviceManager removeDevice:deviceNumber success:success failure:failure];
  48. } completion:completion];
  49. }
  50.  
  51. + (ITAPIOperation*)apiUpdateDeviceOperationWithId:(NSNumber *)deviceId
  52. params:(NSDictionary *)params
  53. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  54. {
  55. if (((AppDelegate *)[UIApplication sharedApplication].delegate).isInDemoMode) {
  56. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  57. [userInfo safeSetObject:deviceId forKey:@"deviceId"];
  58. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUpdateDevice userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  59. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  60. [deviceManager updateDevice:deviceId attributeValues:params success:^(CommonRetCodeResponse *response) {
  61. ITLog(@"response: %@", response);
  62. success(response);
  63. } failure:^(SDKError *error) {
  64. SDKError *err = [SDKError new];
  65. if ( error.code == -1011 ) {
  66. err.code = 106;
  67. err.message = @"Invalid security token";
  68. } else {
  69. err.code = (int)error.code;
  70. err.message = error.description;
  71. }
  72. failure(err);
  73. }];
  74. } completion:completion];
  75. } else {
  76. // Convert params to format {name1: key, value1: value, name2 : key, value2: value... }
  77. NSMutableDictionary *parsedParams = [NSMutableDictionary new];
  78. __block NSInteger idx = 1;
  79. [params enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
  80. parsedParams[[NSString stringWithFormat:@"name%ld", (long)idx]] = [NSString stringWithFormat:@"%@", key];
  81. parsedParams[[NSString stringWithFormat:@"value%ld", (long)idx]] = [NSString stringWithFormat:@"%@", obj];
  82. idx ++;
  83. }];
  84.  
  85. // Create request params
  86. NSString *token = [ITKeychainWrapper searchKeychainCopyMatchingIdentifier:kKeyChainToken];
  87. NSMutableDictionary *requestParams = [NSMutableDictionary dictionaryWithDictionary:@{@"devId" : deviceId, @"secToken" : token}];
  88. [requestParams addEntriesFromDictionary:parsedParams];
  89.  
  90. // Create request info
  91. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  92. [userInfo safeSetObject:deviceId forKey:@"deviceId"];
  93. [userInfo safeSetObject:params forKey:@"attributes"];
  94.  
  95. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUpdateDevice userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  96. static AFHTTPSessionManager *s_manager = nil;
  97. static dispatch_once_t onceToken;
  98. dispatch_once(&onceToken, ^{
  99. s_manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:@"https://salus-api.arrayent.com:8081/zdk/services/zamapi/"]];
  100. s_manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
  101. });
  102.  
  103. [s_manager PUT:@"setMultiDeviceAttributes2" parameters:requestParams success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  104. ITLog(@"response: %@", responseObject);
  105. CommonRetCodeResponse *response = [[CommonRetCodeResponse alloc] initWithReturnCode:@0];
  106. success(response);
  107. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  108. SDKError *err = [SDKError new];
  109. if ( error.code == -1011 ) {
  110. err.code = 106;
  111. err.message = @"Invalid security token";
  112. } else {
  113. err.code = (int)error.code;
  114. err.message = error.localizedDescription;
  115. }
  116. failure(err);
  117. }];
  118. } completion:completion];
  119. }
  120. }
  121.  
  122. + (ITAPIOperation*)apiRestartDeviceOperationWithId:(NSNumber *)deviceId
  123. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  124. {
  125. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  126. [userInfo safeSetObject:deviceId forKey:@"deviceId"];
  127. ITLog(@"");
  128. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeRestartDevice userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  129. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  130. NSDictionary *restartParams = @{ThermostatRestart : @"1" };
  131. [deviceManager updateDevice:deviceId attributeValues:restartParams success:success failure:failure];
  132. } completion:completion];
  133. }
  134.  
  135. + (ITAPIOperation*)apiGetDeviceAttributeWithId:(int)deviceId
  136. attribute:(NSString *)attribute
  137. completion:(void (^)(GetDeviceAttributeResposne *response, ITAPIOperation *operation))completion
  138. {
  139. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  140. [userInfo safeSetObject:@(deviceId) forKey:@"deviceId"];
  141. [userInfo safeSetObject:attribute forKey:@"attribute"];
  142. ITLog(@"");
  143. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeGetDeviceAttribute userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  144. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  145. [deviceManager getAttributeOfDevice:deviceId attributeName:attribute success:success failure:failure];
  146. } completion:completion];
  147. }
  148.  
  149. + (ITAPIOperation*)apiGetDevicesDetailsOperationWithCompletion:(void (^)(DeviceDetailsList *response, ITAPIOperation *operation))completion
  150. {
  151. ITLog(@"");
  152. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeGetDevicesDetails apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  153. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  154. [deviceManager getDevicesDetails:success failure:failure];
  155. } completion:completion];
  156. }
  157.  
  158. + (ITAPIOperation*)apiGetDeviceDetailsById:(NSNumber *)deviceId typeName:(NSString *)typeName completion:(ITGetDeviceDetailsCompletionBlock)completion
  159. {
  160. ITLog(@"");
  161. NSDictionary *userInfo = @{@"deviceId" : deviceId, @"typeName" : typeName};
  162. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeGetDeviceDetailsById userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  163. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  164. [deviceManager getDeviceById:[deviceId intValue] typeName:typeName success:success failure:failure];
  165. } completion:completion];
  166. }
  167.  
  168. + (ITAPIOperation*)apiGetDeviceTypesWithCompletion:(void (^)(DeviceTypes *response, ITAPIOperation *operation))completion
  169. {
  170. ITLog(@"");
  171. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeGetDeviceTypes apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  172. id<DeviceManagerProtocol> deviceManager = [[ObjectFactory sharedInstance] getDeviceManagerInstance];
  173. [deviceManager getDeviceTypeList:success failure:failure];
  174. } completion:completion];
  175. }
  176.  
  177. #pragma mark -
  178. #pragma mark User operations
  179.  
  180.  
  181. + (ITAPIOperation*)apiLoginUserOperationWithUsername:(NSString *)username
  182. password:(NSString *)password
  183. completion:(void (^)(UserLoginResponse *response, ITAPIOperation *operations))completion
  184. {
  185. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  186. [userInfo safeSetObject:username forKey:@"username"];
  187. [userInfo safeSetObject:password forKey:@"password"];
  188.  
  189. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUserLogin userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  190. id<AccountManagerV2Protocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerV2Instance];
  191. if ( !password || !username ) {
  192. failure(nil);
  193. return;
  194. }
  195.  
  196. NSString *encodedPassword = MD5(password);
  197. [accountManager userLogin:username password:encodedPassword success:success failure:failure];
  198. } completion:completion];
  199. }
  200.  
  201. + (ITAPIOperation*)apiLogoutOperationWithCompletion:(void (^)(LogoutResponse *response, ITAPIOperation *operation))completion
  202. {
  203. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUserLogout apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  204. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  205. [accountManager logOut:success failure:failure];
  206. } completion:completion];
  207. }
  208.  
  209. + (ITAPIOperation*)apiRegisterUserOperationWithUsername:(NSString *)username
  210. password:(NSString *)password
  211. email:(NSString *)email
  212. fullName:(NSString *)fullName
  213. appId:(int)appId
  214. language:(NSString *)language
  215. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  216. {
  217. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  218. [userInfo safeSetObject:username forKey:@"username"];
  219. [userInfo safeSetObject:password forKey:@"password"];
  220. [userInfo safeSetObject:email forKey:@"email"];
  221. [userInfo safeSetObject:fullName forKey:@"fullName"];
  222. [userInfo safeSetObject:@(appId) forKey:@"appId"];
  223. [userInfo safeSetObject:language forKey:@"language"];
  224.  
  225. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeCreateUser userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  226. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  227.  
  228. // Prepare params
  229. NSString *encodedPassword = MD5(password);
  230. NSString *lowercaseUsername = [username lowercaseString];
  231. NSString *lowercaseEmail = [email lowercaseString];
  232. NSString *lowercaseFullName = [fullName lowercaseString];
  233.  
  234. [[ConfigUtils sharedInstance] setCloudUrl:myCloudURL];
  235. [[ConfigUtils sharedInstance] setApplicationName:myAppName];
  236.  
  237. // Execute request
  238. [accountManager registerUser:lowercaseUsername
  239. andPassword:encodedPassword
  240. withEmail:lowercaseEmail
  241. fullName:lowercaseFullName
  242. forApplicationId:appId
  243. language:language
  244. success:success
  245. failure:failure];
  246. } completion:completion];
  247. }
  248.  
  249. + (ITAPIOperation*)apiCreateUserOperationWithUsername:(NSString *)username
  250. password:(NSString *)password
  251. completion:(ITGenericApiOperationCompletionBlock)completion
  252. {
  253. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  254. [userInfo safeSetObject:username forKey:@"username"];
  255. [userInfo safeSetObject:password forKey:@"password"];
  256.  
  257. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeCreateUser userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  258. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  259.  
  260. // Prepare params
  261. NSString *encodedPassword = MD5(password);
  262. NSString *lowercaseUsername = [username lowercaseString];
  263.  
  264. [[ConfigUtils sharedInstance] setCloudUrl:myCloudURL];
  265. [[ConfigUtils sharedInstance] setApplicationName:myAppName];
  266.  
  267. // Execute request
  268. [accountManager createAccountWithName:lowercaseUsername andPassword:encodedPassword success:success failure:failure];
  269. } completion:completion];
  270. }
  271.  
  272. + (ITAPIOperation*)apiGetAccountOperationWithId:(int)userId completion:(void (^)(GetAccountResponse *response, ITAPIOperation *operation))completion
  273. {
  274. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  275. [userInfo safeSetObject:@(userId) forKey:@"userId"];
  276.  
  277. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeGetUserById userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  278. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  279. [accountManager getAccountById:userId success:success failure:failure];
  280. } completion:completion];
  281. }
  282.  
  283. + (ITAPIOperation*)apiDeleteAccountOperationById:(int)userId
  284. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  285. {
  286. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  287. [userInfo safeSetObject:@(userId) forKey:@"userId"];
  288.  
  289. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeDeleteUserById userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  290. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  291. [accountManager deleteAccountById:userId success:success failure:failure];
  292. } completion:completion];
  293. }
  294.  
  295. + (ITAPIOperation*)apiRequestPasswordRecoveryCodeOperationWithEmail:(NSString *)email
  296. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  297. {
  298. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  299. [userInfo safeSetObject:email forKey:@"email"];
  300.  
  301. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeRequestPasswordRecoveryCode userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  302. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  303. [accountManager requestPasswordRecoveryCode:email success:success failure:failure];
  304. } completion:completion];
  305. }
  306.  
  307. + (ITAPIOperation*)apiUpdatePasswordOperationWithPassword:(NSString *)newPassword
  308. forUserName:(NSString *)username
  309. recoveryCode:(NSString *)recoveryCode
  310. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  311. {
  312. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  313. [userInfo safeSetObject:username forKey:@"username"];
  314. [userInfo safeSetObject:newPassword forKey:@"newPassword"];
  315. [userInfo safeSetObject:recoveryCode forKey:@"recoveryCode"];
  316.  
  317. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUpdateUserPassword userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  318. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  319. NSString *encryptedPassword = MD5(newPassword);
  320. [accountManager updatePassword:encryptedPassword forUserName:username andRecoveryCode:recoveryCode success:success failure:failure];
  321. } completion:completion];
  322. }
  323.  
  324. + (ITAPIOperation*)apiActivateUserOperationWithCode:(NSString *)activationCode completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  325. {
  326. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  327. [userInfo safeSetObject:activationCode forKey:@"activationCode"];
  328.  
  329. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeActivateUser userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  330. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  331. [accountManager activateUser:activationCode success:success failure:failure];
  332. } completion:completion];
  333. }
  334.  
  335. + (ITAPIOperation*)apiUpdateAccountOperationWithAttribute:(NSString *)attributeName
  336. value:(NSString *)attributeValue
  337. completion:(void (^)(CommonRetCodeResponse *response, ITAPIOperation *operation))completion
  338. {
  339. NSMutableDictionary *userInfo = [NSMutableDictionary new];
  340. [userInfo safeSetObject:attributeName forKey:kAttributeName];
  341. [userInfo safeSetObject:attributeValue forKey:kAttributeValue];
  342.  
  343. return [[ITAPIOperation alloc] initApiOperationWithType:ITAPIOperationTypeUpdateAccountAttribute userInfo:userInfo apiBlock:^(APISuccessBlock success, APIFailureBlock failure) {
  344. id<AccountManagerProtocol> accountManager = [[ObjectFactory sharedInstance] getAccountManagerInstance];
  345. [accountManager updateAccountWithAttributeName:attributeName andAttributeValue:attributeValue success:success failure:failure];
  346. } completion:completion];
  347. }
  348.  
  349. @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement