Exemple #1
0
        public StorageAccountCreationResult CreateStorageAccount(StorageAccount account)
        {
            if (account == null)
            {
                throw new ArgumentNullException("account");
            }

            return(_connectionProvider.DoInTransaction(() =>
            {
                if (_storagePluginsService.GetStoragePlugin(account.StoragePluginId) == null)
                {
                    return StorageAccountCreationResult.PluginNotFound;
                }

                StorageAccount checkAccount = _storageAccountRepository.Load(account.AccountName, account.StoragePluginId, account.UserId);

                if (checkAccount != null)
                {
                    return StorageAccountCreationResult.AccountExists;
                }

                _storageAccountRepository.Insert(account);

                return StorageAccountCreationResult.Success;
            }));
        }
Exemple #2
0
        public StoragePlugin InitPluginStatus(string classPath, int status)
        {
            if (string.IsNullOrEmpty(classPath))
            {
                throw new ArgumentNullException(classPath);
            }

            return(SqlQueryExecutor.Execute(() =>
            {
                return _connectionProvider.DoInTransaction(() =>
                {
                    int?id;
                    string selectQuery = string.Format(CultureInfo.InvariantCulture, "SELECT id FROM {0} WHERE classpath = @ClassPath", TableName);
                    id = _connectionProvider.CurrentConnection.Query <int?>(selectQuery, new { ClassPath = classPath }).FirstOrDefault();
                    if (id != null)
                    {
                        string updateQuery = string.Format(CultureInfo.InvariantCulture, "UPDATE {0}  SET status = @Status WHERE id = @Id", TableName);
                        _connectionProvider.CurrentConnection.Execute(updateQuery, new { Status = status, Id = id.Value });
                    }
                    else
                    {
                        string insertQuery = string.Format(CultureInfo.InvariantCulture, "INSERT INTO {0} {1}; SELECT LAST_INSERT_ID();", TableName, InsertFieldList);
                        id = (int)_connectionProvider.CurrentConnection.Query <long>(insertQuery, new { Status = status, ClassPath = classPath }).FirstOrDefault();
                        if (id.Value <= 0)
                        {
                            throw new MonsterDbException("Storage plugin insertion failed");
                        }
                    }

                    string fullSelectQuery = string.Format(CultureInfo.InvariantCulture, "SELECT {0} FROM {1} s WHERE id = @Id", SelectFieldList, TableName);
                    StoragePlugin storage = _connectionProvider.CurrentConnection.Query <StoragePlugin>(fullSelectQuery, new { Id = id.Value }).FirstOrDefault();
                    return storage;
                });
            }));
        }
        public UpdateResult Update(User user)
        {
            if (user == null)
            {
                throw new ArgumentNullException("user");
            }


            return(SqlQueryExecutor.Execute(() =>
            {
                return _connectionProvider.DoInTransaction(() =>
                {
                    String checkStampQuery = string.Format(CultureInfo.InvariantCulture, "SELECT {0} FROM {1} u " +
                                                           "WHERE u.Id = @Id AND u.stamp = @Stamp LIMIT 1", SelectFieldList, TableName);
                    User userCheck = _connectionProvider.CurrentConnection.Query <User>(checkStampQuery, new { user.Id, user.Stamp }).FirstOrDefault();

                    if (userCheck == null)
                    {
                        String checkUserQuery = string.Format(CultureInfo.InvariantCulture, "SELECT {0} FROM {1} u " +
                                                              "WHERE u.Id = @Id LIMIT 1", SelectFieldList, TableName);
                        userCheck = _connectionProvider.CurrentConnection.Query <User>(checkUserQuery, new { user.Id }).FirstOrDefault();
                        return userCheck == null ? UpdateResult.ItemNotExists : UpdateResult.Stalled;
                    }

                    String query = string.Format(CultureInfo.InvariantCulture, "UPDATE {1} SET {0} WHERE Id=@Id", UpdateFieldList, TableName);
                    _connectionProvider.CurrentConnection.Execute(query, new { user.Email, user.Name, user.Password, user.Locale, user.TimeZone, user.Id });

                    String idAndStampQuery = string.Format(CultureInfo.InvariantCulture, "SELECT id AS Id, stamp AS Stamp FROM {0} WHERE id=@Id;", TableName);
                    IdAndStamp idAndStamp = _connectionProvider.CurrentConnection.Query <IdAndStamp>(idAndStampQuery, new { user.Id }).FirstOrDefault();

                    if (idAndStamp == null)
                    {
                        throw new MonsterDbException("User update failed");
                    }

                    user.Id = idAndStamp.Id;
                    user.Stamp = idAndStamp.Stamp;
                    return UpdateResult.Success;
                });
            }));
        }
