52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
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 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
|
|
from background.tasks import *
|
|
from updaters.stocks_updater import StockUpdate
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
@app.get("/")
|
|
async def root(
|
|
session: Annotated[AsyncSession, Depends(get_session)],
|
|
marketplace_id: int
|
|
):
|
|
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})
|
|
|
|
|
|
@app.get("/tasks/{task_id}")
|
|
def get_status(task_id):
|
|
task_result = AsyncResult(task_id)
|
|
result = {
|
|
"task_id": task_id,
|
|
"task_status": task_result.status,
|
|
"task_result": task_result.result
|
|
}
|
|
return JSONResponse(result)
|