This commit is contained in:
2024-07-02 08:55:24 +03:00
parent 386ee7e460
commit 7ba3426989
18 changed files with 228 additions and 155 deletions

54
main.py
View File

@@ -1,43 +1,37 @@
from typing import Annotated
from celery.result import AsyncResult
from fastapi import FastAPI, Depends, Body
from sqlalchemy import select
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from starlette import status
from starlette.responses import JSONResponse
from backend.session import get_session
from database import DailyStock
from database.sipro import *
from queries.general import get_stocks_data
import background.tasks
from background.tasks import *
from updaters.stocks_updater import StockUpdate
from schemas.general import UpdateRequest, UpdateResponse
app = FastAPI()
auth_schema = HTTPBearer()
@app.get("/")
async def root(
session: Annotated[AsyncSession, Depends(get_session)],
marketplace_id: int
async def check_auth(token: Annotated[HTTPAuthorizationCredentials, Depends(auth_schema)]):
if token.credentials != 'vvHh1QNl7lS6c7OVwmxU1TVNd7DLlc9W810csZGf4rkqOrBy6fQwlhIDZsQZd9hQYZYK47yWv33aCq':
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='Invalid credentials')
app = FastAPI(
dependencies=[Depends(check_auth)]
)
@app.post(
'/update',
response_model=UpdateResponse
)
async def update(
request: UpdateRequest
):
marketplace = await session.get(Marketplace, marketplace_id, options=[
joinedload(Marketplace.warehouses).joinedload(Warehouse.suppliers),
joinedload(Marketplace.warehouses).joinedload(Warehouse.company_warehouses),
joinedload(Marketplace.company).joinedload(Company.warehouse)
])
data = await get_stocks_data(session, marketplace)
data = sorted(data, key=lambda x: x['denco_article'])
return {"message": data}
@app.post("/tasks", status_code=201)
def run_task(payload=Body(...)):
task_type = payload["type"]
task = test_task.delay()
return JSONResponse({"task_id": task.id})
task = background.tasks.process_update.delay(request.product_ids)
return UpdateResponse(task_id=task.id)
@app.get("/tasks/{task_id}")