diff --git a/app/Models/Address.php b/app/Models/Address.php index 3d1b50b..60f37c0 100644 --- a/app/Models/Address.php +++ b/app/Models/Address.php @@ -8,13 +8,12 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\QueryException; -use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use App\Classes\FTN\{Message,Packet}; use App\Exceptions\InvalidFTNException; -use App\Traits\ScopeActive; +use App\Traits\{QueryCacheableConfig,ScopeActive}; /** * This represents an FTN AKA. @@ -39,8 +38,8 @@ use App\Traits\ScopeActive; class Address extends Model { - use ScopeActive,SoftDeletes; - const CACHE_KEY = 15; + use QueryCacheableConfig,ScopeActive,SoftDeletes; + const CACHE_KEY = 0; private const LOGKEY = 'MA-'; @@ -798,39 +797,37 @@ class Address extends Model */ public function children(): Collection { - return Cache::remember(sprintf('children-%d',$this->id),self::CACHE_KEY,function() { - // If we are a point, our parent is the boss - switch ($this->role_id) { - case self::NODE_NN: // Normal Nodes -> Points - return $this->nodes_point; + // If we are a point, our parent is the boss + switch ($this->role_id) { + case self::NODE_NN: // Normal Nodes -> Points + return $this->nodes_point; - case self::NODE_HC: // Hubs -> Normal Nodes - return $this->nodes_hub; + case self::NODE_HC: // Hubs -> Normal Nodes + return $this->nodes_hub; - case self::NODE_NC: // Nets -> Normal Nodes, excluding Hub's Nodes - return $this->nodes_net->diff($this - ->nodes_net - ->filter(function($item) { return $item->role_id === Address::NODE_HC; }) - ->transform(function($item) { return $item->children(); }) - ->flatten()); + case self::NODE_NC: // Nets -> Normal Nodes, excluding Hub's Nodes + return $this->nodes_net->diff($this + ->nodes_net + ->filter(function($item) { return $item->role_id === Address::NODE_HC; }) + ->transform(function($item) { return $item->children(); }) + ->flatten()); - case self::NODE_RC: // Regions, excluding NC's Nodes - return $this->nodes_region->diff($this - ->nodes_region - ->filter(function($item) { return $item->role_id === Address::NODE_NC; }) - ->transform(function($item) { return $item->nodes_net; }) - ->flatten()); + case self::NODE_RC: // Regions, excluding NC's Nodes + return $this->nodes_region->diff($this + ->nodes_region + ->filter(function($item) { return $item->role_id === Address::NODE_NC; }) + ->transform(function($item) { return $item->nodes_net; }) + ->flatten()); - case self::NODE_ZC: // Zones, excluding RC's Nodes - return $this->nodes_zone->diff($this - ->nodes_zone - ->filter(function($item) { return $item->role_id === Address::NODE_RC; }) - ->transform(function($item) { return $item->nodes_region; }) - ->flatten()); - } + case self::NODE_ZC: // Zones, excluding RC's Nodes + return $this->nodes_zone->diff($this + ->nodes_zone + ->filter(function($item) { return $item->role_id === Address::NODE_RC; }) + ->transform(function($item) { return $item->nodes_region; }) + ->flatten()); + } - return new Collection; - }); + return new Collection; } /** @@ -943,38 +940,36 @@ class Address extends Model */ private function ftn_role(): ?int { - return Cache::remember(sprintf('ftn_role-%d',$this->id),self::CACHE_KEY,function() { - $role = NULL; + $role = NULL; - // If we have a point address, we're a point - if ($this->point_id) - $role = self::NODE_POINT; + // If we have a point address, we're a point + if ($this->point_id) + $role = self::NODE_POINT; - // If we have a node_id, we're either a Node or a Hub - elseif ($this->node_id) { - $role = ($this->nodes_hub->count()) - ? self::NODE_HC - : ((($this->role & Address::NODE_ALL) === self::NODE_HC) ? self::NODE_HC : self::NODE_NN); + // If we have a node_id, we're either a Node or a Hub + elseif ($this->node_id) { + $role = ($this->nodes_hub->count()) + ? self::NODE_HC + : ((($this->role & Address::NODE_ALL) === self::NODE_HC) ? self::NODE_HC : self::NODE_NN); - // point_id and node_id are zero - // If our region_id !== host_id, and are not zero, and node_id/point_id === 0, we are an NC - } elseif (($this->region_id !== $this->host_id) && $this->host_id) { - $role = self::NODE_NC; + // point_id and node_id are zero + // If our region_id !== host_id, and are not zero, and node_id/point_id === 0, we are an NC + } elseif (($this->region_id !== $this->host_id) && $this->host_id) { + $role = self::NODE_NC; - // point_id and node_id are zero - } elseif (($this->region_id === $this->host_id) && $this->host_id) { - $role = self::NODE_RC; + // point_id and node_id are zero + } elseif (($this->region_id === $this->host_id) && $this->host_id) { + $role = self::NODE_RC; - // point_id and node_id are zero - } elseif (($this->region_id === $this->host_id) && (! $this->host_id)) { - $role = self::NODE_ZC; - } + // point_id and node_id are zero + } elseif (($this->region_id === $this->host_id) && (! $this->host_id)) { + $role = self::NODE_ZC; + } - if (is_null($role)) - Log::alert(sprintf('%s:! Address ROLE [%d] could not be determined for [%s]',self::LOGKEY,($this->role & Address::NODE_ALL),$this->ftn)); + if (is_null($role)) + Log::alert(sprintf('%s:! Address ROLE [%d] could not be determined for [%s]',self::LOGKEY,($this->role & Address::NODE_ALL),$this->ftn)); - return $role; - }); + return $role; } /** diff --git a/app/Models/Domain.php b/app/Models/Domain.php index 3e44ff2..87dfb34 100644 --- a/app/Models/Domain.php +++ b/app/Models/Domain.php @@ -12,11 +12,11 @@ use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use App\Casts\CompressedString; -use App\Traits\ScopeActive; +use App\Traits\{QueryCacheableConfig,ScopeActive}; class Domain extends Model { - use HasFactory,ScopeActive; + use HasFactory,QueryCacheableConfig,ScopeActive; private const CACHE_TIME = 3600; private const STATS_MONTHS = 6; diff --git a/app/Models/Echomail.php b/app/Models/Echomail.php index d45ed7f..b1124a5 100644 --- a/app/Models/Echomail.php +++ b/app/Models/Echomail.php @@ -12,11 +12,11 @@ use Illuminate\Support\Facades\Log; use App\Casts\{CollectionOrNull,CompressedString}; use App\Classes\FTN\Message; use App\Interfaces\Packet; -use App\Traits\{EncodeUTF8,MsgID,ParseAddresses}; +use App\Traits\{EncodeUTF8,MsgID,ParseAddresses,QueryCacheableConfig}; final class Echomail extends Model implements Packet { - use SoftDeletes,EncodeUTF8,MsgID,ParseAddresses; + use SoftDeletes,EncodeUTF8,MsgID,ParseAddresses,QueryCacheableConfig; private const LOGKEY = 'ME-'; private Collection $set_seenby; diff --git a/app/Models/Zone.php b/app/Models/Zone.php index 106c612..c819e88 100644 --- a/app/Models/Zone.php +++ b/app/Models/Zone.php @@ -4,11 +4,11 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; -use App\Traits\ScopeActive; +use App\Traits\{QueryCacheableConfig,ScopeActive}; class Zone extends Model { - use ScopeActive; + use QueryCacheableConfig,ScopeActive; /* SCOPES */ diff --git a/app/Traits/QueryCacheableConfig.php b/app/Traits/QueryCacheableConfig.php new file mode 100644 index 0000000..4c4dcae --- /dev/null +++ b/app/Traits/QueryCacheableConfig.php @@ -0,0 +1,17 @@ +