Skip to content

Commit 80fc5f5

Browse files
committed
fix: API 스펙을 좀 더 말이 되도록 수정
1 parent 240dcc6 commit 80fc5f5

File tree

4 files changed

+27
-30
lines changed

4 files changed

+27
-30
lines changed

app/admin_api/views/event/presentation.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
PresentationSpeakerAdminSerializer,
1414
PresentationTypeAdminSerializer,
1515
)
16+
from core.const.regex import UUID_V4_REGEX
1617
from core.const.tag import OpenAPITag
1718
from core.permissions import IsSuperUser
1819
from core.viewset.json_schema_viewset import JsonSchemaViewSet
@@ -55,13 +56,13 @@ class PresentationAdminViewSet(JsonSchemaViewSet, viewsets.ModelViewSet):
5556
queryset = Presentation.objects.get_all_nested_data().select_related("created_by", "updated_by", "deleted_by")
5657

5758
@extend_schema(tags=[OpenAPITag.ADMIN_EVENT_PRESENTATION])
58-
@decorators.action(detail=True, methods=["get"], url_path="preview")
59-
def preview_modification_audit(self, request: request.Request, *args: tuple, **kwargs: dict) -> response.Response:
60-
if not (
61-
mod_audit := typing.cast(
62-
ModificationAudit | None, ModificationAudit.objects.filter_requested(self.get_object()).first()
63-
)
64-
):
59+
@decorators.action(detail=True, methods=["get"], url_path=r"preview/(?P<audit_id>[\w-]+)")
60+
def preview_modification_audit(self, audit_id: str, *args: tuple, **kwargs: dict) -> response.Response:
61+
if not UUID_V4_REGEX.match(kwargs.get("audit_id", "")):
62+
return response.Response(status=status.HTTP_404_NOT_FOUND)
63+
64+
presentation: Presentation = self.get_object()
65+
if not (mod_audit := ModificationAudit.objects.filter_requested(presentation).filter(id=audit_id).first()):
6566
return response.Response(status=status.HTTP_404_NOT_FOUND)
6667

6768
return response.Response(data=self.get_serializer(mod_audit.apply_modification(save=False)).data)

app/admin_api/views/user.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import typing
2-
31
from admin_api.serializers.user import (
42
OrganizationAdminSerializer,
53
UserAdminPasswordChangeSerializer,
64
UserAdminSerializer,
75
UserAdminSignInSerializer,
86
)
97
from core.const.account import INITIAL_ADMIN_PASSWORD
8+
from core.const.regex import UUID_V4_REGEX
109
from core.const.tag import OpenAPITag
1110
from core.permissions import IsSuperUser
1211
from core.viewset.json_schema_viewset import JsonSchemaViewSet
@@ -82,13 +81,13 @@ def change_password(self, request: request.Request, *args: tuple, **kwargs: dict
8281
return response.Response(data=UserAdminSerializer(serializer.instance).data)
8382

8483
@extend_schema(tags=[OpenAPITag.ADMIN_USER])
85-
@decorators.action(detail=True, methods=["get"], url_path="preview")
86-
def preview_modification_audit(self, request: request.Request, *args: tuple, **kwargs: dict) -> response.Response:
87-
if not (
88-
mod_audit := typing.cast(
89-
ModificationAudit | None, ModificationAudit.objects.filter_requested(self.get_object()).first()
90-
)
91-
):
84+
@decorators.action(detail=True, methods=["get"], url_path=r"preview/(?P<audit_id>[\w-]+)")
85+
def preview_modification_audit(self, audit_id: str, *args: tuple, **kwargs: dict) -> response.Response:
86+
if not UUID_V4_REGEX.match(audit_id):
87+
return response.Response(status=status.HTTP_404_NOT_FOUND)
88+
89+
user: UserExt = self.get_object()
90+
if not (mod_audit := ModificationAudit.objects.filter_requested(user).filter(id=audit_id).first()):
9291
return response.Response(status=status.HTTP_404_NOT_FOUND)
9392

9493
return response.Response(data=self.get_serializer(mod_audit.apply_modification(save=False)).data)

app/participant_portal_api/views/presentation.py

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import typing
2-
31
from core.const.tag import OpenAPITag
42
from drf_spectacular import utils
53
from event.presentation.models import Presentation, PresentationSpeaker
64
from participant_portal_api.models import ModificationAudit
75
from participant_portal_api.permissions import IsSessionSpeaker
86
from participant_portal_api.serializers.presentation import PresentationPortalSerializer
9-
from rest_framework import decorators, mixins, request, response, status, viewsets
7+
from rest_framework import mixins, viewsets
108

119

1210
@utils.extend_schema_view(
@@ -41,14 +39,9 @@ def get_queryset(self):
4139
)
4240
)
4341

44-
@utils.extend_schema(tags=[OpenAPITag.PARTICIPANT_PORTAL_PRESENTATION])
45-
@decorators.action(detail=True, methods=["get"], url_path="preview")
46-
def preview_modification_audit(self, request: request.Request, *args: tuple, **kwargs: dict) -> response.Response:
47-
if not (
48-
mod_audit := typing.cast(
49-
ModificationAudit | None, ModificationAudit.objects.filter_requested(self.get_object()).first()
50-
)
51-
):
52-
return response.Response(status=status.HTTP_404_NOT_FOUND)
42+
def get_object(self):
43+
presentation = super().get_object()
44+
if mod_audit := ModificationAudit.objects.filter_requested(presentation).first():
45+
presentation = mod_audit.apply_modification(save=False)
5346

54-
return response.Response(data=self.get_serializer(mod_audit.apply_modification(save=False)).data)
47+
return presentation

app/participant_portal_api/views/user.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ def retrieve_profile(self, request: request.Request, *args: tuple, **kwargs: dic
2828
if not request.user.is_authenticated:
2929
return response.Response(status=status.HTTP_401_UNAUTHORIZED)
3030

31-
return response.Response(data=UserPortalSerializer(request.user).data)
31+
user = request.user
32+
if mod_audit := ModificationAudit.objects.filter_requested(user).first():
33+
user = mod_audit.apply_modification(save=False)
34+
35+
return response.Response(data=self.get_serializer(user).data)
3236

3337
@extend_schema(
3438
tags=[OpenAPITag.PARTICIPANT_PORTAL_USER],

0 commit comments

Comments
 (0)