67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from datetime import datetime
|
|
from zoneinfo import ZoneInfo
|
|
|
|
from django.utils import timezone
|
|
from rest_framework.generics import CreateAPIView, ListAPIView
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from .models import Config, Guestbook, Memory
|
|
from .serializers import GuestbookCreateSerializer, MemorySerializer
|
|
|
|
|
|
class MemoryListView(ListAPIView):
|
|
serializer_class = MemorySerializer
|
|
|
|
def get_queryset(self):
|
|
return (
|
|
Memory.objects.all()
|
|
.order_by("story_order", "id")
|
|
.prefetch_related("photos")
|
|
)
|
|
|
|
|
|
class GuestbookCreateView(CreateAPIView):
|
|
queryset = Guestbook.objects.all()
|
|
serializer_class = GuestbookCreateSerializer
|
|
|
|
|
|
class StatusView(APIView):
|
|
def get(self, request, *args, **kwargs):
|
|
shanghai = ZoneInfo("Asia/Shanghai")
|
|
now = timezone.now()
|
|
|
|
default_together = datetime(2026, 5, 4, 0, 0, 0, tzinfo=shanghai)
|
|
|
|
config = Config.objects.filter(pk=1).first()
|
|
if config is None:
|
|
site_title = "Nepal Journey: Our Story"
|
|
together_since = default_together
|
|
unlock_at = None
|
|
else:
|
|
site_title = config.site_title or "Nepal Journey: Our Story"
|
|
ts = config.together_since
|
|
if ts is None:
|
|
together_since = default_together
|
|
else:
|
|
together_since = (
|
|
timezone.make_aware(ts, shanghai) if timezone.is_naive(ts) else ts
|
|
)
|
|
ua = config.unlock_at
|
|
if ua is None:
|
|
unlock_at = None
|
|
else:
|
|
unlock_at = (
|
|
timezone.make_aware(ua, shanghai) if timezone.is_naive(ua) else ua
|
|
)
|
|
|
|
return Response(
|
|
{
|
|
"server_time": now,
|
|
"unlocked": True,
|
|
"unlock_at": unlock_at,
|
|
"together_since": together_since,
|
|
"site_title": site_title,
|
|
}
|
|
)
|