radfusion/app/Services/Pacs/Sync/Pipes/InsertStudies.php
2025-01-23 14:52:34 +06:00

44 lines
1.2 KiB
PHP

<?php
namespace App\Services\Pacs\Sync\Pipes;
use App\Models\Study;
use App\Models\StudyDetails;
use App\Services\AuditTrail\Activity;
use App\Services\AuditTrail\Category;
use App\Services\Pacs\Sync\StudiesSync;
use Closure;
final readonly class InsertStudies
{
public function __invoke(StudiesSync $sync, Closure $next): StudiesSync
{
foreach ($sync->getInsertQueue() as $orthanc_uuid) {
$study = $sync->fetchStudyDetails($orthanc_uuid);
if ($study == null) {
continue;
}
$payload = $sync->transformData($study);
if (empty($payload)) {
continue;
}
$row = Study::create($payload['study']);
$payload['details']['study_id'] = $row->id;
$payload['details']['orthanc_uuid'] = $orthanc_uuid;
StudyDetails::create($payload['details']);
audit()
->by(sync_agent_id())
->category(Category::SYSTEM)
->on($row->id)
->orthanc($orthanc_uuid)
->did(Activity::Study_Create)
->log(false);
}
return $next($sync);
}
}