Home api lari chiqarildi

This commit is contained in:
2025-11-25 16:40:18 +05:00
parent bab8f253e7
commit 6d176efece
30 changed files with 355 additions and 13 deletions

View File

@@ -1,2 +1,3 @@
from .category import * # noqa
from .search import * # noqa
from .ad import * # noqa

View File

@@ -0,0 +1 @@
from .home_api import * # noqa

View File

@@ -0,0 +1,59 @@
from rest_framework import serializers
from django.db.models import Avg
from core.apps.api.models import AdModel, AdVariant
class AdVariantSerializer(serializers.ModelSerializer):
class Meta:
model = AdVariant
fields = [
"variant",
"value",
"is_available",
"price",
"discount",
]
class BaseHomeAdSerializer(serializers.ModelSerializer):
variants = serializers.SerializerMethodField()
star = serializers.SerializerMethodField()
comment_count = serializers.SerializerMethodField()
class Meta:
model = AdModel
fields = [
"id",
"name",
"price",
"image",
"star",
"comment_count",
"variants",
]
def get_variants(self, obj):
variant = obj.variants.order_by("price").first()
if variant:
return AdVariantSerializer(variant).data
return []
def get_star(self, obj):
avg = obj.feedback.aggregate(avg=Avg("star"))["avg"]
return avg or 0
def get_comment_count(self, obj):
count = obj.feedback.count()
return count or 0
class ListHomeAdSerializer(BaseHomeAdSerializer):
class Meta(BaseHomeAdSerializer.Meta): ...
class RetrieveHomeAdSerializer(BaseHomeAdSerializer):
class Meta(BaseHomeAdSerializer.Meta): ...
class CreateHomeAdSerializer(BaseHomeAdSerializer):
class Meta(BaseHomeAdSerializer.Meta): ...