radfusion/app/Services/Pacs/OrthancRestClient.php
2025-01-19 10:10:18 +06:00

77 lines
2.4 KiB
PHP

<?php
namespace App\Services\Pacs;
use App\Models\DicomServer;
use GuzzleHttp\Client;
final class OrthancRestClient
{
public function __construct(private readonly DicomServer $orthancHost) {}
public function getClient(): Client
{
$endpoint = $this->orthancHost->rest_api_endpoint;
return new Client([
'base_uri' => $endpoint,
// 'base_uri' => config('pacs.api.endpoint'),
]);
}
public function getStudyStatistics(string $study_id): array
{
$response = $this->getClient()->get('/studies/' . $study_id . '/statistics');
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getServerStatistics(): array
{
$response = $this->getClient()->get('/statistics');
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getStudySeries(string $study_id): array
{
$response = $this->getClient()->get('/studies/' . $study_id . '/series?expand');
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getStudyInstances(string $study_id): array
{
$response = $this->getClient()->get('/studies/' . $study_id . '/instances?expand');
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getStudyDetails(string $study_id): array
{
$query = [
'requested-tags' => implode(';', array_column(DicomTags::cases(), 'value')),
];
$response = $this->getClient()->get('/studies/' . $study_id . '?' . http_build_query($query));
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getStudies(): array
{
$query = [
'expand' => '1',
'requested-tags' => implode(';', array_column(DicomTags::cases(), 'value')),
];
$url = '/studies?' . http_build_query($query);
$response = $this->getClient()->get($url);
return json_decode($response->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
public function getStudiesIds(): array
{
return json_decode($this->getClient()->get('/studies')->getBody()->getContents(), true, 512, JSON_THROW_ON_ERROR);
}
}