inou/portal/templates/api_ru.tmpl

130 lines
7.2 KiB
Cheetah
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{define "api_ru"}}
<style>
.ai-box { background: var(--bg-secondary); border-radius: 8px; padding: 24px; margin-bottom: 24px; }
.ai-box h2 { font-size: 1.1rem; margin: 0 0 16px 0; color: var(--accent); }
.ai-box p { margin: 8px 0; font-size: 0.9rem; }
.ai-box code { background: #2d2d2d; color: #f8f8f2; padding: 2px 6px; border-radius: 4px; font-size: 0.85rem; }
.ai-box pre { background: #2d2d2d; color: #f8f8f2; padding: 12px 16px; border-radius: 6px; font-size: 0.85rem; overflow-x: auto; margin: 8px 0; }
.guid-display { background: #2d2d2d; color: #6c6; padding: 8px 12px; border-radius: 6px; font-family: monospace; font-size: 0.9rem; margin: 8px 0; display: inline-block; }
.endpoint { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 16px 20px; margin: 16px 0; }
.endpoint .method { color: #22863a; font-weight: 600; font-size: 0.85rem; }
.endpoint .url { color: var(--accent); font-family: monospace; font-size: 0.9rem; }
.endpoint p { margin: 8px 0 0 0; font-size: 0.9rem; color: var(--text-muted); }
.note { background: #fef3cd; border-radius: 6px; padding: 12px 16px; margin: 16px 0; font-size: 0.9rem; }
</style>
<div class="page-container" style="max-width: 720px;">
<div class="page-card">
<h1>API</h1>
<p class="intro">Получай доступ к данным своего досье программно — или доверь это ИИ.</p>
</div>
{{if .Dossier}}
<div class="ai-box">
<h2>{{.T.api_token}}</h2>
{{if .APIToken}}
<p>{{.T.api_token_use}}</p>
<div style="display: flex; align-items: center; gap: 8px; margin: 8px 0;">
<input type="text" id="api-token" value="{{.APIToken}}" readonly style="flex: 1; background: #2d2d2d; color: #6c6; padding: 8px 12px; border-radius: 6px; font-family: monospace; font-size: 0.9rem; border: none;">
<button onclick="copyToken()" class="btn btn-small" style="white-space: nowrap;">{{.T.copy}}</button>
</div>
<p style="color: var(--text-muted); font-size: 0.85rem;">{{.T.api_token_warning}}</p>
<form method="POST" action="/api/token/regenerate" style="margin-top: 16px;">
<button type="submit" class="btn btn-small btn-secondary" onclick="return confirm('{{.T.api_token_regenerate_confirm}}')">{{.T.api_token_regenerate}}</button>
</form>
{{else}}
<p>{{.T.api_token_none}}</p>
<form method="POST" action="/api/token/generate" style="margin-top: 16px;">
<button type="submit" class="btn btn-primary">{{.T.api_token_generate}}</button>
</form>
{{end}}
</div>
<script>
function copyToken() {
var input = document.getElementById('api-token');
input.select();
document.execCommand('copy');
var btn = event.target;
var original = btn.textContent;
btn.textContent = '✓';
setTimeout(function() { btn.textContent = original; }, 1500);
}
</script>
{{end}}
<div class="page-card">
<h2>{{.T.api_authentication}}</h2>
<p>{{.T.api_auth_instructions}}</p>
<pre style="background: #2d2d2d; color: #f8f8f2; padding: 12px 16px; border-radius: 6px; font-size: 0.85rem; margin: 16px 0;">Authorization: Bearer YOUR_API_TOKEN</pre>
</div>
<div class="page-card">
<h2>Endpoints</h2>
<h3>Досье</h3>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers</span>
<p>Список всех досье, доступных этому аккаунту (твои собственные + те, которыми поделились с тобой).</p>
</div>
<h3>Визуализация</h3>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers/{id}/entries?category=imaging</span>
<p>Список всех исследований визуализации в досье. Возвращает ID исследования, дату, описание и количество серий.</p>
</div>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/entries/{study_id}/children</span>
<p>Список серий в исследовании. Опционально: <code>?filter=SAG</code> или <code>?filter=T1</code> для фильтрации по описанию.</p>
</div>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/entries/{series_id}/children</span>
<p>Список срезов с данными о положении (координаты в мм, ориентация, пиксельный интервал).</p>
</div>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/entries/{slice_id}?detail=full</span>
<p>Получить изображение среза в формате PNG. Опционально: <code>&amp;ww=WIDTH&amp;wc=CENTER</code> для управления окном.</p>
</div>
<h3>Геном</h3>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers/{id}/entries?category=genome</span>
<p>Список категорий геномных вариантов: медикаменты, сердечно-сосудистая система, метаболизм, фертильность, черты, долголетие.</p>
</div>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers/{id}/genome?search=MTHFR</span>
<p>Поиск геномных вариантов. Опциональные фильтры: <code>&amp;category=medication</code>, <code>&amp;rsids=rs1234,rs5678</code>, <code>&amp;min_magnitude=2</code></p>
</div>
<h3>Анализы</h3>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers/{id}/labs/tests</span>
<p>Список всех доступных названий лабораторных тестов для досье.</p>
</div>
<div class="endpoint">
<span class="method">GET</span> <span class="url">/api/v1/dossiers/{id}/labs/results?names=TSH,T4</span>
<p>Получить результаты анализов. Обязательно: <code>&amp;names=</code> (через запятую). Опционально: <code>&amp;from=2024-01-01</code>, <code>&amp;to=2024-12-31</code>, <code>&amp;latest=true</code></p>
</div>
<div class="note">
<strong>Текстовый формат:</strong> Добавь <code>&amp;format=text</code> к любому endpoint для вывода в виде простого текста, удобного для ИИ, вместо JSON.
</div>
</div>
<div class="page-card">
<h2>Пример</h2>
<pre style="background: #2d2d2d; color: #f8f8f2; padding: 16px; border-radius: 8px; font-size: 0.85rem; overflow-x: auto;"># Список твоих досье
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://inou.com/api/v1/dossiers
# Список исследований визуализации
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://inou.com/api/v1/dossiers/DOSSIER_ID/entries?category=imaging
# Поиск геномных вариантов
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://inou.com/api/v1/dossiers/DOSSIER_ID/genome?search=MTHFR</pre>
</div>
{{template "footer"}}
</div>
{{end}}