Optimise queries for rendering the about page
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
@@ -10,6 +11,18 @@ use App\Models\{Address,Domain,Zone};
|
||||
|
||||
class DomainController extends Controller
|
||||
{
|
||||
/**
|
||||
* Daily stats as shown on the about page
|
||||
*
|
||||
* @param Domain $o
|
||||
* @return Collection
|
||||
*/
|
||||
public function api_daily_stats(Request $request): Collection
|
||||
{
|
||||
$do = Domain::where('name',$request->name)->firstOrFail();
|
||||
return $do->daily_area_stats();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add or edit a domain
|
||||
*/
|
||||
|
@@ -139,10 +139,16 @@ class Domain extends Model
|
||||
->get();
|
||||
}
|
||||
|
||||
public function isManaged(): bool
|
||||
{
|
||||
return our_address()->pluck('zone.domain')->pluck('id')->contains($this->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if this zone is managed by this host
|
||||
*
|
||||
* @return bool
|
||||
* @deprecated use self::isManaged();
|
||||
*/
|
||||
public function managed(): bool
|
||||
{
|
||||
|
@@ -84,7 +84,6 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
->get();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* See if the user is already a member of the chosen network
|
||||
*
|
||||
@@ -103,6 +102,7 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
*/
|
||||
public function isZC(): bool
|
||||
{
|
||||
$this->load(['systems.addresses']);
|
||||
return $this->zc()->count() > 0;
|
||||
}
|
||||
|
||||
|
@@ -91,16 +91,26 @@ if (! function_exists('hexstr')) {
|
||||
*/
|
||||
function our_address(Domain $do=NULL,Address $ao=NULL): Collection|Address|NULL
|
||||
{
|
||||
$our = Setup::findOrFail(config('app.id'))->system->akas;
|
||||
static $so = NULL;
|
||||
static $our = NULL;
|
||||
|
||||
if (! $so)
|
||||
$so = Setup::findOrFail(config('app.id'));
|
||||
|
||||
if (! $our) {
|
||||
$so->load(['system.akas.zone.domain']);
|
||||
$our = $so->system->akas;
|
||||
}
|
||||
|
||||
$filter = $our;
|
||||
if ($do)
|
||||
$our = $our->filter(function($item) use ($do) { return $item->zone->domain_id === $do->id; })->sortBy('role');
|
||||
$filter = $our->filter(function($item) use ($do) { return $item->zone->domain_id === $do->id; })->sortBy('role');
|
||||
|
||||
// If we are looking for a specific address, and there is only 1 result, return it, otherwise return what we have
|
||||
if ($ao && config('fido.strict') && ($x=$our->filter(function($item) use ($ao) { return $item->role <= $ao->role; })->sortBy('role'))->count())
|
||||
if ($ao && config('fido.strict') && ($x=$filter->filter(function($item) use ($ao) { return $item->role <= $ao->role; })->sortBy('role'))->count())
|
||||
$our = $x;
|
||||
|
||||
return $ao ? $our->last() : $our;
|
||||
return $ao ? $our->last() : ($do ? $filter : $our);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user