(add, done): add common api, and done common app tasks

This commit is contained in:
behruz-dev
2025-08-26 13:14:21 +05:00
parent e279c141b3
commit eeb4c2a9a1
5 changed files with 132 additions and 3 deletions

View File

@@ -29,7 +29,8 @@ urlpatterns = [
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('api/v1/', include(
[
path('accounts/', include('core.apps.accounts.urls'))
path('accounts/', include('core.apps.accounts.urls')),
path('common/', include('core.apps.common.urls')),
]
))
]

View File

@@ -49,6 +49,11 @@ class AboutUsAdmin(TranslationAdmin):
list_display = ['title', 'description']
inlines = [AboutUsImageInline, AboutUsFeatureInline]
def has_add_permission(self, request):
if self.model.objects.count() > 0:
return False
return True
@admin.register(models.Service)
class ServiceAdmin(TranslationAdmin):

View File

@@ -0,0 +1,69 @@
from rest_framework import serializers
from core.apps.common import models
class SiteConfigSerializer(serializers.ModelSerializer):
class Meta:
model = models.SiteConfig
fields = [
'telegram', 'instagram', 'youtube', 'facebook'
]
class AboutUsFeatureListSerializer(serializers.ModelSerializer):
class Meta:
model = models.AboutUsFeature
fields = [
'id', 'text'
]
class AboutUsImageListSerializer(serializers.ModelSerializer):
class Meta:
model = models.AboutUsImage
fields = [
'id', 'image'
]
class AboutUsSerializer(serializers.ModelSerializer):
images = AboutUsImageListSerializer(many=True)
features = AboutUsFeatureListSerializer(many=True)
class Meta:
model = models.AboutUs
fields = [
'id', 'title', 'description', 'images', 'features'
]
class BannerListSerializer(serializers.ModelSerializer):
class Meta:
model = models.Banner
fields = [
'id', 'banner'
]
class ServiceListSerializer(serializers.ModelSerializer):
class Meta:
model = models.Service
fields = [
'id', 'title', 'text', 'icon', 'image',
]
class NewsSerializer(serializers.ModelSerializer):
class Meta:
model = models.News
fields = ['id', 'image', 'title', 'text']
class ContactUsSerializer(serializers.ModelSerializer):
class Meta:
model = models.ContactUs
fields = [
'first_name', 'last_name', 'phone', 'email', 'service', 'message',
]

12
core/apps/common/urls.py Normal file
View File

@@ -0,0 +1,12 @@
from django.urls import path
from core.apps.common import views
urlpatterns = [
path('site_config/', views.SiteConfigApiView.as_view()),
path('about_us/', views.AboutUsApiView.as_view()),
path('banners/', views.BannerListApiView.as_view()),
path('services/', views.ServiceListApiView.as_view()),
path('news/', views.NewsListApiView.as_view()),
path('contact_us/', views.ContactUsApiView.as_view()),
]

View File

@@ -1,3 +1,45 @@
from django.shortcuts import render
from rest_framework import generics
from rest_framework.response import Response
# Create your views here.
from core.apps.common import models, serializers
class SiteConfigApiView(generics.GenericAPIView):
queryset = models.SiteConfig.objects.all()
serializer_class = serializers.SiteConfigSerializer
def get(self, request):
site_config = models.SiteConfig.objects.first()
serializer = self.serializer_class(site_config)
return Response(serializer.data, status=200)
class AboutUsApiView(generics.GenericAPIView):
queryset = models.AboutUs.objects.all()
serializer_class = serializers.AboutUsSerializer
def get(self, request):
about_us = models.AboutUs.objects.prefetch_related('images', 'features').first()
serializer = self.serializer_class(about_us)
return Response(serializer.data, status=200)
class BannerListApiView(generics.ListAPIView):
serializer_class = serializers.BannerListSerializer
queryset = models.Banner.objects.all()
class ServiceListApiView(generics.ListAPIView):
serializer_class = serializers.ServiceListSerializer
queryset = models.Service.objects.all()
class NewsListApiView(generics.ListAPIView):
serializer_class = serializers.NewsSerializer
queryset = models.News.objects.all()
class ContactUsApiView(generics.CreateAPIView):
serializer_class = serializers.ContactUsSerializer
queryset = models.ContactUs.objects.all()