feat: added generate endpoints

This commit is contained in:
ITQ
2025-02-15 20:48:57 +03:00
parent cc6d91a75c
commit 183449bb7b
3 changed files with 70 additions and 0 deletions
@@ -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,
)