From fc14358c396e00bcaed098ff093ca9b7ca33ecf2 Mon Sep 17 00:00:00 2001 From: YimTaeKeun Date: Sun, 13 Jul 2025 21:51:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?MODIFY:=20=EC=95=A1=EC=84=B8=EC=8A=A4=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EA=B8=B0=EA=B0=84=20=EB=B3=80=EA=B2=BD,?= =?UTF-8?q?=20=EB=B0=9C=EA=B8=89=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/settings.py b/config/settings.py index 3b5c02a..04f3e1d 100644 --- a/config/settings.py +++ b/config/settings.py @@ -236,7 +236,7 @@ # simple jwt setting SIMPLE_JWT = { - "ACCESS_TOKEN_LIFETIME": timedelta(hours=5), # 토큰 유효시간 설정 1시간으로 설정 + "ACCESS_TOKEN_LIFETIME": timedelta(days=5), # 토큰 유효기간 5일로 설정 "REFRESH_TOKEN_LIFETIME": timedelta(days=30), # 리프레시 토큰 유효기간 설정 리프레시 토큰 유효기간은 5일로 설정 "ROTATE_REFRESH_TOKENS": True, # 리프레시 토큰도 같이 반환됩니다. "BLACKLIST_AFTER_ROTATION": True, # 이전 토큰 블랙리스트 적용, 사용시 설치앱에 rest_framework_simplejwt.token_blacklist 추가 필요 @@ -246,7 +246,7 @@ "SIGNING_KEY": SECRET_KEY, # 장고 자체의 시크릿 키로 signing key 지정 "VERIFYING_KEY": "", "AUDIENCE": None, - "ISSUER": None, # 토큰 발급자 명시 + "ISSUER": "Conever", # 토큰 발급자 명시 "JSON_ENCODER": None, "JWK_URL": None, "LEEWAY": 0, From d4c5797c541707728f24ee28cbbbf54e3117ec39 Mon Sep 17 00:00:00 2001 From: YimTaeKeun Date: Sun, 13 Jul 2025 22:16:34 +0900 Subject: [PATCH 2/4] =?UTF-8?q?FEAT:=20=EB=AF=B8=EC=85=98=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20API=20=EC=A0=9C=EC=9E=91=20=EB=B0=8F=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=99=84=EB=A3=8C=20(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mission/urls.py | 6 +++++- mission/views.py | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/mission/urls.py b/mission/urls.py index 71d5d25..4a615a6 100644 --- a/mission/urls.py +++ b/mission/urls.py @@ -1,5 +1,6 @@ from django.urls import path -from .views import MissionListView, MissionImageUploadView, RandomMissionCreateView, MissionCheckCompleteView, IsMissionCompleteView, MissionImageGetView, SaveMissionCompleteView +from .views import MissionListView, MissionImageUploadView, RandomMissionCreateView, MissionCheckCompleteView, \ + IsMissionCompleteView, MissionImageGetView, SaveMissionCompleteView, DeleteMissionImageView urlpatterns = [ path('list/', MissionListView.as_view({ @@ -24,5 +25,8 @@ })), path('save_mission_complete/', SaveMissionCompleteView.as_view({ 'post': 'create', + })), + path('delete_mission_image/', DeleteMissionImageView.as_view({ + 'patch': 'partial_update', })) ] \ No newline at end of file diff --git a/mission/views.py b/mission/views.py index 6b201e2..d5ea177 100644 --- a/mission/views.py +++ b/mission/views.py @@ -241,4 +241,15 @@ def create(self, request, *args, **kwargs): return Response({ "tdp_id": tdp_id, "is_success": tdp.mission_success, - }, status=status.HTTP_201_CREATED) \ No newline at end of file + }, status=status.HTTP_201_CREATED) + +class DeleteMissionImageView(viewsets.ModelViewSet): + permission_classes = [IsAuthenticated] + def partial_update(self, request, *args, **kwargs): + tdp_id = request.data.get('tdp_id', None) + if tdp_id is None: raise NoRequiredParameterException() + # 이미 백에서 삭제 작업 진행했을 수도 있음 + tdp = TravelDaysAndPlaces.objects.get(id=int(tdp_id)) + if tdp.mission_image is not None and tdp.mission_image != "": + tdp.mission_image.delete() + return Response(status=status.HTTP_204_NO_CONTENT) From a1f9810965f8a7ba922caf163681d6efcebade2b Mon Sep 17 00:00:00 2001 From: YimTaeKeun Date: Sun, 13 Jul 2025 22:29:07 +0900 Subject: [PATCH 3/4] =?UTF-8?q?MODIFY:=20API=20=EB=A7=A4=EC=BB=A4=EB=8B=88?= =?UTF-8?q?=EC=A6=98=20=EC=88=98=EC=A0=95=20(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mission/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mission/views.py b/mission/views.py index d5ea177..df40189 100644 --- a/mission/views.py +++ b/mission/views.py @@ -246,10 +246,11 @@ def create(self, request, *args, **kwargs): class DeleteMissionImageView(viewsets.ModelViewSet): permission_classes = [IsAuthenticated] def partial_update(self, request, *args, **kwargs): - tdp_id = request.data.get('tdp_id', None) - if tdp_id is None: raise NoRequiredParameterException() + travel_id = request.data.get('travel_id', None) + place_id = request.data.get('place_id', None) + if travel_id is None or place_id is None: raise NoRequiredParameterException() # 이미 백에서 삭제 작업 진행했을 수도 있음 - tdp = TravelDaysAndPlaces.objects.get(id=int(tdp_id)) + tdp = TravelDaysAndPlaces.objects.get(travel_id=travel_id, place_id=place_id) if tdp.mission_image is not None and tdp.mission_image != "": tdp.mission_image.delete() return Response(status=status.HTTP_204_NO_CONTENT) From 0f1b50ddceeea27bdd0b043202b3ccb69d00af76 Mon Sep 17 00:00:00 2001 From: YimTaeKeun Date: Sun, 13 Jul 2025 22:56:03 +0900 Subject: [PATCH 4/4] =?UTF-8?q?MODIFY:=20=EC=97=AC=ED=96=89=20=EC=8B=9C?= =?UTF-8?q?=EB=A6=AC=EC=96=BC=EB=9D=BC=EC=9D=B4=EC=A0=80=20tdp=20id=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=AF=B8=EC=85=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=82=AD=EC=A0=9C=20=EB=A7=A4=EC=BB=A4?= =?UTF-8?q?=EB=8B=88=EC=A6=98=20=EC=9B=90=EC=83=81=20=EB=B3=B5=EA=B5=AC=20?= =?UTF-8?q?(#128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mission/views.py | 7 +++---- tour/serializers.py | 9 +++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mission/views.py b/mission/views.py index df40189..d5ea177 100644 --- a/mission/views.py +++ b/mission/views.py @@ -246,11 +246,10 @@ def create(self, request, *args, **kwargs): class DeleteMissionImageView(viewsets.ModelViewSet): permission_classes = [IsAuthenticated] def partial_update(self, request, *args, **kwargs): - travel_id = request.data.get('travel_id', None) - place_id = request.data.get('place_id', None) - if travel_id is None or place_id is None: raise NoRequiredParameterException() + tdp_id = request.data.get('tdp_id', None) + if tdp_id is None: raise NoRequiredParameterException() # 이미 백에서 삭제 작업 진행했을 수도 있음 - tdp = TravelDaysAndPlaces.objects.get(travel_id=travel_id, place_id=place_id) + tdp = TravelDaysAndPlaces.objects.get(id=int(tdp_id)) if tdp.mission_image is not None and tdp.mission_image != "": tdp.mission_image.delete() return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/tour/serializers.py b/tour/serializers.py index fd5d8ec..702af2b 100644 --- a/tour/serializers.py +++ b/tour/serializers.py @@ -48,6 +48,15 @@ class Meta: model = Place fields = '__all__' + def to_representation(self, instance): + data = super().to_representation(instance) + try: + tdp = TravelDaysAndPlaces.objects.get(place_id=instance.id) + data['tdp_id'] = tdp.id + except TravelDaysAndPlaces.DoesNotExist: + pass + return data + class TravelDaysAndPlacesSerializer(serializers.ModelSerializer): # place = PlaceSerializer() # 장소 정보는 시리얼라이저를 통해 반환합니다.