diff --git a/config/urls.py b/config/urls.py index 7eaff55..ddd03bf 100644 --- a/config/urls.py +++ b/config/urls.py @@ -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')), ] )) ] diff --git a/core/apps/common/admin.py b/core/apps/common/admin.py index a78b069..ee523f1 100644 --- a/core/apps/common/admin.py +++ b/core/apps/common/admin.py @@ -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): diff --git a/core/apps/common/serializers.py b/core/apps/common/serializers.py new file mode 100644 index 0000000..df9bd37 --- /dev/null +++ b/core/apps/common/serializers.py @@ -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', + ] + diff --git a/core/apps/common/urls.py b/core/apps/common/urls.py new file mode 100644 index 0000000..10c7160 --- /dev/null +++ b/core/apps/common/urls.py @@ -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()), +] \ No newline at end of file diff --git a/core/apps/common/views.py b/core/apps/common/views.py index 91ea44a..8b8c444 100644 --- a/core/apps/common/views.py +++ b/core/apps/common/views.py @@ -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() + \ No newline at end of file