81 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.1 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, \
 | 
						|
    UpdateMarketplaceProductsRequest
 | 
						|
 | 
						|
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/marketplace/products')
 | 
						|
async def update_marketplace_products(
 | 
						|
        request: UpdateMarketplaceProductsRequest
 | 
						|
):
 | 
						|
    task = background.tasks.update_marketplace_products.delay(request.marketplace_id, request.product_ids)
 | 
						|
    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)
 |