70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
from typing import Annotated
|
|
|
|
from celery.result import AsyncResult
|
|
from fastapi import FastAPI, Depends, HTTPException
|
|
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
|
|
from starlette import status
|
|
from starlette.responses import JSONResponse
|
|
|
|
import backend.config
|
|
import background.tasks
|
|
from background.tasks import *
|
|
from schemas.general import UpdateRequest, UpdateResponse, UpdateMarketplaceRequest, UpdateMarketplacesRequest
|
|
|
|
auth_schema = HTTPBearer()
|
|
|
|
|
|
async def check_auth(token: Annotated[HTTPAuthorizationCredentials, Depends(auth_schema)]):
|
|
if token.credentials != backend.config.API_KEY:
|
|
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail='Invalid credentials')
|
|
|
|
|
|
app = FastAPI(
|
|
dependencies=[Depends(check_auth)]
|
|
)
|
|
|
|
|
|
@app.get(
|
|
'/ping'
|
|
)
|
|
async def ping():
|
|
return {'pong': True}
|
|
|
|
|
|
@app.post(
|
|
'/update',
|
|
response_model=UpdateResponse
|
|
)
|
|
async def update(
|
|
request: UpdateRequest
|
|
):
|
|
task = background.tasks.process_update.delay(request.product_ids)
|
|
return UpdateResponse(task_id=task.id)
|
|
|
|
|
|
@app.post('/update/marketplace')
|
|
async def update_marketplace(
|
|
request: UpdateMarketplaceRequest
|
|
):
|
|
task = background.tasks.update_marketplace.delay(request.marketplace_id)
|
|
return UpdateResponse(task_id=task.id)
|
|
|
|
|
|
@app.post('/update/marketplaces')
|
|
async def update_marketplace(
|
|
request: UpdateMarketplacesRequest
|
|
):
|
|
task = background.tasks.update_marketplaces.delay(request.marketplace_ids)
|
|
return UpdateResponse(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)
|