TenantAtlas/apps/platform/app/Models/ProviderResourceBinding.php
Ahmed Darrazi fb2642e941
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 1m9s
feat(resources): implement provider resource identity binding
Added ProviderResourceBinding model, migrations, policies, and supporting framework for canonical resource identity mapping as defined in Spec 381.
2026-06-15 17:37:06 +02:00

84 lines
2.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models;
use App\Support\Concerns\DerivesWorkspaceIdFromTenant;
use App\Support\Resources\ProviderResourceBindingStatus;
use App\Support\Resources\ProviderResourceResolutionMode;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class ProviderResourceBinding extends Model
{
use DerivesWorkspaceIdFromTenant;
use HasFactory;
protected $guarded = [];
protected $casts = [
'binding_status' => ProviderResourceBindingStatus::class,
'resolution_mode' => ProviderResourceResolutionMode::class,
'decided_at' => 'datetime',
'ended_at' => 'datetime',
];
public function scopeActive(Builder $query): Builder
{
return $query->where('binding_status', ProviderResourceBindingStatus::Active->value);
}
public function tenant(): BelongsTo
{
return $this->belongsTo(ManagedEnvironment::class, 'managed_environment_id')->withTrashed();
}
public function managedEnvironment(): BelongsTo
{
return $this->tenant();
}
public function workspace(): BelongsTo
{
return $this->belongsTo(Workspace::class);
}
public function providerConnection(): BelongsTo
{
return $this->belongsTo(ProviderConnection::class);
}
public function sourceOperationRun(): BelongsTo
{
return $this->belongsTo(OperationRun::class, 'source_operation_run_id');
}
public function sourceBaselineSnapshot(): BelongsTo
{
return $this->belongsTo(BaselineSnapshot::class, 'source_baseline_snapshot_id');
}
public function sourceInventoryItem(): BelongsTo
{
return $this->belongsTo(InventoryItem::class, 'source_inventory_item_id');
}
public function sourcePolicyVersion(): BelongsTo
{
return $this->belongsTo(PolicyVersion::class, 'source_policy_version_id');
}
public function decidedBy(): BelongsTo
{
return $this->belongsTo(User::class, 'decided_by_user_id');
}
public function isActive(): bool
{
return $this->binding_status === ProviderResourceBindingStatus::Active;
}
}