id(); $table->string('target_type'); // vm, container, host, cloud_resource $table->unsignedBigInteger('target_id'); $table->string('target_name'); $table->string('scan_type'); // vulnerability, cis, pci, soc2, custom $table->string('status'); // queued, running, completed, failed $table->float('score')->nullable(); // 0-100 $table->string('grade')->nullable(); // A, B, C, D, F $table->integer('critical_count')->default(0); $table->integer('high_count')->default(0); $table->integer('medium_count')->default(0); $table->integer('low_count')->default(0); $table->integer('info_count')->default(0); $table->json('findings')->nullable(); $table->text('raw_output')->nullable(); $table->foreignId('initiated_by')->constrained('users'); $table->timestamp('started_at')->nullable(); $table->timestamp('completed_at')->nullable(); $table->timestamps(); }); Schema::create('security_scores', function (Blueprint $table) { $table->id(); $table->string('target_type'); $table->unsignedBigInteger('target_id'); $table->float('score')->default(0); $table->string('grade')->default('F'); $table->json('breakdown')->nullable(); $table->timestamp('calculated_at'); $table->timestamps(); $table->unique(['target_type', 'target_id']); }); Schema::create('security_policies', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('type'); // firewall, password, access, encryption $table->text('description')->nullable(); $table->json('rules'); $table->boolean('is_active')->default(true); $table->foreignId('created_by')->constrained('users'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('security_policies'); Schema::dropIfExists('security_scores'); Schema::dropIfExists('security_scans'); } };