✏️ Fix: [#99] 노코드툴 모델 대규모 수정

This commit is contained in:
sm4640
2025-12-29 17:46:26 +09:00
parent 85e285e737
commit 196498d879
3 changed files with 225 additions and 90 deletions

View File

@@ -5,7 +5,7 @@ from rest_framework.permissions import AllowAny, IsAuthenticated
from django.db import transaction
from .models import Code, Page, Element
from .models import Code
from .serializers import CodeSerializer
from .permissions import IsOwnerOrMemberInCreateAndUpdateAndDelete, IsNotPublished
from .services import NocodetoolObjectMapService, NocodetoolHitService
@@ -24,25 +24,25 @@ class NoCodeToolAPIView(APIView):
def get(self, request):
related_type = request.query_params.get("type")
related_id = request.query_params.get("id")
code_id = None
if obj := NocodetoolObjectMapService.mapping_model_instance(related_type, related_id):
if obj.is_published:
NocodetoolHitService.hit_once(obj, request)
code_id = ObjectId(obj.code_id)
if not code_id:
obj = NocodetoolObjectMapService.mapping_model_instance(related_type, related_id)
if not obj or not obj.code_id:
return Response({"message": "Not validated type or no object"}, status=status.HTTP_400_BAD_REQUEST)
if obj.is_published:
NocodetoolHitService.hit_once(obj, request)
code = Code.objects.filter(id=ObjectId(obj.code_id)).first()
if not code:
return Response({"message": "No code object"}, status=status.HTTP_400_BAD_REQUEST)
obj_serializer = NocodetoolObjectMapService.mapping_model_serializer(related_type)
code = Code.objects.filter(id=code_id).first()
if not code:
return Response({"message": "No code object"}, status=status.HTTP_400_BAD_REQUEST)
return Response({
"obj_info": obj_serializer(obj).data,
"codes": CodeSerializer(code).data
}, status=status.HTTP_200_OK)
"obj_info": obj_serializer(obj).data,
"codes": CodeSerializer(code).data
}, status=status.HTTP_200_OK)
@transaction.atomic
def post(self, request):
related_type = request.query_params.get("type")
@@ -50,32 +50,33 @@ class NoCodeToolAPIView(APIView):
obj = NocodetoolObjectMapService.mapping_model_instance(related_type, related_id)
if not obj:
return Response({"message": "No object"}, status=status.HTTP_400_BAD_REQUEST)
if not obj.now_worker:
return Response({"message": "start edit first"}, status=status.HTTP_400_BAD_REQUEST)
if obj.now_worker != request.user.nickname:
return Response({"message": f"{obj.now_worker} is working now"}, status=status.HTTP_400_BAD_REQUEST)
data = request.data.copy()
thumbnail_file = data.pop("thumbnail", None)
obj_serializer = NocodetoolObjectMapService.mapping_model_serializer(related_type)
serializer = CodeSerializer(data=request.data, context={'request': request})
serializer = CodeSerializer(data=data, context={'request': request})
if serializer.is_valid():
code = serializer.save()
obj.code_id = str(code.id)
obj.save()
obj.save(update_fields=["code_id"])
if thumbnail_file:
obj.thumbnail = thumbnail_file
obj.save(update_fields=["thumbnail"])
return Response({
"obj_info": obj_serializer(obj).data,
"codes": CodeSerializer(code).data
}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@transaction.atomic
@@ -85,21 +86,25 @@ class NoCodeToolAPIView(APIView):
obj = NocodetoolObjectMapService.mapping_model_instance(related_type, related_id)
if not obj:
return Response({"message": "No object"}, status=status.HTTP_400_BAD_REQUEST)
if not obj.now_worker:
return Response({"message": "start edit first"}, status=status.HTTP_400_BAD_REQUEST)
if obj.now_worker != request.user.nickname:
return Response({"message": f"{obj.now_worker} is working now"}, status=status.HTTP_400_BAD_REQUEST)
if not obj.code_id:
return Response({'message': 'No code object'}, status=status.HTTP_400_BAD_REQUEST)
code = Code.objects.filter(id=ObjectId(obj.code_id)).first()
if not code:
return Response({'message': 'No code object'}, status=status.HTTP_400_BAD_REQUEST)
data = request.data.copy()
thumbnail_file = data.pop("thumbnail", None)
obj_serializer = NocodetoolObjectMapService.mapping_model_serializer(related_type)
serializer = CodeSerializer(code, data=data, partial=True, context={'request': request})
if serializer.is_valid():
updated_code = serializer.save()
@@ -112,8 +117,9 @@ class NoCodeToolAPIView(APIView):
"obj_info": obj_serializer(obj).data,
"codes": CodeSerializer(updated_code).data
}, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@transaction.atomic
def delete(self, request):
related_type = request.query_params.get("type")
@@ -121,20 +127,25 @@ class NoCodeToolAPIView(APIView):
obj = NocodetoolObjectMapService.mapping_model_instance(related_type, related_id)
if not obj:
return Response({"message": "No object"}, status=status.HTTP_400_BAD_REQUEST)
if not obj.now_worker:
return Response({"message": "start edit first"}, status=status.HTTP_400_BAD_REQUEST)
if obj.now_worker != request.user.nickname:
return Response({"message": f"{obj.now_worker} is working now"}, status=status.HTTP_400_BAD_REQUEST)
if not obj.code_id:
return Response({'message': 'No code object'}, status=status.HTTP_400_BAD_REQUEST)
code = Code.objects.filter(id=ObjectId(obj.code_id)).first()
if not code:
return Response({'message': 'No code object'}, status=status.HTTP_400_BAD_REQUEST)
code.delete()
obj.code_id = None
obj.thumbnail = None
obj.save()
obj.save(update_fields=["code_id", "thumbnail"])
return Response({"message": "delete code success"}, status=status.HTTP_200_OK)
class NocodeToolWorkingAPIView(APIView):