chore: restructured project

This commit is contained in:
ITQ
2025-03-07 19:32:09 +03:00
parent bfb7ad901a
commit 0a35951c62
178 changed files with 304 additions and 376 deletions
@@ -0,0 +1,23 @@
from typing import Any, Literal
from uuid import UUID
from ninja import Schema
class GenerateAdTextIn(Schema):
advertiser_name: str
ad_title: str
class Promise(Schema):
task_id: UUID
status: Literal[
"PENDING",
"RECEIVED",
"STARTED",
"SUCCESS",
"FAILURE",
"RETRY",
"REVOKED",
]
result: Any
+56
View File
@@ -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,
)