✨ Feat: [#64] 노코드툴 CRUD 및 시작, 끝 요청 로직 구현
This commit is contained in:
@@ -1 +1,163 @@
|
||||
# views.py
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status, mixins, viewsets
|
||||
from rest_framework.permissions import AllowAny, IsAuthenticated
|
||||
|
||||
from django.db import transaction
|
||||
|
||||
from .models import Code, Page, Element
|
||||
from .serializers import CodeSerializer
|
||||
from .permissions import IsOwnerOrMemberInCreateAndUpdateAndDelete
|
||||
from .services import NocodetoolObjectMapService
|
||||
|
||||
from users.models import User
|
||||
from portfolios.models import Portfolio
|
||||
from projects.models import Project
|
||||
|
||||
from bson import ObjectId
|
||||
|
||||
|
||||
class NoCodeToolAPIView(APIView):
|
||||
permission_classes = [IsAuthenticated, IsOwnerOrMemberInCreateAndUpdateAndDelete]
|
||||
|
||||
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):
|
||||
code_id = ObjectId(obj.code_id)
|
||||
|
||||
if not code_id:
|
||||
return Response({"message": "Not validated type or no object"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
obj_serializer = NocodetoolObjectMapService.mapping_model_serializer(related_type)
|
||||
|
||||
code = Code.objects.get(id=code_id)
|
||||
return Response({
|
||||
"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")
|
||||
related_id = request.query_params.get("id")
|
||||
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)
|
||||
if serializer.is_valid():
|
||||
code = serializer.save()
|
||||
obj.code_id = str(code.id)
|
||||
obj.save()
|
||||
|
||||
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
|
||||
def patch(self, request):
|
||||
related_type = request.query_params.get("type")
|
||||
related_id = request.query_params.get("id")
|
||||
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)
|
||||
|
||||
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)
|
||||
if serializer.is_valid():
|
||||
updated_code = serializer.save()
|
||||
|
||||
if thumbnail_file:
|
||||
obj.thumbnail = thumbnail_file
|
||||
obj.save(update_fields=["thumbnail"])
|
||||
|
||||
return Response({
|
||||
"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")
|
||||
related_id = request.query_params.get("id")
|
||||
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)
|
||||
|
||||
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()
|
||||
return Response({"message": "delete code success"}, status=status.HTTP_200_OK)
|
||||
|
||||
class NocodeToolWorkingAPIView(APIView):
|
||||
permission_classes = [IsAuthenticated, IsOwnerOrMemberInCreateAndUpdateAndDelete]
|
||||
@transaction.atomic
|
||||
def patch(self, request): # 수정 시작 or 종료
|
||||
related_type = request.query_params.get("type")
|
||||
related_id = request.query_params.get("id")
|
||||
action = request.query_params.get("action")
|
||||
obj = NocodetoolObjectMapService.mapping_model_instance(related_type, related_id)
|
||||
if not obj:
|
||||
return Response({"message": "No object"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if action == "start":
|
||||
if obj.now_worker:
|
||||
return Response({"message": f"{obj.now_worker} is working"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
obj.now_worker = request.user.nickname
|
||||
elif action == "end":
|
||||
if obj.now_worker and obj.now_worker == request.user.nickname:
|
||||
obj.now_worker = None
|
||||
else:
|
||||
return Response(
|
||||
{
|
||||
"message": f"{obj.now_worker} is working" if obj.now_worker else "nobody working now"
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
else:
|
||||
return Response({"message": "Not supported action"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
obj.save()
|
||||
|
||||
return Response({"message": f"work {action}"}, status=status.HTTP_200_OK)
|
||||
Reference in New Issue
Block a user