[api] Clean up view functions

This commit is contained in:
Corey 2024-06-19 22:37:00 -04:00
parent d08094b411
commit 136616db80
Signed by: coco
GPG Key ID: 051138DA6AEE3E60
3 changed files with 33 additions and 30 deletions

View File

@ -29,7 +29,6 @@ app.conf.beat_schedule = {
"schedule": timedelta( "schedule": timedelta(
minutes=int(os.getenv("SERVER_UPDATE_INTERVAL", default="10")) minutes=int(os.getenv("SERVER_UPDATE_INTERVAL", default="10"))
), ),
# "schedule": timedelta(minutes=1),
}, },
} }

View File

@ -6,7 +6,7 @@
"LOGIN.CHAINS_OF_PROMATHIA": true, "LOGIN.CHAINS_OF_PROMATHIA": true,
"LOGIN.CHARACTER_CREATION": true, "LOGIN.CHARACTER_CREATION": true,
"LOGIN.CHARACTER_DELETION": true, "LOGIN.CHARACTER_DELETION": true,
"LOGIN.CLIENT_VER": "30240327_0", "LOGIN.CLIENT_VER": "30240604_1",
"LOGIN.DISABLE_MOB_NPC_CHAR_NAMES": false, "LOGIN.DISABLE_MOB_NPC_CHAR_NAMES": false,
"LOGIN.HEROES_OF_ABYSSEA": true, "LOGIN.HEROES_OF_ABYSSEA": true,
"LOGIN.LOGIN_LIMIT": 0, "LOGIN.LOGIN_LIMIT": 0,
@ -221,6 +221,7 @@
"MAP.AUDIT_UNITY": false, "MAP.AUDIT_UNITY": false,
"MAP.AUDIT_YELL": false, "MAP.AUDIT_YELL": false,
"MAP.BATTLE_CAP_TWEAK": 0, "MAP.BATTLE_CAP_TWEAK": 0,
"MAP.BCNM_ENABLE_EXPERIMENTAL": true,
"MAP.BLOCK_OLD_SKILLUP_STYLE": false, "MAP.BLOCK_OLD_SKILLUP_STYLE": false,
"MAP.BLOCK_TELL_TO_HIDDEN_GM": false, "MAP.BLOCK_TELL_TO_HIDDEN_GM": false,
"MAP.BLOOD_PACT_SHARED_TIMER": false, "MAP.BLOOD_PACT_SHARED_TIMER": false,

View File

@ -40,7 +40,7 @@ class ServerViewSet(
**{annotate_name: KT(annotate_field)} **{annotate_name: KT(annotate_field)}
).filter(**{f"{annotate_name}__{filter_type}": value}) ).filter(**{f"{annotate_name}__{filter_type}": value})
# TODO: This probably isn't very efficient # Clear the result cache to ensure fresh data
queryset._result_cache = None queryset._result_cache = None
return queryset return queryset
@ -56,6 +56,9 @@ class ServerDetailsViewSet(
serializer_class = ServerDetailsSerializer serializer_class = ServerDetailsSerializer
def get_object(self): def get_object(self):
"""
Override get_object to retrieve server by URL query parameter.
"""
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
url_param = self.request.query_params.get("url") url_param = self.request.query_params.get("url")
if url_param: if url_param:
@ -66,44 +69,44 @@ class ServerDetailsViewSet(
raise Http404("Server not found with the provided URL.") raise Http404("Server not found with the provided URL.")
return super().get_object() return super().get_object()
def create_server(self, url_param): def handle_server_by_url(self, url_param):
serializer = self.get_serializer(data={"url": url_param}) """
serializer.is_valid(raise_exception=True) Check for existing server or create a new one if not found.
self.perform_create(serializer) """
return serializer.instance url_param = url_param.lower()
try:
server = Server.objects.get(url=url_param)
serializer = self.get_serializer(server)
return Response(serializer.data, status=status.HTTP_200_OK)
except Server.DoesNotExist:
serializer = self.get_serializer(data={"url": url_param})
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as e:
return Response({"url": e.messages}, status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
"""
Handle POST request to retrieve or create server.
"""
url_param = request.data.get("url") url_param = request.data.get("url")
if url_param: if url_param:
url_param = url_param.lower() return self.handle_server_by_url(url_param)
try: return Response(
server = Server.objects.get(url=url_param) {"detail": "URL parameter is required."}, status=status.HTTP_400_BAD_REQUEST
serializer = self.get_serializer(server) )
return Response(serializer.data, status=status.HTTP_200_OK)
except Server.DoesNotExist:
try:
instance = self.create_server(url_param)
serializer = self.get_serializer(instance)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as e:
return Response(
{"url": e.messages}, status=status.HTTP_400_BAD_REQUEST
)
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
"""
Handle GET request to retrieve or create server.
"""
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
url_param = self.request.query_params.get("url") url_param = self.request.query_params.get("url")
if url_param: if url_param:
url_param = url_param.lower() url_param = url_param.lower()
queryset = queryset.filter(url=url_param) queryset = queryset.filter(url=url_param)
if not queryset.exists(): if not queryset.exists():
try: return self.handle_server_by_url(url_param)
instance = self.create_server(url_param)
serializer = self.get_serializer(instance)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except ValidationError as e:
return Response(
{"url": e.messages}, status=status.HTTP_400_BAD_REQUEST
)
return self.retrieve(request, *args, **kwargs) return self.retrieve(request, *args, **kwargs)
raise Http404("No URL provided.") raise Http404("No URL provided.")