private void AddUsersData(IDatabaseConnectionService databaseConnection, DbTransaction transaction, int downloadId, IEnumerable <UserData> usersData, IList <FailedUserData> failedUsers) { AddUserDataParameters addUserParameters = CreateAddUserDataParameters(databaseConnection); using (DbCommand addUserDataCommand = databaseConnection.CreateDbCommand()) { using (DbCommand rebuildIndicesCommand = databaseConnection.CreateDbCommand()) { addUserDataCommand.CommandText = Constants.StatsUploadDatabase.AddUserDataProcedureName; addUserDataCommand.CommandType = CommandType.StoredProcedure; addUserDataCommand.Transaction = transaction; addUserDataCommand.Parameters.AddRange(addUserParameters.AllParameters); rebuildIndicesCommand.CommandText = Constants.StatsUploadDatabase.RebuildIndicesProcedureName; rebuildIndicesCommand.CommandType = CommandType.StoredProcedure; rebuildIndicesCommand.Transaction = transaction; var index = 0; foreach (UserData userData in usersData ?? new UserData[0]) { if (!IsUserDataValid(addUserParameters, userData, out RejectionReason rejectionReason)) { failedUsers.Add(new FailedUserData(userData.LineNumber, rejectionReason, userData)); continue; } SetAddUserDataParameterValues(downloadId, userData, addUserParameters); addUserDataCommand.ExecuteNonQuery(); if (AddUserCommandFailed(addUserParameters)) { failedUsers.Add(new FailedUserData(userData.LineNumber, RejectionReason.FailedAddToDatabase, userData)); } if (index % 2500 == 0) { rebuildIndicesCommand.ExecuteNonQuery(); } index++; } } } }
private bool IsUserDataValid(AddUserDataParameters addUserParameters, UserData userData, out RejectionReason rejectionReason) { if (userData.Name?.Length > addUserParameters.FahUserName.Size) { rejectionReason = RejectionReason.FahNameExceedsMaxSize; return(false); } if (userData.FriendlyName?.Length > addUserParameters.FriendlyName.Size) { rejectionReason = RejectionReason.FriendlyNameExceedsMaxSize; return(false); } if (userData.BitcoinAddress?.Length > addUserParameters.BitcoinAddress.Size) { rejectionReason = RejectionReason.BitcoinAddressExceedsMaxSize; return(false); } rejectionReason = RejectionReason.None; return(true); }
private void SetAddUserDataParameterValues(int downloadId, UserData userData, AddUserDataParameters parameters) { parameters.DownloadId.Value = downloadId; parameters.LineNumber.Value = userData.LineNumber; parameters.FahUserName.Value = userData.Name; parameters.TotalPoints.Value = userData.TotalPoints; parameters.WorkUnits.Value = userData.TotalWorkUnits; parameters.TeamNumber.Value = userData.TeamNumber; parameters.FriendlyName.Value = userData.FriendlyName ?? DBNull.Value as object; parameters.BitcoinAddress.Value = userData.BitcoinAddress ?? DBNull.Value as object; }
private bool AddUserCommandSuccess(AddUserDataParameters addUserParameters) { return(addUserParameters.ReturnValue.Value is int returnValue && returnValue == 0); }
private bool AddUserCommandFailed(AddUserDataParameters addUserParameters) { return(!AddUserCommandSuccess(addUserParameters)); }