feat: added generate endpoints
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
from typing import Any
|
||||
|
||||
from ninja import Schema
|
||||
|
||||
|
||||
class GenerateAdTextIn(Schema):
|
||||
advertiser_name: str
|
||||
ad_title: str
|
||||
|
||||
|
||||
class Promise(Schema):
|
||||
task_id: str
|
||||
status: str
|
||||
result: Any
|
||||
@@ -0,0 +1,56 @@
|
||||
from http import HTTPStatus as status
|
||||
from uuid import UUID
|
||||
|
||||
import celery.states
|
||||
from celery.result import AsyncResult
|
||||
from django.http import Http404, HttpRequest
|
||||
from ninja import Router
|
||||
|
||||
from api.v1 import schemas as global_schemas
|
||||
from api.v1.generate import schemas
|
||||
from apps.campaign.tasks import generate_ad_text_task
|
||||
|
||||
router = Router(tags=["generate"])
|
||||
|
||||
|
||||
@router.post(
|
||||
"/ad_text",
|
||||
response={
|
||||
status.OK: schemas.Promise,
|
||||
status.BAD_REQUEST: global_schemas.BadRequestError,
|
||||
},
|
||||
)
|
||||
def generate_ad_text(
|
||||
request: HttpRequest, prompt: schemas.GenerateAdTextIn
|
||||
) -> tuple[status, schemas.Promise]:
|
||||
task = generate_ad_text_task.delay(prompt.advertiser_name, prompt.ad_title)
|
||||
task_result = AsyncResult(task.id)
|
||||
|
||||
return status.OK, schemas.Promise(
|
||||
task_id=task.id,
|
||||
status=task_result.status,
|
||||
result=task_result.result,
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/ad_text/{task_id}/result",
|
||||
response={
|
||||
status.OK: schemas.Promise,
|
||||
status.BAD_REQUEST: global_schemas.BadRequestError,
|
||||
status.NOT_FOUND: global_schemas.NotFoundError,
|
||||
},
|
||||
)
|
||||
def get_generate_ad_text_result(
|
||||
request: HttpRequest, task_id: UUID
|
||||
) -> tuple[status, schemas.Promise]:
|
||||
task_result = AsyncResult(str(task_id))
|
||||
|
||||
if task_result.status == celery.states.PENDING:
|
||||
raise Http404
|
||||
|
||||
return status.OK, schemas.Promise(
|
||||
task_id=task_result.task_id,
|
||||
status=task_result.status,
|
||||
result=task_result.result,
|
||||
)
|
||||
Reference in New Issue
Block a user