43 lines
1.1 KiB
PHP
43 lines
1.1 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;
|
|
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);
|
|
}
|
|
}
|