Переработан эндпоинт getProfile на использование http клиента
All checks were successful
Build And Push / publish (push) Successful in 1m41s

This commit is contained in:
2025-09-26 12:27:24 +03:00
parent e218d0b130
commit bd7162b803
6 changed files with 111 additions and 2 deletions

View File

@ -6,6 +6,7 @@ from typing import Annotated, Any
from fastapi import APIRouter, Body, Depends, status from fastapi import APIRouter, Body, Depends, status
from apps.users.auth import login from apps.users.auth import login
from clients import clients as c
from shared.redis import client as cache from shared.redis import client as cache
from . import mock from . import mock
@ -95,8 +96,10 @@ async def find_pat(user: Annotated[str, Depends(login)]):
@router.get('/getProfile') @router.get('/getProfile')
async def get_profile(user: Annotated[str, Depends(login)]): async def get_profile():
return mock.profile[0] return await c.vitacore_api.getProfile(
'3c963d68-14e5-4a43-ab15-1d2d19b76398'
)
@router.get('/getHosps') @router.get('/getHosps')

View File

@ -1,8 +1,10 @@
from .esia.api import ESIA_API from .esia.api import ESIA_API
from .vitacore.api import VITACORE_API
class ClientsObject: class ClientsObject:
_esia_api = None _esia_api = None
_vitacore_api = None
@property @property
def esia_api(self): def esia_api(self):
@ -11,5 +13,12 @@ class ClientsObject:
return self._esia_api return self._esia_api
@property
def vitacore_api(self):
if not self._vitacore_api:
self._vitacore_api = VITACORE_API()
return self._vitacore_api
clients = ClientsObject() clients = ClientsObject()

View File

View File

@ -0,0 +1,28 @@
from logging import getLogger
from fastapi import status as st
from httpx import AsyncClient
from core.config import settings
from shared import exceptions as e
from . import schema as s
class VITACORE_API(AsyncClient):
def __init__(self):
self.logger = getLogger(__name__)
super().__init__(base_url=settings.VITACORE_BASE_URL)
async def findBySnils(self, snils: str):
return
async def getProfile(self, patId: str):
req = await self.get('/getProfile', params={'patId': patId})
match req.status_code:
case st.HTTP_200_OK:
return s.ProfileModel.model_validate(req.json())
case _:
self.logger.error(req.json())
raise e.UnknownException

View File

@ -0,0 +1,64 @@
from pydantic import BaseModel, Field
class TrustedPersonModel(BaseModel):
parentSnils: str = Field(
title='СНИЛС представителя', examples=['156-125-394 57']
)
represType: str = Field(
title='Вид родства (Мать/Отец/Иной родственник/Не родственник)',
examples=['Мать'],
)
fullName: str = Field(
title='ФИО представителя', examples=['Тестова Тест Тестовна']
)
phone: str = Field(
title='Мобильный телефон представителя',
examples=['+7 (999) 112-33-21'],
)
IsGuardian: bool = Field(title='Флаг Опекун', examples=['true'])
IsTrustee: bool = Field(title='Флаг Попечитель', examples=['true'])
status: bool = Field(
title='Флаг Текущий представитель',
examples=['false'],
)
class ProfileModel(BaseModel):
id: str = Field(
title='Идентификатор пациента',
examples=['b62e9f22-a871-4c52-96d6-559c707a716d'],
)
SNILS: str = Field(title='СНИЛС', examples=['000-000-600 18'])
lastName: str = Field(title='Фамилия', examples=['Тестовый'])
firstName: str = Field(title='Имя', examples=['Пациент'])
middleName: str = Field(title='Отчество', examples=['Ребенок'])
birthDate: str = Field(title='Дата рождения', examples=['2024-10-16'])
gender: str = Field(title='Пол', examples=['М'])
docType: str = Field(
title='Тип документа',
examples=['Свидетельство о рождении, выданное в РФ'],
)
docSer: str = Field(title='Серия документа', examples=['III-КБ'])
docNum: str = Field(title='Номер документа', examples=['999999'])
ENP: str = Field(
title='Единый номер полиса ОМС (16-ти значный)',
examples=['?'],
)
addressReal: str = Field(
title='Адрес проживания',
examples=[
'420000, Татарстан Респ, г.Казань, ул.Магистральная (Большие Клыки), д.1, кв.1' # noqa: E501
],
)
attachBranchId: str = Field(
title='Идентификатор СТП прикреплния',
examples=['string'],
)
attachState: str = Field(
title='Номер участка',
examples=['99'],
)
trustedPersons: list[TrustedPersonModel] = Field(
title='Информация о представителе',
)

View File

@ -51,6 +51,11 @@ class Settings(BaseSettings):
ESIA_CONTAINER_PASSWORD: str = Field(default='') ESIA_CONTAINER_PASSWORD: str = Field(default='')
ESIA_CONTAINER_THUMBPRINT: str = Field(default='') ESIA_CONTAINER_THUMBPRINT: str = Field(default='')
# Vitacore
VITACORE_BASE_URL: str = Field(
default='https://gist-cws.ezdrav.ru:8899/MP_API'
)
@model_validator(mode='after') @model_validator(mode='after')
def celery_env(self): def celery_env(self):
environ['CELERY_BROKER_URL'] = self.REDIS_URL environ['CELERY_BROKER_URL'] = self.REDIS_URL