Files
TestMesa/backend/rest/views.py
2024-12-17 13:07:06 -08:00

138 lines
5.1 KiB
Python

from django.shortcuts import render
from rest_framework import permissions, viewsets
from rest.serializers import UserSerializer, HubSerializer, HubMembershipSerializer, MessageSerializer, HubChannelSerializer
from django.contrib.auth.models import User
from rest_framework import status
from rest_framework.authtoken.models import Token
from hub.models import Hub, HubMembership, Message, HubChannel
from django.contrib.auth import authenticate, login
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
from rest_framework.permissions import IsAuthenticated
# Create your views here.
# class UserViewSet(viewsets.ModelViewSet):
# """
# API endpoint that allows users to be viewed or created
# """
# queryset = User.objects.all().order_by("-username")
# serializer_class = UserSerializer
# # permission_classes = [permissions.IsAuthenticated]
# def get_permissions(self):
# if self.action == 'create':
# permission_classes = []
# else:
# permission_classes = [permissions.IsAuthenticated]
# return [permission() for permission in permission_classes]
@api_view(['POST'])
def signup(request):
serializer = UserSerializer(data = request.data)
if serializer.is_valid():
serializer.save()
user = User.objects.get(username=request.data['username'])
user.set_password(request.data['password'])
user.save()
token = Token.objects.create(user=user)
return Response({"token": token.key, "user": serializer.data})
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['POST'])
def loginReq(request):
print(request.data)
user = authenticate(request, username=request.data['username'], password=request.data['password'])
if not user.check_password(request.data['password']):
return Response({"detail": "Not found."}, status=status.HTTP_404_NOT_FOUND)
login(request, user)
token, created = Token.objects.get_or_create(user=user)
serializer = UserSerializer(instance=user)
return Response({"token": token.key, "user": serializer.data})
@api_view(['GET'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def list_user_hubs(request):
# Filter hubs where the user is a member
user_hubs = HubMembership.objects.filter(user=request.user)
# print(user_hubs)
# Serialize the list of hubs
serializer = HubMembershipSerializer(user_hubs, many=True)
# print(serializer)
# Return the serialized data
return Response(serializer.data)
@api_view(['POST'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def list_channel_hubs(request):
# print("!!!!!!!!!!!!!", request.data["hub"])
specificHub = Hub.objects.get(name=request.data["hub"])
# print("1111111111111111 ",specificHub)
hub_channels = HubChannel.objects.filter(hub=specificHub)
# print("222222222222", hub_channels)
# Serialize the list of hubs
serializer = HubChannelSerializer(hub_channels, many=True)
# print("333333333333333", serializer.data)
# Return the serialized data
return Response(serializer.data)
@api_view(['POST'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def list_specific_channel_hub(request):
print("!!!!!!!!", request.data)
# Filter hubs where the user is a member
hub_channels = HubChannel.objects.get(id=request.data["id"])
print("Hub Channel!!!!!!!", hub_channels)
messages = hub_channels.messages.all().order_by('-created_at')
# Serialize the list of hubs
serializer = HubChannelSerializer(hub_channels)
messageSerializer = MessageSerializer(messages, many=True)
# Return the serialized data
return Response({
"hub": serializer.data,
"messages": messageSerializer.data
})
@api_view(['POST'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def list_specific_hub(request):
# Filter hubs where the user is a member
user_hubs = Hub.objects.get(name=request.data["name"])
# messages = user_hubs.messages.all().order_by('created_at')
# Serialize the list of hubs
serializer = HubSerializer(user_hubs)
# messageSerializer = MessageSerializer(messages, many=True)
# Return the serialized data
return Response({
"hub": serializer.data,
# "messages": messageSerializer.data
})
@api_view(['POST'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def post_Message_To_Hub(request):
serializer = MessageSerializer(data = request.data)
if serializer.is_valid():
serializer.save()
print(serializer.data)
return Response({"message": serializer.data})
print("Failed")
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)