mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-01 05:56:16 +00:00
init
This commit is contained in:
83
app/Models/GitHook.php
Executable file
83
app/Models/GitHook.php
Executable file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Exceptions\FailedToDeployGitHook;
|
||||
use Exception;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* @property int $site_id
|
||||
* @property int $source_control_id
|
||||
* @property string $secret
|
||||
* @property array $events
|
||||
* @property array $actions
|
||||
* @property string $hook_id
|
||||
* @property array $hook_response
|
||||
* @property Site $site
|
||||
* @property SourceControl $sourceControl
|
||||
*/
|
||||
class GitHook extends AbstractModel
|
||||
{
|
||||
protected $fillable = [
|
||||
'site_id',
|
||||
'source_control_id',
|
||||
'secret',
|
||||
'events',
|
||||
'actions',
|
||||
'hook_id',
|
||||
'hook_response',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'site_id' => 'integer',
|
||||
'source_control_id' => 'integer',
|
||||
'events' => 'array',
|
||||
'actions' => 'array',
|
||||
'hook_response' => 'json',
|
||||
];
|
||||
|
||||
public function site(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Site::class);
|
||||
}
|
||||
|
||||
public function sourceControl(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(SourceControl::class);
|
||||
}
|
||||
|
||||
public function scopeHasEvent(Builder $query, string $event): Builder
|
||||
{
|
||||
return $query->where('events', 'like', "%\"{$event}\"%");
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws FailedToDeployGitHook
|
||||
*/
|
||||
public function deployHook(): void
|
||||
{
|
||||
$this->update(
|
||||
$this->sourceControl->provider()->deployHook($this->site->repository, $this->events, $this->secret)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function destroyHook(): void
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$this->sourceControl->provider()->destroyHook($this->site->repository, $this->hook_id);
|
||||
$this->delete();
|
||||
DB::commit();
|
||||
} catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user