# Eridos
## spec
- single detection includes one photo
- demo photos are a special screen
- photo is recognized right after adding
- OKT is implemented the same as retina, but with different endpoint (category model)
- photo report is functionally the same in portrait/landscape
- "add detection" screen is opened from detections screen
- "detections" screen is detail screen opened from category menu
- "retinopaty button" in menu opens another detail "detections screen"?
## android ui
- login screen
- logo
- email input
- password input
- forgotten password link
- login button
- signup button
- signup screen
- email input
- password input
- city input
- country dropdown
- name input
- surname input
- patronim input
- occupation dropdown
- promocode input
- signup button
- menu screen
- profile button
- review button
- retinopathy button
- OKT button
- profile screen
- name
- about me
- country
- city
- email
- occupation
- position
- organization
- exit button
- review screen
- stars
- feedback form
- star rating
- textbox
- submit button
- reviews list
- card
- stars
- name
- review
- date
- add detection menu screen
- open file
- take picture
- open demo picture
- detections screen (portrait)
- exit button
- photos gallery
- detection screen (landscape)
- (center) photo
- view toggle (raw/processed)
- left arrow button
- right arrow button
- (right) recognitions, list
- recognition card
- circle with color
- label
- (left) conclusions, list
- conclusion card
- label
- status label (found/notfound)
- chart card
- label
- chart
- button link to full report
## ios UI
- login screen
- logo
- email input
- password input
- forgotten password link
- submit button
- signup button
- signup screen
- email input
- password input
- city input
- country dropdown
- name input
- surname input
- patronim input
- occupation dropdown
- promocode input
- submit button
- category screen
- (top left) logout button to login screen
- (top right) profile button
- retinopathy category navigation item
- OKT category navigation item
- retinopathy/OKT detail screen
- add from gallery button
- take picture button
- add demo button
- list of detections
- back button to menu screen
- photo screen
- back button to detection screen
- (left) photo
- (botton center) view toggle (raw/processed)
- (top center) left arrow button
- (top center) right arrow button
- (right) report button (show/hide)
- (right) report sidebar
- (top) tab panel
- recognitions tab
- conclusions tab
- recognitions, list
- recognition card
- circle with color
- label
- conclusions, list
- conclusion card
- label
- status label (found/notfound)
- chart card
- label
- chart
- button link to full report
- profile screen
- name
- about me
- country
- city
- email
- occupation
- position
- organization
- back button to menu
## API
Все контуры имеют одинаковое представление в виде списка из списков с целыми числами и имеют следующий вид:
** Обработка фундус фото
#+begin_src restclient
POST https://functions.yandexcloud.net/d4e5t0njkd4f1mb9kh5l
Content-Type: text/plain
Accept: */*
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZldHNvcm5AZ21haWwuY29tIiwiaWF0IjoxNjI3MTMxMzgyfQ.CGQgvWOCcNBeo-AxTC1ApaJZZs1OKKEsM1ublnW679y4l78qjsebAtM1hD7Or5NrckZ29DwA8qmvZoJzjSfGrMJ3NrmnTHBVIx1EIx44IwZdJNPW6zXVrpTbyVL1gNyGrLS5FKVDh48lLANojMlg8zvOkQEMrgv440GG4LZubyj1APJ8m51Qm2uC_Nn0mgv-ooKoJHAQI8YCLDpCkXv2WMOVpMxgKOBX7iKknM8IYlh3oMNtIfxG5F4VeL_nYzIwIbbAZhtnvWJm-0bTbRhBk0FGDYYd2s8e2AZGPl5S7ZDU-RFU1Jau4czpUxt2dMuhve2acsVWnNxcKStU_M7bRZ6XJL9Nebme5-7iuejF8lpd2c1wBsecbTiF75b0GSagUJx3saeOumDlnGhQ-Y6Mo4dshfkPeAcMRhgo8l0-PJrh8LfbsrSjw2ywfpIE_k-kqV9PczIemFegMEcV_yHwN9iBqkD5900tXPA2nVpTQ_zeHb8rUkXf3jXh9WzUGHjkM1NMKv5L0SlQmcnLghv0qLCrqfGWrG0MJ6ZkTXZvi12kOcKCd88nJ8Li1RKVXE0pDNg7Mm5FoqIHDai_pO_bQjDusGMbp4PFamAHMgzuxqMD6tbs-oWhINID8ywnECMTnzHVzkegPz373x02dS0eMvf435YE_tT877M7fOy8L68",
"image": ""
}
#+end_src
#+RESULTS:
#+BEGIN_SRC js
// POST https://functions.yandexcloud.net/d4e5t0njkd4f1mb9kh5l
// HTTP/1.1 401 Unauthorized
// Date: Fri, 23 Jun 2023 17:11:37 GMT
// Content-Length: 0
// Connection: keep-alive
// Access-Control-Allow-Origin: *
// Server: Yandex-Cloud-Functions/1.0
// X-Content-Type-Options: nosniff
// X-Function-Id: d4e5t0njkd4f1mb9kh5l
// X-Function-Version-Id: d4etbadc9vbndqjq61f8
// X-Request-Id: 4db12798-d24e-4062-9418-8777bdd7345a
// Request duration: 3.204405s
#+END_SRC
Адрес: https://functions.yandexcloud.net/d4e5t0njkd4f1mb9kh5l
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
token — строка — токен пользователя;
image — строка — data URL изображения в webp формате
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
Поля ответа:
exudates_in_macula — булевское значение — true — если в макуле есть экссудаты;
exudates_in_fovea — булевское значение — true — если в радиусе 500 микрон от центра макулы есть твердые экссудаты (клинически значимый макулярный отек);
height — int32 — высота изображения;
width — int32 — ширина изображения;
image — строка — data URL изображения с предобработкой;
macula — список float32 — список параметров макулы [x центра, y центра, диаметр 500 микрон от центра в пикселях, диаметр макулы в пикселях, масштаб мкм на пиксель];
hard_exudates — список списков int32 — контуры твердых экссудатов;
intraretinal_hemorrhages — список списков int32 — контуры интраретинальных кровоизлияний;
soft_exudates — список списков int32 — контуры мягких экссудатов;
fibrose — список списков int32 — контуры фиброза;
laser — список списков int32 — контуры лазерных коагулятов;
microaneurysms — список списков int32 — контуры микроаневризмов;
neovascularization — список списков int32 — контуры неоваскуляризации;
preretinal — список списков int32 — контуры преретинальных кровоизлияний;
va — список списков int32 — контуры венозных аномалий.
** Обработка ОКТ
#+begin_src restclient
POST https://functions.yandexcloud.net/d4e7i7f8odqn50mirlrm
Content-Type: text/plain
Accept: */*
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZldHNvcm5AZ21haWwuY29tIiwiaWF0IjoxNjI3MTMxMzgyfQ.CGQgvWOCcNBeo-AxTC1ApaJZZs1OKKEsM1ublnW679y4l78qjsebAtM1hD7Or5NrckZ29DwA8qmvZoJzjSfGrMJ3NrmnTHBVIx1EIx44IwZdJNPW6zXVrpTbyVL1gNyGrLS5FKVDh48lLANojMlg8zvOkQEMrgv440GG4LZubyj1APJ8m51Qm2uC_Nn0mgv-ooKoJHAQI8YCLDpCkXv2WMOVpMxgKOBX7iKknM8IYlh3oMNtIfxG5F4VeL_nYzIwIbbAZhtnvWJm-0bTbRhBk0FGDYYd2s8e2AZGPl5S7ZDU-RFU1Jau4czpUxt2dMuhve2acsVWnNxcKStU_M7bRZ6XJL9Nebme5-7iuejF8lpd2c1wBsecbTiF75b0GSagUJx3saeOumDlnGhQ-Y6Mo4dshfkPeAcMRhgo8l0-PJrh8LfbsrSjw2ywfpIE_k-kqV9PczIemFegMEcV_yHwN9iBqkD5900tXPA2nVpTQ_zeHb8rUkXf3jXh9WzUGHjkM1NMKv5L0SlQmcnLghv0qLCrqfGWrG0MJ6ZkTXZvi12kOcKCd88nJ8Li1RKVXE0pDNg7Mm5FoqIHDai_pO_bQjDusGMbp4PFamAHMgzuxqMD6tbs-oWhINID8ywnECMTnzHVzkegPz373x02dS0eMvf435YE_tT877M7fOy8L68",
"image": "a",
"type": "image/png"
}
#+end_src
#+RESULTS:
#+BEGIN_SRC js
// POST https://functions.yandexcloud.net/d4e7i7f8odqn50mirlrm
// HTTP/1.1 401 Unauthorized
// Date: Fri, 23 Jun 2023 16:13:46 GMT
// Content-Length: 0
// Connection: keep-alive
// Access-Control-Allow-Origin: *
// Server: Yandex-Cloud-Functions/1.0
// X-Content-Type-Options: nosniff
// X-Function-Id: d4e7i7f8odqn50mirlrm
// X-Function-Version-Id: d4eo02fuiulg7pqichhs
// X-Request-Id: cc93593e-6331-4698-bd79-ebd53c3d3306
// Request duration: 2.938829s
#+END_SRC
Адрес: https://functions.yandexcloud.net/d4e7i7f8odqn50mirlrm
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
token — строка — токен пользователя;
image — строка — data URL изображения в webp формате;
type — строка — тип изображения, например, image/png, image/jpeg и т.д.
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
Поля ответа:
Druzen — список списков int32 — контуры ретинальных друз;
Layer_Bruchs_membrane — список списков int32 — не используется;
Layer_Henle_fibers_outer_nuclear — список списков int32 — не используется;
Layer_RPE — список списков int32 — не используется;
Layer_RPE_and_Bruchs_membrane — список списков int32 — не используется;
Layer_ellipsoidal_zone_photoreceptors — список списков int32 — не используется;
Layer_ganglion_cells_internal_plexieforms — список списков int32 — не используется;
Layer_inner_nuclear — список списков int32 — не используется;
Layer_myoid_zone_photoreceptors — список списков int32 — не используется;
Layer_nerve_fibers — список списков int32 — не используется;
Layer_outer_boundary_membrane — список списков int32 — не используется;
Layer_outer_plexiform — список списков int32 — не используется;
Layer_outer_segments_photoreceptors — список списков int32 — не используется;
RPE_detachment — список списков int32 — контуры отслойки ретинального пигментного эпителия;
SHRM — список списков int32 — контуры субретинального гиперрефлективного материала;
epiretinal_fibrosis — список списков int32 — не используется;
full_macular_hole — список списков int32 — контуры сквозного макулярного разрыва;
height — int32 — высота изображения;
intraretinal_cyst — список списков int32 — контуры интраретинальных кист;
lamellar_macular_hole - список списков int32 — контуры ламеллярного макулярного разрыва;
subretinal_fluid — список списков int32 — контуры субретинальной жидкости;
vmt — список списков int32 — контуры витреомакулярной тракции;
width — int32 — ширина изображения;
** Регистрация
#+begin_src restclient
POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Content-Type: text/plain
{
"op": "register",
"email": "fetsor@gmail.com",
"password": "we28*3sjUBG!uB",
"first_name": "Anton",
"last_name": "Davydov",
"middle_name": "",
"country": "Georgia",
"city": "Tbilisi",
"organization": "Norcivilian Labs",
"profession": "Researcher",
"promocode": "",
"language": "en",
"domain": "com",
"name": "",
"real_name": ""
}
#+end_src
#+RESULTS:
#+BEGIN_SRC js
{
"ok": true
}
// POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
// HTTP/1.1 200 OK
// Date: Fri, 23 Jun 2023 17:09:49 GMT
// Content-Type: application/json
// Content-Length: 11
// Connection: keep-alive
// Access-Control-Allow-Origin: *
// Server: Yandex-Cloud-Functions/1.0
// X-Content-Type-Options: nosniff
// X-Function-Id: d4esr6ie5khkuno72hib
// X-Function-Version-Id: d4eh53g2gb4s7m9ugdqj
// X-Request-Id: 7da71136-efbb-47fb-9dd6-614e2ccfd5b9
// Request duration: 3.835323s
#+END_SRC
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка — всегда равна "register";
email — строка - обязательно не пустая строка, email пользователя;
password — строка - обязательно не пустая строка, пароль;
first_name — строка - обязательно не пустая строка, имя;
last_name — строка - обязательно не пустая строка, фамилия;
middle_name — строка — может быть пустой строкой, отчество;
country — строка - обязательно не пустая строка, страна, всегда на английском, выбирается из списка, который приведен ниже;
city — строка - обязательно не пустая строка, город;
organization — строка — обязательно не пустая строка, название организации;
profession — строка — обязательно не пустая строка, профессия, всегда на английском, выбирается из списка, который приведен ниже;
promocode — строка — строка с промокодом, который вводит пользователь или пустая строка, если не заполнено;
language — строка — двухбуквенный код языка (например, "ru", "en"),
domain — строка — всегда "com";
name — строка — всегда пустая строка;
real_name — стока — всегда пустая строка.
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 200 — запрос обработан успешно
Поля ответа:
ok — булевский тип — true — если регистрация успешна, false — если пользователь существует.
** Вход
#+begin_src restclient
POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Content-Type: text/plain
{
"op": "login",
"email": "fetsorn@gmail.com",
"password": "G3jbME5UTjmPRV"
}
#+end_src
#+RESULTS:
#+BEGIN_SRC js
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZldHNvcm5AZ21haWwuY29tIiwiaWF0IjoxNjI3MTMxMzgyfQ.CGQgvWOCcNBeo-AxTC1ApaJZZs1OKKEsM1ublnW679y4l78qjsebAtM1hD7Or5NrckZ29DwA8qmvZoJzjSfGrMJ3NrmnTHBVIx1EIx44IwZdJNPW6zXVrpTbyVL1gNyGrLS5FKVDh48lLANojMlg8zvOkQEMrgv440GG4LZubyj1APJ8m51Qm2uC_Nn0mgv-ooKoJHAQI8YCLDpCkXv2WMOVpMxgKOBX7iKknM8IYlh3oMNtIfxG5F4VeL_nYzIwIbbAZhtnvWJm-0bTbRhBk0FGDYYd2s8e2AZGPl5S7ZDU-RFU1Jau4czpUxt2dMuhve2acsVWnNxcKStU_M7bRZ6XJL9Nebme5-7iuejF8lpd2c1wBsecbTiF75b0GSagUJx3saeOumDlnGhQ-Y6Mo4dshfkPeAcMRhgo8l0-PJrh8LfbsrSjw2ywfpIE_k-kqV9PczIemFegMEcV_yHwN9iBqkD5900tXPA2nVpTQ_zeHb8rUkXf3jXh9WzUGHjkM1NMKv5L0SlQmcnLghv0qLCrqfGWrG0MJ6ZkTXZvi12kOcKCd88nJ8Li1RKVXE0pDNg7Mm5FoqIHDai_pO_bQjDusGMbp4PFamAHMgzuxqMD6tbs-oWhINID8ywnECMTnzHVzkegPz373x02dS0eMvf435YE_tT877M7fOy8L68",
"confirmed": true
}
// POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
// HTTP/1.1 200 OK
// Date: Fri, 23 Jun 2023 17:13:36 GMT
// Content-Type: application/json
// Content-Length: 812
// Connection: keep-alive
// Vary: Accept-Encoding
// Access-Control-Allow-Origin: *
// Server: Yandex-Cloud-Functions/1.0
// X-Content-Type-Options: nosniff
// X-Function-Id: d4esr6ie5khkuno72hib
// X-Function-Version-Id: d4eh53g2gb4s7m9ugdqj
// X-Request-Id: a5e8352a-427e-4edb-b431-c2eed849804d
// Request duration: 1.201843s
#+END_SRC
"password": "G3jbME5UTjmPRV"
"password": "we28*3sjUBG!uB"
#+RESULTS:
#+BEGIN_SRC js
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZldHNvcm5AZ21haWwuY29tIiwiaWF0IjoxNjI3MTMxMzgyfQ.CGQgvWOCcNBeo-AxTC1ApaJZZs1OKKEsM1ublnW679y4l78qjsebAtM1hD7Or5NrckZ29DwA8qmvZoJzjSfGrMJ3NrmnTHBVIx1EIx44IwZdJNPW6zXVrpTbyVL1gNyGrLS5FKVDh48lLANojMlg8zvOkQEMrgv440GG4LZubyj1APJ8m51Qm2uC_Nn0mgv-ooKoJHAQI8YCLDpCkXv2WMOVpMxgKOBX7iKknM8IYlh3oMNtIfxG5F4VeL_nYzIwIbbAZhtnvWJm-0bTbRhBk0FGDYYd2s8e2AZGPl5S7ZDU-RFU1Jau4czpUxt2dMuhve2acsVWnNxcKStU_M7bRZ6XJL9Nebme5-7iuejF8lpd2c1wBsecbTiF75b0GSagUJx3saeOumDlnGhQ-Y6Mo4dshfkPeAcMRhgo8l0-PJrh8LfbsrSjw2ywfpIE_k-kqV9PczIemFegMEcV_yHwN9iBqkD5900tXPA2nVpTQ_zeHb8rUkXf3jXh9WzUGHjkM1NMKv5L0SlQmcnLghv0qLCrqfGWrG0MJ6ZkTXZvi12kOcKCd88nJ8Li1RKVXE0pDNg7Mm5FoqIHDai_pO_bQjDusGMbp4PFamAHMgzuxqMD6tbs-oWhINID8ywnECMTnzHVzkegPz373x02dS0eMvf435YE_tT877M7fOy8L68",
"confirmed": true
}
// POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
// HTTP/1.1 200 OK
// Date: Fri, 23 Jun 2023 16:10:50 GMT
// Content-Type: application/json
// Content-Length: 812
// Connection: keep-alive
// Vary: Accept-Encoding
// Access-Control-Allow-Origin: *
// Server: Yandex-Cloud-Functions/1.0
// X-Content-Type-Options: nosniff
// X-Function-Id: d4esr6ie5khkuno72hib
// X-Function-Version-Id: d4eh53g2gb4s7m9ugdqj
// X-Request-Id: 30e14784-ed10-43d5-b08e-dded2bfba63f
// Request duration: 0.923204s
#+END_SRC
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка — всегда равна "login";
email — строка - обязательно не пустая строка;
password — строка - обязательно не пустая строка;
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
Поля ответа:
token — строка — токен пользователя
confirmed — булевский тип — true — если пользователь подтвердил email, false - если не подтвердил
** Получение информации о пользователе
#+begin_src restclient
POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Content-Type: text/plain
{
"op": "get_info",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZldHNvcm5AZ21haWwuY29tIiwiaWF0IjoxNjI3MTMxMzgyfQ.CGQgvWOCcNBeo-AxTC1ApaJZZs1OKKEsM1ublnW679y4l78qjsebAtM1hD7Or5NrckZ29DwA8qmvZoJzjSfGrMJ3NrmnTHBVIx1EIx44IwZdJNPW6zXVrpTbyVL1gNyGrLS5FKVDh48lLANojMlg8zvOkQEMrgv440GG4LZubyj1APJ8m51Qm2uC_Nn0mgv-ooKoJHAQI8YCLDpCkXv2WMOVpMxgKOBX7iKknM8IYlh3oMNtIfxG5F4VeL_nYzIwIbbAZhtnvWJm-0bTbRhBk0FGDYYd2s8e2AZGPl5S7ZDU-RFU1Jau4czpUxt2dMuhve2acsVWnNxcKStU_M7bRZ6XJL9Nebme5-7iuejF8lpd2c1wBsecbTiF75b0GSagUJx3saeOumDlnGhQ-Y6Mo4dshfkPeAcMRhgo8l0-PJrh8LfbsrSjw2ywfpIE_k-kqV9PczIemFegMEcV_yHwN9iBqkD5900tXPA2nVpTQ_zeHb8rUkXf3jXh9WzUGHjkM1NMKv5L0SlQmcnLghv0qLCrqfGWrG0MJ6ZkTXZvi12kOcKCd88nJ8Li1RKVXE0pDNg7Mm5FoqIHDai_pO_bQjDusGMbp4PFamAHMgzuxqMD6tbs-oWhINID8ywnECMTnzHVzkegPz373x02dS0eMvf435YE_tT877M7fOy8L68"
}
#+end_src
#+RESULTS:
#+BEGIN_SRC text
{"accepted_license":true,"accepted_oct_license":false,"access_level_fundus":null,"access_level_oct":null,"can_use_admin":false,"can_use_amd_dry_form_trainer":null,"can_use_clinical_classification_amd_trainer":null,"can_use_cnv_trainer":null,"can_use_dme_trainer":null,"can_use_fundus":false,"can_use_fundus_dynamic_monitoring":true,"can_use_fundus_self_test":null,"can_use_oct":false,"can_use_oct_dynamic_monitoring":true,"can_use_oct_self_test":null,"can_use_trainer":true,"city":"","confirmed":true,"country":"Russia","domain":null,"email":"fetsorn@gmail.com","first_name":"Anton","fundus_processed_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"fundus_processed_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"fundus_processed_per_year":[0],"fundus_visits_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"fundus_visits_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"fundus_visits_per_year":[0],"id":"1630146849qgUUo","language":"ru","last_activity":"2023-06-23","last_name":"Davydov","middle_name":"","name":"","oct_processed_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"oct_processed_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"oct_processed_per_year":[0],"oct_visits_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"oct_visits_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"oct_visits_per_year":[0],"organization":"fetsorn","profession":"Researcher","promocodes":[],"real_name":"Anton Davydov","reg_date":"2021-07-24","tele_token":null,"trainer_visits_per_day":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"trainer_visits_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],"trainer_visits_per_year":[1],"reviews_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reviews_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reviews_per_year":[0],"uploaded_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"uploaded_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"uploaded_per_year":[0],"reported_per_day":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reported_per_month":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"reported_per_year":[0]}
POST https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
HTTP/1.1 200 OK
Date: Fri, 23 Jun 2023 16:13:01 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 2320
Connection: keep-alive
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Server: Yandex-Cloud-Functions/1.0
X-Content-Type-Options: nosniff
X-Function-Id: d4esr6ie5khkuno72hib
X-Function-Version-Id: d4eh53g2gb4s7m9ugdqj
X-Request-Id: 504b0a3d-6556-4217-b4ad-3173d259944f
Request duration: 1.312458s
#+END_SRC
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка — всегда равна "get_info";
token — строка — токен пользователя.
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
Поля ответа:
accepted_license — булевское значение — true — если пользователь принял соглашение на использование обработки фундус фото;
accepted_oct_license — булевское значение — true — если пользователь принял соглашение на использование обработки ОКТ;
can_use_admin — булевское значение — true — если пользователь является администратором;
can_use_fundus — булевское значение — true — может использовать обработку фундус фото;
can_use_oct — булевское значение — true — может использовать обработку ОКТ;
can_use_trainer — булевское значение — true — может использовать тренажер;
city — строка — название города пользователя;
confirmed — булевский тип — true — если пользователь подтвердил email, false - если не подтвердил;
country — строка — название страны;
domain — строка — домен с которого регистрировался пользователь;
email — строка — email пользователя;
first_name — строка — имя пользователя;
fundus_processed_per_day — список int32 — кол-во обработанных фундус фото по дням;
fundus_processed_per_month — список int32 — кол-во обработанных фундус фото по месяцам;
fundus_processed_per_year — список int32 — кол-во обработанных фундус фото по годам;
fundus_visits_per_day — список int32 — кол-во посещений страницы обработки фундус фото по дням;
fundus_visits_per_month — спиосок int32 - кол-во посещений страницы обработки фундус фото по месяцам;
fundus_visits_per_year — список int32 - кол-во посещений страницы обработки фундус фото по годам;
id — строка — id пользователя в БД;
last_activity — строка — дата последней активности;
last_name — строка — фамилия пользователя;
middle_name — строка — отчество пользователя;
name — строка — имя пользователя (не используется);
oct_processed_per_day — список int32 — кол-во обработанных сканов ОКТ по дням;
oct_processed_per_month - список int32 - кол-во обработанных сканов ОКТ по месяцам;
oct_processed_per_year — список int32 - кол-во обработанных сканов ОКТ по годам;
oct_visits_per_day — список int32 - кол-во посещений страницы обработки ОКТ по дням;
oct_visits_per_month — список int32 - кол-во посещений страницы обработки ОКТ по месяцам;
oct_visits_per_year — список int32 - кол-во посещений страницы обработки ОКТ по годам;
organization — строка — название организации пользователя;
profession — строка — профессия пользователя;
promocodes — список строк — список промокодов пользователя;
real_name — строка — полное имя пользователя (не используется);
reg_date — строка — дата регистрации;
reported_per_day — список int32 — кол-во сообщений об ошибках по дням;
reported_per_month — список int32 — кол-во сообщений об ошибках по месяцам;
reported_per_year — список int32 — кол-во сообщений об ошибках по годам;
reviews_per_day — список int32 — кол-во отправленных отзывов по дням;
reviews_per_month — список int32 — кол-во отправленных отзывов по месяцам;
reviews_per_year — список int32 — кол-во отправленных отзывов по годам;
trainer_visits_per_day — список int32 — кол-во посещений тренажера по дням;
trainer_visits_per_month — список int32 — кол-во посещений тренажера по месяцам;
trainer_visits_per_year — список int32 — кол-во посещений тренажера по годам;
uploaded_per_day — список int32 — кол-во пожертвованных фото по дням;
uploaded_per_month — список int32 — кол-во пожертвованных фото по месяцам;
uploaded_per_year — список int32 — кол-во пожертвованных фото по годам.
** Отправка обратной связи
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка - всегда "problem";
token — строка — токен пользователя;
text — строка — текст сообщения об ошибке;
language — строка — двухбуквенный код языка (например, ru, en);
domain — строка — домен, всегда "com".
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
** Отправка отзыва
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка - всегда "add_review";
token — строка — токен пользователя;
text — строка — текст сообщения об ошибке;
grade — int32 — оценка от 0 до 5.
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
** Получение списка видимых отзывов
Адрес: https://functions.yandexcloud.net/d4esr6ie5khkuno72hib
Заголовки запроса:
Accept: */*
Content-Type: text/plain
Поля запроса:
op — строка - всегда "get_visible_review_list";
token — строка — токен пользователя;
Возможные ответы:
Статус 500 — ошибка сервера
Поля ответа:
info — строка — содержит описание ошибки
Статус 401 — ошибка авторизации
Статус 200 — запрос обработан успешно
Ответ представляет собой список объектов со следующими полями:
city — строка — город пользователя, написавшего отзыв;
country — строка — страна пользователя, написавшего отзыв;
first_name — строка - имя;
grade — оценка от 0 до 5;
id — строка — id отзыва в БД;
last_name — строка - фамилия;
middle_name — строка — отчество (может быть пустой строкой);
organization — строка — название организации;
profession — строка - профессия;
send_date — строка — дата отправки отзыва;
show — булевское значение — true — если отзыв надо показывать, false — если нет;
text — строка — текст отзыва;
** Список стран
Abkhazia
Afghanistan
Albania
Algeria
Andorra
Angola
Anguilla
Antigua and Barbuda
Antilles
Argentina
Armenia
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bolivia
Bosnia and Herzegovina
Botswana
Brazil
British virgin islands
Brunei
Bulgaria
Burkina Faso
Burundi
Butane
Cambodia
Cameroon
Canada
Cape Verde
Chad
Chile
China
Colombia
Congo, Democratic Republic
Congo
Cook Islands
Costa Rica
Croatia
Cuba
Cyprus
Czech
Denmark
Djibouti
Dominican Republic
Ecuador
Egypt
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Faroe Island
Fiji
Finland
France
French Polynesia
Gabon
Gambia
Georgia
Germany
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guatemala
Guernesey
Guinea-Bissau
Guinea
Guyana
Haiti
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran
Iraq
Ireland
Isle of Man
Israel
Italy
Ivory Coast
Jamaica
Japan
Jersey
Jordan
Kazakhstan
Kenya
Kuwait
Kyrgyzstan
Laos
Latvia
Lebanon
Lesotho
Liberia
Libya
Liechtenstein
Lithuania
Luxembourg
Macedonia
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Mauritania
Mauritius
Mexico
Moldova
Monaco
Mongolia
Montenegro
Morocco
Mozambique
Myanmar
Namibia
Nepal
Netherlands
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
North Korea
Norway
Oman
Pakistan
Palau
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn Islands
Poland
Portugal
Puerto Rico
Qatar
Romania
Russia
Rwanda
Réunion
Saint Kitts and Nevis
Saint Lucia
Saint Pierre and Miquelon
Saint Vincent and the Grenadines
Salvador
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Serbia
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Korea
South Ossetia
Spain
Sri Lanka
State of Palestine
Sudan
Suriname
Swaziland
Sweden
Switzerland
Syria
Taiwan
Tajikistan
Tanzania
Thailand
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
USA
Uganda
Ukraine
United Arab Emirates
United Kingdom
Uruguay
Uzbekistan
Vanuatu
Vatican
Venezuela
Vietnam
Wallis and Futuna
Western Sahara
Yemen
Zambia
Zimbabwe
** Список профессий
General Practitioner
Ophthalmologist
Endocrinologist
Optometrist
Another Doctor
Medical Representative
Healthcare Organizer
Lecturer
Student
Researcher
Other