Dashboard-XRoom/core/views/spaceView.py
2025-06-01 17:31:42 +03:30

84 lines
3.1 KiB
Python

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
from core.models.AssetBundleRoom import AssetBundleRoom
from core.serializers.SpaceSerializer import SpaceSerializer , SpaceSerializerforadd
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
@api_view(['GET'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def getSpaces(request):
# Get the spaces associated with the authenticated user and join with AssetBundleRoom data
spaces = Space.objects.filter(userId=request.user).select_related('assetBundleRoomId')
# Serialize the spaces and include all fields from the related AssetBundleRoom
# Pass 'assetBundleRoomId' as it will be automatically included by select_related
serializer = SpaceSerializer(spaces, many=True)
# Return the serialized data as a response
return Response({
"spaces": serializer.data
}, status=status.HTTP_200_OK)
@swagger_auto_schema(
method='post',
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['assetBundleRoomId', 'name', 'description', 'capacity'],
properties={
'assetBundleRoomId': openapi.Schema(type=openapi.TYPE_STRING, default='1'),
'name': openapi.Schema(type=openapi.TYPE_STRING, default='ROOM1'),
'description': openapi.Schema(type=openapi.TYPE_STRING, default='TEST DES'),
'capacity': openapi.Schema(type=openapi.TYPE_STRING, default='12'),
}
)
)
@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
data['assetBundleRoomId'] = asset_bundle_room.id
# Pass the request object to the serializer context
serializer = SpaceSerializerforadd(data=data)
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)