Новые эндпоинты
All checks were successful
Build And Push / publish (push) Successful in 1m34s

This commit is contained in:
2025-09-29 08:30:36 +03:00
parent d15666d0e8
commit aed85d5201
3 changed files with 156 additions and 7 deletions

View File

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from json import dumps from json import dumps
from logging import getLogger from logging import getLogger
from typing import Annotated, Any from typing import Annotated
from fastapi import APIRouter, Body, Depends, status from fastapi import APIRouter, Body, Depends, status
@ -23,11 +23,30 @@ router = APIRouter(
@router.get('/getProfile', response_model=s.ProfileModel) @router.get('/getProfile', response_model=s.ProfileModel)
async def get_profile(): async def get_profile():
"""
Get profile of user by id.
"""
return await c.vitacore_api.getProfile( return await c.vitacore_api.getProfile(
'b62e9f22-a871-4c52-96d6-559c707a716d' 'b62e9f22-a871-4c52-96d6-559c707a716d'
) )
@router.get('/getDepartments', response_model=list[s.DepartmentModel])
async def get_departments():
"""
Get list of departments.
"""
return await c.vitacore_api.getDepartments()
@router.get('/getWorkers', response_model=s.WorkersModel)
async def get_workers(departmentId: str):
"""
Get list of workers by department id.
"""
return await c.vitacore_api.getWorkers(departmentId)
@router.get('/getSpecs') @router.get('/getSpecs')
async def get_specs(): async def get_specs():
return mock.specs return mock.specs
@ -92,12 +111,6 @@ async def queue(user: Annotated[bool, Depends(login)]):
} }
@router.get('/getDepartments')
async def get_departments():
data: dict[Any, Any] = {}
return data
@router.get('/findPat') @router.get('/findPat')
async def find_pat(user: Annotated[str, Depends(login)]): async def find_pat(user: Annotated[str, Depends(login)]):
return mock.findpat[0] return mock.findpat[0]

View File

@ -26,3 +26,27 @@ class VITACORE_API(AsyncClient):
case _: case _:
self.logger.error(req.json()) self.logger.error(req.json())
raise e.UnknownException raise e.UnknownException
async def getDepartments(self):
req = await self.get('/getDepartments')
match req.status_code:
case st.HTTP_200_OK:
return [
s.DepartmentModel.model_validate(i) for i in req.json()
]
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getWorkers(self, departmentId: str):
req = await self.get(
'/getWorkers', params={'departmentId': departmentId}
)
match req.status_code:
case st.HTTP_200_OK:
return s.WorkersModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException

View File

@ -1,3 +1,5 @@
from datetime import datetime
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@ -62,3 +64,113 @@ class ProfileModel(BaseModel):
trustedPersons: list[TrustedPersonModel] = Field( trustedPersons: list[TrustedPersonModel] = Field(
title='Информация о представителе', title='Информация о представителе',
) )
class DepartmentAddressModel(BaseModel):
type: str = Field(
title='для МО: «Юридический», для филиалов «Фактический»',
examples=['«Юридический»'],
)
display: str = Field(
title='Адрес строкой',
examples=['420097, г.Казань, ул.Заслонова, д.5'],
)
latitude: float | None = Field(
title='Широта, при наличии', examples=[55.789], default=None
)
longitude: float | None = Field(
title='Долгота, при наличии', examples=[37.789], default=None
)
class DepartmentModel(BaseModel):
id: str = Field(
title='Идентификатор МО/Филиала',
examples=['a3677271-3385-4f27-a65d-c3430b7c61c2'],
)
OID: str = Field(
title='OID МО / Филиала', examples=['1.2.643.5.1.13.13.12.2.16.1084']
)
parentId: str | None = Field(
title='Идентификатор вышестоящего подразделения',
examples=['a3677271-3385-4f27-a65d-c3430b7c61c2'],
)
code: str = Field(
title='Региональный код или код ТФОМС',
examples=['0000000000'],
)
fullname: str = Field(
title='Полное наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
shortname: str = Field(
title='Краткое наименование',
examples=['ГБУЗС "Тестовая медицинская организация"'],
)
type: str = Field(
title='Тип подразделения (для МО: «Юридический»'
', для филиалов: Стационар / Поликлиника / ФАП / Амбулатория)',
examples=['Юридическое лицо'],
)
inn: str = Field(title='ИНН', examples=['0000000000'])
kpp: str = Field(title='КПП', examples=['0000000000'])
ogrn: str = Field(title='ОГРН', examples=['1149204047816'])
address: list[DepartmentAddressModel]
class WorkersPositionModel(BaseModel):
id: str = Field(
title='Идентификатор сотрудника в связке с должностью',
examples=['41019'],
)
dateBegin: datetime = Field(
title='Дата приёма на работу', examples=['01.08.2022']
)
departmentId: str = Field(
title='ID ФИЛИАЛА',
examples=['10ea04ca-339a-4867-aab4-d9a83b7e9098'],
)
departmentName: str = Field(
title='Краткое наименование филиала',
examples=['Поликлиника'],
)
positionName: str = Field(
title='Тип должности.Наименование (POST_TYPE)',
examples=['Врач-онколог'],
)
positionFedCode: str = Field(
title='Тип должности.Код (POST_TYPE)',
examples=['3037'],
)
positionRegName: str | None = Field(
title='ФРМР. Должности медицинского персонала',
examples=['врач-онколог'],
)
positionSpecialityCode: str = Field(
title='Код специальности по V021',
examples=['41'],
)
positionSpecialityName: str = Field(
title='Наименование специальности по V021',
examples=['Онкология'],
)
rate: float = Field(
title='Ставка',
examples=[0.5],
)
class WorkersModel(BaseModel):
id: str = Field(
title='Идентификатор сотрудника',
examples=['dc911302-5044-46f4-b935-c6ffd85eb68f'],
)
SNILS: str = Field(
title='СНИЛС',
examples=['059-486-659 26'],
)
firstName: str = Field(title='Имя', examples=['Владимир'])
lastName: str = Field(title='Фамилия', examples=['Камашев'])
middleName: str = Field(title='Отчество', examples=['Михайлович'])
birthDate: datetime = Field(title='Дата рождения', examples=['30.05.1961'])
positions: list[WorkersPositionModel]