feat: implement Change resource with CRUD functionality and migration

update image tags to v0.0.8 in build scripts and docker-compose files
This commit is contained in:
jon brookes 2026-02-15 20:10:18 +00:00
parent 64a7d1d2f4
commit 5b0e55c4b2
20 changed files with 408 additions and 88 deletions

View file

@ -0,0 +1,36 @@
<?php
namespace App\Jobs;
use App\Services\ProcessUpdateService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class ProcessChangeUpdate implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*/
public function __construct(
public int $changeId,
public string $action,
public string $type = 'change_update_'
) {
//
}
/**
* Execute the job.
*/
public function handle(): void
{
Log::info("Processing change update: changeId={$this->changeId}, action={$this->action}");
(new ProcessUpdateService)->processUpdate($this->changeId, $this->action, $this->type);
}
}

View file

@ -2,16 +2,12 @@
namespace App\Jobs;
use App\Models\Entry;
use App\Services\ProcessUpdateService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\Log;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Process;
use Symfony\Component\Console\Exception\RuntimeException;
class ProcessEntryUpdate implements ShouldQueue
{
@ -20,11 +16,10 @@ class ProcessEntryUpdate implements ShouldQueue
/**
* Create a new job instance.
*/
public function __construct(
public int $entryId,
public string $action
public string $action,
public string $type = 'entry_update_'
) {
//
}
@ -34,70 +29,6 @@ class ProcessEntryUpdate implements ShouldQueue
*/
public function handle(): void
{
$subject = env('NATS_SUBJECT', 'entry_update');
$appUrl = env('APP_URL', 'http://localhost');
$incoming = [
'id' => $this->entryId,
'action' => $this->action,
'subject' => $subject,
'app_url' => $appUrl,
];
$jsonData = json_encode($incoming, JSON_THROW_ON_ERROR);
$tempFile = tempnam(sys_get_temp_dir(), 'entry_update_');
file_put_contents($tempFile, $jsonData);
$scriptPath = env('HANDLE_ENTRY_UPDATES_SCRIPT', base_path('cmd/handle_cms_updates.sh'));
try {
// Log what we're about to execute
Log::info("Executing script: {$scriptPath} with action: {$this->action}", [
'entry_id' => $this->entryId,
'temp_file' => $tempFile,
'script_exists' => file_exists($scriptPath),
'script_executable' => is_executable($scriptPath),
]);
$result = Process::run([
'bash',
$scriptPath,
$this->action,
$tempFile
]);
if ($result->failed()) {
$errorDetails = [
'exit_code' => $result->exitCode(),
'stdout' => $result->output(),
'stderr' => $result->errorOutput(),
'command' => ['bash', $scriptPath, $this->action, $tempFile],
'script_path' => $scriptPath,
'script_exists' => file_exists($scriptPath),
'temp_file_exists' => file_exists($tempFile),
'temp_file_contents' => file_exists($tempFile) ? file_get_contents($tempFile) : 'N/A',
];
Log::error("Script execution failed", $errorDetails);
throw new RuntimeException(
"Script execution failed with exit code {$result->exitCode()}. " .
"STDOUT: " . ($result->output() ?: 'empty') . " " .
"STDERR: " . ($result->errorOutput() ?: 'empty')
);
}
Log::info("Script executed successfully", [
'stdout' => $result->output(),
'entry_id' => $this->entryId,
'action' => $this->action,
]);
} finally {
// Clean up temp file
if (file_exists($tempFile)) {
unlink($tempFile);
}
}
(new ProcessUpdateService)->processUpdate($this->entryId, $this->action, $this->type);
}
}