public static RecordItem TransformRecordItem(Domain.Models.Request.RecordItem recordItem) { RecordItem result = new RecordItem { deviceHash = recordItem.deviceHash, boxNumber = recordItem.boxNumber, boxSection = recordItem.boxSection, locationDetails = recordItem.locationDetails, entity = recordItem.entity, municipality = recordItem.municipality, locality = recordItem.locality, partyPAN = recordItem.partyPAN, partyPRI = recordItem.partyPRI, partyPRD = recordItem.partyPRD, partyVerde = recordItem.partyVerde, partyPT = recordItem.partyPT, partyMC = recordItem.partyMC, partyNA = recordItem.partyNA, partyMOR = recordItem.partyMOR, partyES = recordItem.partyES, partyINDJai = recordItem.partyINDJai, partyOtro = recordItem.partyOtro, partyPANMC = recordItem.partyPANMC, partyPRDPANMC = recordItem.partyPRDPANMC, partyPRDMC = recordItem.partyPRDMC, partyMORPT = recordItem.partyMORPT, partyMORES = recordItem.partyMORES, partyPTESMOR = recordItem.partyPTESMOR, partyPRIVERNA = recordItem.partyPRIVERNA, partyPRIVER = recordItem.partyPRIVER, partyPRINA = recordItem.partyPRINA, partyVERNA = recordItem.partyVERNA, partyPTES = recordItem.partyPTES, partyPRDPAN = recordItem.partyPRDPAN, image = recordItem.image, imageLatitude = recordItem.imageLatitude, imageLongitude = recordItem.imageLongitude, hash = recordItem.hash, username = recordItem.username }; return(result); }
public async Task <AddRecordItemResponse> AddRecordItemAsync(Dictionary <ParameterTypeEnum, object> parameters) { telemetryClient.TrackTrace("Starting helper"); AddRecordItemResponse result = new AddRecordItemResponse { IsSucceded = true, ResultId = (int)AddRecordItemResultEnum.Success }; try { telemetryClient.TrackTrace("Getting parameters"); parameters.TryGetValue(ParameterTypeEnum.RecordItem, out global::System.Object orecordItemRequest); Domain.Models.Request.RecordItem recordItemRequest = orecordItemRequest as Domain.Models.Request.RecordItem; parameters.TryGetValue(ParameterTypeEnum.MasterAddress, out global::System.Object omasterAddress); string masterAddress = omasterAddress.ToString(); parameters.TryGetValue(ParameterTypeEnum.MasterPrivateKey, out global::System.Object omasterPrivateKey); string masterPrivateKey = omasterPrivateKey.ToString(); parameters.TryGetValue(ParameterTypeEnum.ContractAddress, out global::System.Object ocontractAddress); string contractAddress = ocontractAddress.ToString(); parameters.TryGetValue(ParameterTypeEnum.ContractABI, out global::System.Object ocontractABI); string contractABI = ocontractABI.ToString(); parameters.TryGetValue(ParameterTypeEnum.RecordItemImageContainer, out global::System.Object orecordItemImageContainer); string recordItemImageContainer = orecordItemImageContainer.ToString(); //database helpers DBRecordItemHelper dbRecordItemHelper = new DBRecordItemHelper(DBCONNECTION_INFO); DBUserAccountHelper dbUserAccountHelper = new DBUserAccountHelper(DBCONNECTION_INFO); //blockchain helper BlockchainHelper bh = new BlockchainHelper(telemetryClient, STORAGE_ACCOUNT, RPC_CLIENT, masterAddress, masterPrivateKey); telemetryClient.TrackTrace("Validating username length"); //validate username length if (!RegexValidation.IsValidUsername(recordItemRequest.username)) { result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.InvalidUsernameLength; return(result); } telemetryClient.TrackTrace("Validating username existance"); //validate if account exists UserAccount userAccount = dbUserAccountHelper.GetUser(recordItemRequest.username); if (userAccount == null) { result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.UsernameNotExists; return(result); } telemetryClient.TrackTrace("Validating record item existance"); //validate if record item exists for voting RecordItem recordItemExists = dbRecordItemHelper.GetRecordItem(recordItemRequest.hash); if (recordItemExists != null) { //there is no record item linked with this vote result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.AlreadyExists; } else { telemetryClient.TrackTrace("Adding record item to blockchain"); var res_AddRecordAsync = await bh.AddRecordAsync(recordItemRequest.hash, recordItemRequest.username, contractAddress, contractABI); telemetryClient.TrackTrace($"Add record item result: {res_AddRecordAsync}"); if (string.IsNullOrEmpty(res_AddRecordAsync)) { //there was an error adding the record to the blockchain result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.BlockchainIssue; return(result); } telemetryClient.TrackTrace("Adding record item to database"); RecordItem recordItem = RecordItemParser.TransformRecordItem(recordItemRequest); recordItem.hash = recordItem.hash.ToLower(); recordItem.transactionId = res_AddRecordAsync; recordItem.createdDate = Timezone.GetCustomTimeZone(); recordItem.image = recordItem.image + ".png"; //perform insert in mongodb await dbRecordItemHelper.CreateRecordItem(recordItem); telemetryClient.TrackTrace("Adding record item image to storage"); //upload image to blobstorage byte[] buffer = Convert.FromBase64String(recordItemRequest.ImageBytes); await UploadRecordItemImageAsync(recordItemImageContainer, recordItem.image, buffer); } } catch (AggregateException ex) { foreach (var innerException in ex.Flatten().InnerExceptions) { telemetryClient.TrackException(innerException); } result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.Failed; } catch (Exception ex) { telemetryClient.TrackException(ex); result.IsSucceded = false; result.ResultId = (int)AddRecordItemResultEnum.Failed; } telemetryClient.TrackTrace("Finishing helper"); return(result); }