Add a basic singleton to save on queries.

This commit is contained in:
James Cole
2025-08-08 15:44:15 +02:00
parent aaffc125e7
commit 73512b0365
3 changed files with 85 additions and 31 deletions

View File

@@ -29,9 +29,9 @@ use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\UserGroup;
use FireflyIII\Support\Facades\Preferences;
use FireflyIII\Support\Singleton\PreferencesSingleton;
use FireflyIII\User;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
use NumberFormatter;
/**
@@ -116,11 +116,20 @@ class Amount
public function convertToPrimary(?User $user = null): bool
{
$instance = PreferencesSingleton::getInstance();
$pref = $instance->getPreference('convert_to_primary');
if (null === $pref) {
if (!$user instanceof User) {
return true === Preferences::get('convert_to_primary', false)->data && true === config('cer.enabled');
$res = true === Preferences::get('convert_to_primary', false)->data && true === config('cer.enabled');
$instance->setPreference('convert_to_primary', $res);
return $res;
}
return true === Preferences::getForUser($user, 'convert_to_primary', false)->data && true === config('cer.enabled');
$res = true === Preferences::getForUser($user, 'convert_to_primary', false)->data && true === config('cer.enabled');
$instance->setPreference('convert_to_primary', $res);
return $res;
}
return $pref;
}
public function getPrimaryCurrency(): TransactionCurrency
@@ -316,9 +325,9 @@ class Amount
}
if ($csPrecedes) {
return $posA.$posB.'%s'.$posC.$space.$posD.'%v'.$posE;
return $posA . $posB . '%s' . $posC . $space . $posD . '%v' . $posE;
}
return $posA.$posD.'%v'.$space.$posB.'%s'.$posC.$posE;
return $posA . $posD . '%v' . $space . $posB . '%s' . $posC . $posE;
}
}

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Support;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Preference;
use FireflyIII\Support\Singleton\PreferencesSingleton;
use FireflyIII\User;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Contracts\Encryption\EncryptException;
@@ -283,6 +284,12 @@ class Preferences
*/
public function lastActivity(): string
{
$instance = PreferencesSingleton::getInstance();
$pref = $instance->getPreference('last_activity');
if(null !== $pref) {
// Log::debug(sprintf('Found last activity in singleton: %s', $pref));
return $pref;
}
$lastActivity = microtime();
$preference = $this->get('lastActivity', microtime());
@@ -292,13 +299,16 @@ class Preferences
if (is_array($lastActivity)) {
$lastActivity = implode(',', $lastActivity);
}
return hash('sha256', (string) $lastActivity);
$setting = hash('sha256', (string) $lastActivity);
$instance->setPreference('last_activity', $setting);
return $setting;
}
public function mark(): void
{
$this->set('lastActivity', microtime());
$instance = PreferencesSingleton::getInstance();
$instance->setPreference('last_activity', microtime());
Session::forget('first');
}

View File

@@ -0,0 +1,35 @@
<?php
namespace FireflyIII\Support\Singleton;
class PreferencesSingleton
{
private static ?PreferencesSingleton $instance = null;
private array $preferences = [];
private function __construct()
{
// Private constructor to prevent direct instantiation.
}
public static function getInstance(): PreferencesSingleton
{
if (self::$instance === null) {
self::$instance = new PreferencesSingleton();
}
return self::$instance;
}
public function setPreference(string $key, mixed $value): void
{
$this->preferences[$key] = $value;
}
public function getPreference(string $key): mixed
{
return $this->preferences[$key] ?? null;
}
}