Automation administration dashboard

* Manual automations
* Scheduled automations
* Incoming webhook triggers
* Domain-event trigger foundation
* Ordered automation steps
* Queued execution
* Run status and execution history
* Per-step execution logs
* Continue-or-stop-on-failure control
* Email actions
* Outgoing webhook actions
* Application log actions
* Delay actions
* Secure incoming webhook secrets
* Automation trigger and action registries
* Extensible action and trigger contracts
* Scheduled automation Artisan command
* Administration navigation
* Automation permissions
* Module registration and boot test
This commit is contained in:
Mark Gregory
2026-07-24 12:38:06 +01:00
parent 7fb71c4d24
commit bf37548faa
25 changed files with 389 additions and 1 deletions
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace Modules\Automation\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
final class Automation extends Model
{
protected $fillable=['name','description','trigger_type','trigger_config','status','stop_on_failure','run_count','last_ran_at','next_run_at','created_by'];
protected $casts=['trigger_config'=>'array','stop_on_failure'=>'boolean','last_ran_at'=>'datetime','next_run_at'=>'datetime'];
public function steps(): HasMany { return $this->hasMany(AutomationStep::class)->orderBy('position'); }
public function runs(): HasMany { return $this->hasMany(AutomationRun::class); }
public function isActive(): bool { return $this->status === 'active'; }
}
@@ -0,0 +1,12 @@
<?php
namespace Modules\Automation\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
final class AutomationRun extends Model
{
protected $fillable=['automation_id','execution_id','trigger_type','payload','status','current_step','error','started_at','finished_at'];
protected $casts=['payload'=>'array','started_at'=>'datetime','finished_at'=>'datetime'];
public function automation(): BelongsTo { return $this->belongsTo(Automation::class); }
public function logs(): HasMany { return $this->hasMany(AutomationRunLog::class); }
}
@@ -0,0 +1,9 @@
<?php
namespace Modules\Automation\Models;
use Illuminate\Database\Eloquent\Model;
final class AutomationRunLog extends Model
{
public $timestamps=false;
protected $fillable=['automation_run_id','automation_step_id','level','message','context','created_at'];
protected $casts=['context'=>'array','created_at'=>'datetime'];
}
@@ -0,0 +1,10 @@
<?php
namespace Modules\Automation\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
final class AutomationStep extends Model
{
protected $fillable=['automation_id','position','action_type','name','configuration','is_enabled'];
protected $casts=['configuration'=>'array','is_enabled'=>'boolean'];
public function automation(): BelongsTo { return $this->belongsTo(Automation::class); }
}