✨ 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