init commit
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
__all__: list[str] = []
|
||||
|
||||
# Initialize all routes
|
||||
from .routes import *
|
||||
@@ -0,0 +1,3 @@
|
||||
import fastapi
|
||||
|
||||
utils_router = fastapi.APIRouter()
|
||||
@@ -0,0 +1,78 @@
|
||||
import fastapi
|
||||
from fastapi import HTTPException
|
||||
import sqlmodel
|
||||
|
||||
from app.api.auth.deps import BearerAuth
|
||||
from app.api.auth.deps import get_current_user
|
||||
from app.api.utils.routers import utils_router
|
||||
import app.core.db
|
||||
from app.models import BasicResponse
|
||||
from app.models import User
|
||||
from app.models.base import OfdRequest
|
||||
from app.models.event import Event
|
||||
from app.models.item import Item
|
||||
from app.models.transactions import Transaction
|
||||
from app.utils.nalog import get_nalog_data
|
||||
|
||||
|
||||
@utils_router.get('/health-check')
|
||||
def health_check() -> dict[str, str]:
|
||||
return {'msg': 'healthy'}
|
||||
|
||||
|
||||
@utils_router.post(
|
||||
'/ofd',
|
||||
description='Get items info from OFD bare string',
|
||||
dependencies=[fastapi.Depends(BearerAuth())],
|
||||
responses={
|
||||
400: {'model': BasicResponse, 'description': 'Bad OFD data'},
|
||||
403: {'model': BasicResponse, 'description': 'Unauthorized'},
|
||||
404: {'model': BasicResponse, 'description': 'Event not found'},
|
||||
500: {
|
||||
'model': BasicResponse,
|
||||
'description': 'Error while processing OFD data',
|
||||
},
|
||||
},
|
||||
)
|
||||
async def ofd(
|
||||
ofd: OfdRequest, user: User = fastapi.Depends(get_current_user)
|
||||
) -> Transaction:
|
||||
with sqlmodel.Session(bind=app.core.db.engine) as session:
|
||||
event = session.get(Event, ofd.event_id)
|
||||
if not event:
|
||||
raise HTTPException(status_code=404, detail='Event not found')
|
||||
|
||||
data = await get_nalog_data(ofd.ofd_string)
|
||||
data = data['data']['json']
|
||||
if not data:
|
||||
raise HTTPException(status_code=400, detail='Bad OFD data')
|
||||
|
||||
transaction = Transaction(
|
||||
payer_id=user.id, event_id=event.id, title=data['retailPlace']
|
||||
)
|
||||
session.add(transaction)
|
||||
session.commit()
|
||||
items = data['items']
|
||||
|
||||
for item in items:
|
||||
new_item = Item(
|
||||
title=item['name'],
|
||||
price=item['sum'] / 100,
|
||||
transaction_id=transaction.id,
|
||||
)
|
||||
session.add(new_item)
|
||||
session.commit()
|
||||
|
||||
transaction.items.append(new_item)
|
||||
session.add(transaction)
|
||||
session.refresh(transaction)
|
||||
session.commit()
|
||||
|
||||
try:
|
||||
return transaction
|
||||
|
||||
except Exception:
|
||||
raise HTTPException(
|
||||
detail='Error while getting information about check',
|
||||
status_code=500,
|
||||
)
|
||||
Reference in New Issue
Block a user