Lance Pioch da195fd2fe
PHPstan updates (#1047)
* Not found property rule

* Make these “better”

* Day 1

* Day 2

* Day 3

* Dat 4

* Remove disabled check

* Day 4 continued

* Run pint

* Final changes hopefully

* Pint fixes

* Fix again

* Reset these

* Update app/Filament/Admin/Pages/Health.php

Co-authored-by: MartinOscar <40749467+rmartinoscar@users.noreply.github.com>

* Update app/Traits/CheckMigrationsTrait.php

Co-authored-by: MartinOscar <40749467+rmartinoscar@users.noreply.github.com>

---------

Co-authored-by: MartinOscar <40749467+rmartinoscar@users.noreply.github.com>
2025-03-03 14:41:19 -05:00

128 lines
3.2 KiB
PHP

<?php
namespace App\Models;
use App\Contracts\Validatable;
use App\Traits\HasValidation;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rules\NotIn;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
/**
* @property int $id
* @property string $uuid
* @property string $name
* @property string $description
* @property string $source
* @property string $target
* @property bool $read_only
* @property bool $user_mountable
* @property \App\Models\Egg[]|\Illuminate\Database\Eloquent\Collection $eggs
* @property \App\Models\Node[]|\Illuminate\Database\Eloquent\Collection $nodes
* @property \App\Models\Server[]|\Illuminate\Database\Eloquent\Collection $servers
*/
class Mount extends Model implements Validatable
{
use HasValidation { getRules as getValidationRules; }
/**
* The resource name for this model when it is transformed into an
* API representation using fractal.
*/
public const RESOURCE_NAME = 'mount';
/**
* Fields that are not mass assignable.
*
* @var string[]
*/
protected $guarded = ['id'];
/**
* Rules verifying that the data being stored matches the expectations of the database.
*
* @var array<array-key, string|array<array-key, string>>
*/
public static array $validationRules = [
'name' => 'required|string|min:2|max:64|unique:mounts,name',
'description' => 'nullable|string|max:255',
'source' => 'required|string',
'target' => 'required|string',
'read_only' => 'sometimes|boolean',
'user_mountable' => 'sometimes|boolean',
];
/**
* Implement language verification by overriding Eloquence's gather rules function.
*
* @return array<string|string[]>
*/
public static function getRules(): array
{
$rules = self::getValidationRules();
$rules['source'][] = new NotIn(Mount::$invalidSourcePaths);
$rules['target'][] = new NotIn(Mount::$invalidTargetPaths);
return $rules;
}
/**
* Disable timestamps on this model.
*/
public $timestamps = false;
/**
* Blacklisted source paths.
*
* @var string[]
*/
public static array $invalidSourcePaths = [
'/etc/pelican',
'/var/lib/pelican/volumes',
'/srv/daemon-data',
];
/**
* Blacklisted target paths.
*
* @var string[]
*/
public static array $invalidTargetPaths = [
'/home/container',
];
protected function casts(): array
{
return [
'id' => 'int',
'read_only' => 'bool',
'user_mountable' => 'bool',
];
}
/**
* Returns all eggs that have this mount assigned.
*/
public function eggs(): BelongsToMany
{
return $this->belongsToMany(Egg::class);
}
/**
* Returns all nodes that have this mount assigned.
*/
public function nodes(): BelongsToMany
{
return $this->belongsToMany(Node::class);
}
/**
* Returns all servers that have this mount assigned.
*/
public function servers(): BelongsToMany
{
return $this->belongsToMany(Server::class);
}
}