TenantAtlas/database/seeders/PlatformUserSeeder.php
ahmido 03127a670b Spec 096: Ops polish (assignment summaries + dedupe + reconcile tracking + seed DX) (#115)
Implements Spec 096 ops polish bundle:

- Persist durable OperationRun.summary_counts for assignment fetch/restore (final attempt wins)
- Server-side dedupe for assignment jobs (15-minute cooldown + non-canonical skip)
- Track ReconcileAdapterRunsJob via workspace-scoped OperationRun + stable failure codes + overlap prevention
- Seed DX: ensure seeded tenants use UUID v4 external_id and seed satisfies workspace_id NOT NULL constraints

Verification (local / evidence-based):
- `vendor/bin/sail artisan test --compact tests/Feature/Operations/AssignmentRunSummaryCountsTest.php tests/Feature/Operations/AssignmentJobDedupeTest.php tests/Feature/Operations/ReconcileAdapterRunsJobTrackingTest.php tests/Feature/Seed/PoliciesSeederExternalIdTest.php`
- `vendor/bin/sail bin pint --dirty`

Spec artifacts included under `specs/096-ops-polish-assignment-dedupe-system-tracking/` (spec/plan/tasks/checklists).

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #115
2026-02-15 20:49:38 +00:00

42 lines
1.1 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\PlatformUser;
use App\Models\Tenant;
use App\Models\Workspace;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class PlatformUserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$workspace = Workspace::query()->firstOrCreate(
['slug' => 'default'],
['name' => 'Default Workspace', 'slug' => 'default'],
);
Tenant::query()->updateOrCreate(
['external_id' => 'platform'],
['name' => 'Platform', 'workspace_id' => (int) $workspace->getKey()],
);
PlatformUser::query()->updateOrCreate(
['email' => 'operator@tenantpilot.io'],
[
'name' => 'Platform Operator',
'password' => Hash::make('password'),
'capabilities' => [
'platform.access_system_panel',
'platform.use_break_glass',
],
'is_active' => true,
],
);
}
}