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; })); }
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; }); })); }
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; }); })); }
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; }); })); }