Dashboard-XRoom/core/views/spaceView.py

71 lines
2.5 KiB
Python
Raw Normal View History

2025-05-25 13:08:21 +00:00
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status
from core.models.Space import Space
2025-05-27 11:19:54 +00:00
from core.models.AssetBundleRoom import AssetBundleRoom
2025-05-27 11:24:35 +00:00
from core.serializers.SpaceSerializer import SpaceSerializer , SpaceSerializerforadd
2025-05-25 13:08:21 +00:00
@api_view(['GET'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def getSpaces(request):
2025-05-27 08:50:55 +00:00
# Get the spaces associated with the authenticated user and join with AssetBundleRoom data
spaces = Space.objects.filter(userId=request.user).select_related('assetBundleRoomId')
2025-05-25 13:08:21 +00:00
2025-05-27 08:50:55 +00:00
# Serialize the spaces and include all fields from the related AssetBundleRoom
2025-05-27 11:04:02 +00:00
# Pass 'assetBundleRoomId' as it will be automatically included by select_related
2025-05-25 13:08:21 +00:00
serializer = SpaceSerializer(spaces, many=True)
# Return the serialized data as a response
return Response({
"spaces": serializer.data
2025-05-27 11:04:02 +00:00
}, status=status.HTTP_200_OK)
2025-05-27 11:19:54 +00:00
@api_view(['POST'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def addSpace(request):
# Make a mutable copy of the request data
data = request.data.copy()
data['userId'] = request.user.id # Automatically assign the authenticated user
# Retrieve the AssetBundleRoom instance from the provided ID
try:
asset_bundle_room = AssetBundleRoom.objects.get(id=data['assetBundleRoomId'])
except AssetBundleRoom.DoesNotExist:
return Response({"detail": "AssetBundleRoom not found."}, status=status.HTTP_404_NOT_FOUND)
# Assign the AssetBundleRoom instance to the data
2025-05-27 11:27:09 +00:00
data['assetBundleRoomId'] = asset_bundle_room.id
2025-05-27 11:19:54 +00:00
# Pass the request object to the serializer context
2025-05-27 11:24:35 +00:00
serializer = SpaceSerializerforadd(data=data)
2025-05-27 11:19:54 +00:00
if serializer.is_valid():
# Save the space using the validated data
space = serializer.save() # This automatically saves the space
# Return the response with the space data
return Response({
"message": "Space added successfully.",
"space": serializer.data # This gives you the serialized data of the saved space
}, status=status.HTTP_201_CREATED)
else:
# If validation fails, return the errors
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)