Cache multiple single-key user setting queries (closes #2323)

This commit is contained in:
Bernd Bestel
2023-09-01 17:02:36 +02:00
parent dde577b98b
commit 07db1f35bc

View File

@@ -67,12 +67,24 @@ class UsersService extends BaseService
} }
} }
private static $UserSettingsCache = [];
public function GetUserSetting($userId, $settingKey) public function GetUserSetting($userId, $settingKey)
{ {
if (!array_key_exists($userId, self::$UserSettingsCache))
{
self::$UserSettingsCache[$userId] = [];
}
if (array_key_exists($settingKey, self::$UserSettingsCache[$userId]))
{
return self::$UserSettingsCache[$userId][$settingKey];
}
$value = null;
$settingRow = $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->fetch(); $settingRow = $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->fetch();
if ($settingRow !== null) if ($settingRow !== null)
{ {
return $settingRow->value; $value = $settingRow->value;
} }
else else
{ {
@@ -80,19 +92,17 @@ class UsersService extends BaseService
global $GROCY_DEFAULT_USER_SETTINGS; global $GROCY_DEFAULT_USER_SETTINGS;
if (array_key_exists($settingKey, $GROCY_DEFAULT_USER_SETTINGS)) if (array_key_exists($settingKey, $GROCY_DEFAULT_USER_SETTINGS))
{ {
return $GROCY_DEFAULT_USER_SETTINGS[$settingKey]; $value = $GROCY_DEFAULT_USER_SETTINGS[$settingKey];
}
else
{
return null;
} }
} }
self::$UserSettingsCache[$userId][$settingKey] = $value;
return $value;
} }
public function GetUserSettings($userId) public function GetUserSettings($userId)
{ {
$settings = []; $settings = [];
$settingRows = $this->getDatabase()->user_settings()->where('user_id = :1', $userId)->fetchAll(); $settingRows = $this->getDatabase()->user_settings()->where('user_id = :1', $userId)->fetchAll();
foreach ($settingRows as $settingRow) foreach ($settingRows as $settingRow)
{ {
@@ -111,6 +121,12 @@ class UsersService extends BaseService
public function SetUserSetting($userId, $settingKey, $settingValue) public function SetUserSetting($userId, $settingKey, $settingValue)
{ {
if (!array_key_exists($userId, self::$UserSettingsCache))
{
self::$UserSettingsCache[$userId] = [];
}
self::$UserSettingsCache[$userId][$settingKey] = $settingValue;
$settingRow = $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->fetch(); $settingRow = $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->fetch();
if ($settingRow !== null) if ($settingRow !== null)
{ {
@@ -132,6 +148,12 @@ class UsersService extends BaseService
public function DeleteUserSetting($userId, $settingKey) public function DeleteUserSetting($userId, $settingKey)
{ {
if (!array_key_exists($userId, self::$UserSettingsCache))
{
self::$UserSettingsCache[$userId] = [];
}
unset(self::$UserSettingsCache[$userId][$settingKey]);
$this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->delete(); $this->getDatabase()->user_settings()->where('user_id = :1 AND key = :2', $userId, $settingKey)->delete();
} }