Exemple #4
0
        public UpdateResult CreateRoleForUser(string userEmail, string role, DateTime stamp)
        {
            return(SqlQueryExecutor.Execute(() =>
            {
                return _connectionProvider.DoInTransaction(() =>
                {
                    UpdateResult result = UpdateResult.Success;
                    const string selectQuery = "SELECT count(ur.id) FROM user_roles ur " +
                                               "INNER JOIN users u ON ur.user_id = u.id " +
                                               "WHERE u.email = @Email AND ur.role = @Role AND u.stamp = @Stamp;";

                    long rolesCount = _connectionProvider.CurrentConnection.Query <long>(selectQuery, new { Email = userEmail, Role = role, Stamp = stamp }).FirstOrDefault();

                    if (rolesCount <= 0)
                    {
                        const string selectUserQueryWithStamp = "SELECT u.id FROM users u WHERE u.email = @Email AND u.stamp = @Stamp LIMIT 1;";
                        int?userId = _connectionProvider.CurrentConnection.Query <int?>(selectUserQueryWithStamp, new { Email = userEmail, Stamp = stamp }).FirstOrDefault();
                        if (userId == null || userId.Value <= 0)
                        {//user does not exists or was updated
                            const string selectUserQuery = "SELECT u.id FROM users u WHERE u.email = @Email LIMIT 1;";
                            userId = _connectionProvider.CurrentConnection.Query <int?>(selectUserQuery, new { Email = userEmail }).FirstOrDefault();
                            if (userId == null || userId.Value <= 0)
                            {
                                result = UpdateResult.ItemNotExists; //user does not exists
                            }
                            else
                            {
                                result = UpdateResult.Stalled; //user stalled
                            }
                        }
                        else
                        {
                            string insertQuery = string.Format(CultureInfo.InvariantCulture, "INSERT INTO {0} {1}; UPDATE users SET stamp = now() WHERE id = @UserId;", TableName, InsertFieldList);
                            _connectionProvider.CurrentConnection.Execute(insertQuery, new { UserId = userId.Value, Role = role });
                        }
                    }
                    return result;
                });
            }));
        }
Exemple #5
0
        public UpdateResult SaveSettings(IDictionary <string, string> storageAccountSettingsList, int storageAccountId, DateTime storageAccountStamp)
        {
            if (storageAccountSettingsList == null)
            {
                throw new ArgumentNullException("storageAccountSettingsList");
            }

            if (storageAccountSettingsList.Count <= 0)
            {
                return(UpdateResult.Success);
            }


            return(SqlQueryExecutor.Execute(() =>
            {
                return _connectionProvider.DoInTransaction(() =>
                {
                    const string selectAccountWithStampQuery = "SELECT a.id FROM storage_accounts a WHERE a.id = @Id AND a.stamp = @Stamp LIMIT 1;";

                    int?accountIdCheck = _connectionProvider.CurrentConnection.Query <int?>(selectAccountWithStampQuery, new { Id = storageAccountId, Stamp = storageAccountStamp }).FirstOrDefault();

                    if (accountIdCheck == null)
                    {
                        const string selectAccountQueryWithoutStamp = "SELECT a.id FROM storage_accounts a WHERE a.id = @Id LIMIT 1;";
                        accountIdCheck = _connectionProvider.CurrentConnection.Query <int?>(selectAccountQueryWithoutStamp, new { Id = storageAccountId }).FirstOrDefault();
                        if (accountIdCheck == null)
                        {
                            return UpdateResult.ItemNotExists;
                        }
                        return UpdateResult.Stalled;
                    }

                    foreach (var accountSetting in storageAccountSettingsList)
                    {
                        StorageAccountSetting setting = LoadByName(accountSetting.Key, storageAccountId);
                        if (setting == null)
                        {
                            setting = new StorageAccountSetting
                            {
                                StorageAccountId = storageAccountId,
                                SettingName = accountSetting.Key,
                                SettingValue = accountSetting.Value
                            };
                            Create(setting);
                        }
                        else
                        {
                            setting.SettingName = accountSetting.Key;
                            setting.SettingValue = accountSetting.Value;
                            Update(setting);
                        }
                    }

                    const string insertQuery = "UPDATE storage_accounts SET stamp = now() WHERE id = @Id;";
                    _connectionProvider.CurrentConnection.Execute(insertQuery, new { Id = storageAccountId });


                    return UpdateResult.Success;
                });
            }));
        }