This commit is contained in:
2025-10-16 16:43:18 +03:00
parent cb3b138241
commit a4239a0c52
21 changed files with 524 additions and 140 deletions

View File

@ -2,9 +2,12 @@ import secrets
from logging import getLogger
from fastapi import APIRouter
from sqlmodel import select
from apps.esia.sign import get_url
from apps.users.models import User
from clients import clients as c
from database import AsyncSessionDep
from shared import exceptions as e
from shared.redis import client as cache
@ -26,7 +29,7 @@ async def login():
@router.post('/callback')
async def callback(code: str):
async def callback(session: AsyncSessionDep, code: str):
token = None
for i in range(3):
try:
@ -42,9 +45,34 @@ async def callback(code: str):
if token is None:
raise e.BadRequestException
await c.esia_api.get_user_info(token.access_token, token.id_token)
esia_user = await c.esia_api.get_user_info(
token.access_token, token.id_token
)
vita_user = await c.vitacore_api.findBySnils(esia_user.snils)
if len(vita_user.patients) == 0:
raise e.BadRequestException(detail='Patient not found')
vita_user = vita_user.patients[0]
existing_user_stmt = (
select(User).where(User.vita_id == vita_user.id).limit(1)
)
existing_user = (
await session.execute(existing_user_stmt)
).scalar_one_or_none()
if existing_user is None:
user = User(vita_id=vita_user.id)
session.add(user)
await session.commit()
await session.refresh(user)
else:
user = existing_user
access_token = secrets.token_urlsafe(32)
cache.set(access_token, access_token)
cache.set(access_token, f'user:{user.id}')
return s.Token(access_token=access_token)