Патч
All checks were successful
Build And Push / publish (push) Successful in 1m12s

This commit is contained in:
2025-11-12 12:19:30 +03:00
parent cf1324633d
commit 043de7e034
8 changed files with 76 additions and 21 deletions

View File

@ -3,6 +3,7 @@ from logging import getLogger
from fastapi import status as st
from httpx import AsyncClient, BasicAuth
from orjson import dumps, loads
from core.config import settings
from shared import exceptions as e
@ -17,16 +18,28 @@ class VITACORE_API(AsyncClient):
super().__init__(base_url=settings.VITACORE_BASE_URL)
async def get_token(self):
token = cache.get('vitacore_token')
token = await self.get_cache('vitacore_token')
if token is None:
token = await self.login()
cache.set('vitacore_token', token, 10800)
await self.set_cache(
'vitacore_token', dumps({'token': token}).decode(), 10800
)
else:
token = token.decode()
return token
return token
return token['token']
async def get_cache(self, key: str):
data = await cache.get(key)
if data:
return loads(data.decode())
return None
async def set_cache(self, key: str, value: str, ttl: int = 600):
await cache.set(key, value, ttl)
async def login(self):
req = await self.post(
@ -45,6 +58,11 @@ class VITACORE_API(AsyncClient):
raise e.UnknownException
async def findBySnils(self, snils: str):
data = await self.get_cache(f'vitacore_findBySnils:{snils}')
if data:
return s.PatientsModel.model_validate(data)
token = await self.get_token()
req = await self.get(
'/findBySnils',
@ -54,12 +72,23 @@ class VITACORE_API(AsyncClient):
match req.status_code:
case st.HTTP_200_OK:
return s.PatientsModel.model_validate(req.json())
model = s.PatientsModel.model_validate(req.json())
await self.set_cache(
f'vitacore_findBySnils:{snils}',
model.model_dump_json(),
14400,
)
return model
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getProfile(self, patId: str):
data = await self.get_cache(f'vitacore_getProfile:{patId}')
if data:
return s.ProfileModel.model_validate(data)
token = await self.get_token()
req = await self.get(
'/getProfile',
@ -69,12 +98,23 @@ class VITACORE_API(AsyncClient):
match req.status_code:
case st.HTTP_200_OK:
return s.ProfileModel.model_validate(req.json())
model = s.ProfileModel.model_validate(req.json())
await self.set_cache(
f'vitacore_getProfile:{patId}',
model.model_dump_json(),
14400,
)
return model
case _:
self.logger.error(req.json())
raise e.UnknownException
async def getDepartments(self):
data = await self.get_cache('vitacore_getDepartments')
if data:
return s.OrganizationsModel.model_validate(data)
token = await self.get_token()
req = await self.get(
'/getDepartments', headers={'Authorization': f'Bearer {token}'}
@ -82,7 +122,13 @@ class VITACORE_API(AsyncClient):
match req.status_code:
case st.HTTP_200_OK:
return s.OrganizationsModel.model_validate(req.json())
model = s.OrganizationsModel.model_validate(req.json())
await self.set_cache(
'vitacore_getDepartments',
model.model_dump_json(),
14400,
)
return model
case _:
self.logger.error(req.text)
raise e.UnknownException