feat: added ads endpoints

This commit is contained in:
ITQ
2025-02-19 14:34:51 +03:00
parent 353e90ea9e
commit 647163aa88
3 changed files with 78 additions and 0 deletions
@@ -0,0 +1,23 @@
from typing import ClassVar
from uuid import UUID
from ninja import ModelSchema, Schema
from apps.campaign.models import Campaign
class Advertisment(ModelSchema):
advertiser_id: UUID
ad_id: UUID
class Meta:
model = Campaign
fields: ClassVar[tuple[str]] = (
Campaign.ad_title.field.name,
Campaign.ad_text.field.name,
Campaign.ad_image.field.name,
)
class ClickIn(Schema):
client_id: UUID
@@ -0,0 +1,55 @@
from http import HTTPStatus as status
from uuid import UUID
from django.http import HttpRequest
from django.shortcuts import get_object_or_404
from ninja import Router
from api.v1 import schemas as global_schemas
from api.v1.ads import schemas
from apps.campaign.models import Campaign
from apps.client.models import Client
router = Router(tags=["ads"])
@router.get(
"",
response={
status.OK: schemas.Advertisment,
status.BAD_REQUEST: global_schemas.BadRequestError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def get_advertisment(
request: HttpRequest, client_id: UUID
) -> tuple[status, Campaign]:
client = get_object_or_404(Client, id=client_id)
campaign = Campaign.suggest(client)
campaign.view(client)
return status.OK, campaign
@router.post(
"/{advertisment_id}/click",
response={
status.NO_CONTENT: None,
status.BAD_REQUEST: global_schemas.BadRequestError,
status.FORBIDDEN: global_schemas.ForbiddenError,
status.NOT_FOUND: global_schemas.NotFoundError,
},
)
def click_on_advertisment(
request: HttpRequest, advertisment_id: UUID, client: schemas.ClickIn
) -> tuple[status, None]:
campaign_instance: Campaign = get_object_or_404(
Campaign, id=advertisment_id
)
client_instance: Client = get_object_or_404(Client, id=client.client_id)
campaign_instance.click(client_instance)
return status.NO_CONTENT, None