Example #1
0
        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++;
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
 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;
 }
Example #4
0
 private bool AddUserCommandSuccess(AddUserDataParameters addUserParameters)
 {
     return(addUserParameters.ReturnValue.Value is int returnValue && returnValue == 0);
 }
Example #5
0
 private bool AddUserCommandFailed(AddUserDataParameters addUserParameters)
 {
     return(!AddUserCommandSuccess(addUserParameters));
 }