This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user