first commit
This commit is contained in:
250
home/views.py
Normal file
250
home/views.py
Normal file
@@ -0,0 +1,250 @@
|
||||
from django.core.cache import cache
|
||||
from rest_framework import status
|
||||
from rest_framework.generics import ListAPIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from core.Permission import ReadOnly
|
||||
from home.models import Home, AboutMe, MyService, MyServiceTitle, MyResume, Education, Experience, Skill, Knowledge, \
|
||||
MainMenu
|
||||
from home.serializers import (HomeSerializer, AboutMeSerializer, MyServiceSerializer, MyServiceTitleSerializer,
|
||||
MyResumeSerializer, EducationSerializer, ExperienceSerializer, SkillSerializer,
|
||||
KnowledgeSerializer, MainMenuSerializer)
|
||||
|
||||
CACHE_TTL_SECONDS = 60 * 5
|
||||
|
||||
|
||||
# Create your views here.
|
||||
class HomeDetailView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:active_home'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
home = Home.objects.filter(is_active=True).first()
|
||||
if home:
|
||||
serializer = HomeSerializer(home)
|
||||
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(serializer.data)
|
||||
else:
|
||||
return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class AboutMeDetailView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:active_aboutme'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
aboutme = AboutMe.objects.filter(is_active=True).first()
|
||||
if aboutme:
|
||||
serializer = AboutMeSerializer(aboutme)
|
||||
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(serializer.data)
|
||||
else:
|
||||
return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class MyServiceList(ListAPIView):
|
||||
permission_classes = [ReadOnly]
|
||||
queryset = MyService.objects.order_by('-created_at').filter(is_active=True).all()
|
||||
serializer_class = MyServiceSerializer
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
cache_key = 'home:service_list'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
response = super().list(request, *args, **kwargs)
|
||||
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
|
||||
return response
|
||||
|
||||
class MyServiceTitleDetailView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:service_title'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
services_title = MyServiceTitle.objects.filter(is_active=True).first()
|
||||
if services_title:
|
||||
serializer = MyServiceTitleSerializer(services_title)
|
||||
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(serializer.data)
|
||||
else:
|
||||
return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class MyResumeDetailView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:resume'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
resume = MyResume.objects.filter(is_active=True).first()
|
||||
if resume:
|
||||
serializer = MyResumeSerializer(resume, context={'request': request})
|
||||
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(serializer.data)
|
||||
else:
|
||||
return Response({"error": "No resume found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class EducationListView(ListAPIView):
|
||||
permission_classes = [ReadOnly]
|
||||
serializer_class = EducationSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Education.objects.filter(is_active=True).order_by('-created_at')
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
cache_key = 'home:education_list'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
response = super().list(request, *args, **kwargs)
|
||||
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
|
||||
return response
|
||||
|
||||
|
||||
class ExperienceListView(ListAPIView):
|
||||
permission_classes = [ReadOnly]
|
||||
serializer_class = ExperienceSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Experience.objects.filter(is_active=True).order_by('-created_at')
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
cache_key = 'home:experience_list'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
response = super().list(request, *args, **kwargs)
|
||||
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
|
||||
return response
|
||||
|
||||
|
||||
class SkillListView(ListAPIView):
|
||||
permission_classes = [ReadOnly]
|
||||
serializer_class = SkillSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Skill.objects.filter(is_active=True).order_by('-created_at')
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
cache_key = 'home:skill_list'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
response = super().list(request, *args, **kwargs)
|
||||
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
|
||||
return response
|
||||
|
||||
|
||||
class KnowledgeListView(ListAPIView):
|
||||
permission_classes = [ReadOnly]
|
||||
serializer_class = KnowledgeSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return Knowledge.objects.filter(is_active=True).order_by('-created_at')
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
cache_key = 'home:knowledge_list'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
response = super().list(request, *args, **kwargs)
|
||||
cache.set(cache_key, response.data, timeout=CACHE_TTL_SECONDS)
|
||||
return response
|
||||
|
||||
|
||||
class HomeBundleView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:bundle:v1'
|
||||
cached_data = cache.get(cache_key)
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
home = Home.objects.filter(is_active=True).first()
|
||||
aboutme = AboutMe.objects.filter(is_active=True).first()
|
||||
services_title = MyServiceTitle.objects.filter(is_active=True).first()
|
||||
resume = MyResume.objects.filter(is_active=True).first()
|
||||
menu = MainMenu.objects.filter(is_active=True).first()
|
||||
|
||||
services = MyService.objects.filter(is_active=True).order_by('-created_at')
|
||||
education = Education.objects.filter(is_active=True).order_by('-created_at')
|
||||
experience = Experience.objects.filter(is_active=True).order_by('-created_at')
|
||||
skills = Skill.objects.filter(is_active=True).order_by('-created_at')
|
||||
knowledge = Knowledge.objects.filter(is_active=True).order_by('-created_at')
|
||||
|
||||
payload = {
|
||||
"home": HomeSerializer(home).data if home else None,
|
||||
"about_me": AboutMeSerializer(aboutme).data if aboutme else None,
|
||||
"service_title": MyServiceTitleSerializer(services_title).data if services_title else None,
|
||||
"resume": MyResumeSerializer(resume, context={"request": request}).data if resume else None,
|
||||
"main_menu": MainMenuSerializer(menu).data if menu else None,
|
||||
"services": MyServiceSerializer(services, many=True).data,
|
||||
"education": EducationSerializer(education, many=True).data,
|
||||
"experience": ExperienceSerializer(experience, many=True).data,
|
||||
"skills": SkillSerializer(skills, many=True).data,
|
||||
"knowledge": KnowledgeSerializer(knowledge, many=True).data,
|
||||
}
|
||||
|
||||
cache.set(cache_key, payload, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(payload)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
|
||||
class MainMenuDetailView(APIView):
|
||||
permission_classes = [ReadOnly]
|
||||
|
||||
def get(self, request):
|
||||
try:
|
||||
cache_key = 'home:active_menu'
|
||||
cached_data = cache.get(cache_key)
|
||||
|
||||
if cached_data:
|
||||
return Response(cached_data)
|
||||
|
||||
# Cache'de yoksa veritabanından al
|
||||
menu = MainMenu.objects.filter(is_active=True).first()
|
||||
if menu:
|
||||
serializer = MainMenuSerializer(menu)
|
||||
cache.set(cache_key, serializer.data, timeout=CACHE_TTL_SECONDS)
|
||||
return Response(serializer.data)
|
||||
else:
|
||||
return Response({"error": "No settings found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
except Exception as e:
|
||||
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
Reference in New Issue
Block a user