feat(devops): Add support for if-modified-since header for Feature Flags public endpoint

ref: #673 #663
This commit is contained in:
2025-03-08 21:05:44 +09:30
parent a07ee8472e
commit 427584c8d9
2 changed files with 49 additions and 0 deletions

View File

@ -1,3 +1,5 @@
from datetime import datetime
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
from devops.serializers.public_feature_flag import (
@ -81,6 +83,31 @@ class ViewSet(PublicReadOnlyViewSet):
code = 'software_not_found'
)
last_modified = None
for flag in queryset:
if last_modified is None:
last_modified = flag.modified
if last_modified.timestamp() < flag.modified.timestamp():
last_modified = flag.modified
if self.request.headers.get('if-modified-since', None):
check_date = datetime.strptime(self.request.headers['if-modified-since'], '%a, %d %b %Y %H:%M:%S %z')
if last_modified.timestamp() >= check_date.timestamp():
raise centurion_exceptions.NotModified()
self.last_modified = last_modified
self.queryset = queryset
@ -97,3 +124,14 @@ class ViewSet(PublicReadOnlyViewSet):
def get_serializer_class(self):
return ModelSerializer
def list(self, request, *args, **kwargs):
response = super().list(request = request, *args, **kwargs)
if response.status_code == 200:
response.headers['Last-Modified'] = self.last_modified.strftime('%a, %d %b %Y %H:%M:%S %z')
return response