Files
diary-system/backend/diary/views.py

63 lines
2.4 KiB
Python
Raw Normal View History

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from django.utils import timezone
from .models import DiaryEntry, DailyProgress, Experience
from .serializers import DiaryEntrySerializer, DailyProgressSerializer, ExperienceSerializer
class DiaryEntryViewSet(viewsets.ModelViewSet):
queryset = DiaryEntry.objects.all()
serializer_class = DiaryEntrySerializer
@action(detail=False, methods=['get'])
def today(self, request):
"""获取今天的日记"""
today = timezone.now().date()
entry, created = DiaryEntry.objects.get_or_create(date=today)
serializer = self.get_serializer(entry)
return Response(serializer.data)
@action(detail=False, methods=['get'])
def recent(self, request):
"""获取最近 7 天的日记"""
entries = DiaryEntry.objects.order_by('-date')[:7]
serializer = self.get_serializer(entries, many=True)
return Response(serializer.data)
@action(detail=False, methods=['get'])
def stats(self, request):
"""获取统计信息"""
total_entries = DiaryEntry.objects.count()
return Response({
'total_entries': total_entries,
'first_entry': DiaryEntry.objects.order_by('date').first().date if total_entries > 0 else None,
'latest_entry': DiaryEntry.objects.order_by('-date').first().date if total_entries > 0 else None,
})
class DailyProgressViewSet(viewsets.ModelViewSet):
queryset = DailyProgress.objects.all()
serializer_class = DailyProgressSerializer
class ExperienceViewSet(viewsets.ModelViewSet):
queryset = Experience.objects.all()
serializer_class = ExperienceSerializer
@action(detail=False, methods=['get'])
def by_category(self, request):
"""按类别分组获取经验"""
categories = {}
for exp in Experience.objects.all():
cat = exp.get_category_display()
if cat not in categories:
categories[cat] = []
categories[cat].append(ExperienceSerializer(exp).data)
return Response(categories)
@action(detail=False, methods=['get'])
def recent(self, request):
"""获取最近 10 条经验"""
experiences = Experience.objects.order_by('-date', '-created_at')[:10]
serializer = self.get_serializer(experiences, many=True)
return Response(serializer.data)