Files
Mark Street 87a58959da Add cache-control headers (#1669)
* Add cache-control headers

* Tweaks
2025-09-19 21:44:09 +09:00

49 lines
1.5 KiB
Python

from rest_framework.views import APIView
from rest_framework.response import Response
from ..decorators.cache import globally_cacheable
from ..middleware import Request
from ..models.preset import Preset
from ..models.scratch import Scratch
from ..models.profile import Profile
from ..serializers import PresetSerializer, TerseScratchSerializer, serialize_profile
class SearchViewSet(APIView):
@globally_cacheable(max_age=60, stale_while_revalidate=30)
def get(self, request: Request) -> Response:
query = request.query_params.get("search", "")
page_size = int(request.query_params.get("page_size", "5"))
user_qs = Profile.objects.filter(user__username__icontains=query)[:page_size]
preset_qs = Preset.objects.filter(name__icontains=query)[:page_size]
scratch_qs = Scratch.objects.filter(name__icontains=query)[:page_size]
results = []
for user in user_qs:
results.append(
{
"type": "user",
"item": serialize_profile(user),
}
)
for preset in PresetSerializer(preset_qs, many=True).data:
results.append(
{
"type": "preset",
"item": preset,
}
)
for scratch in TerseScratchSerializer(scratch_qs, many=True).data:
results.append(
{
"type": "scratch",
"item": scratch,
}
)
return Response(results)