From d373664e94b68e5c4a70e2a20c73d694d9e880af Mon Sep 17 00:00:00 2001 From: Catherine Angel Date: Sun, 25 Feb 2024 22:28:47 +0700 Subject: [PATCH] [GREEN] update field status in venue and add update status view --- venue/migrations/0003_alter_venue_status.py | 18 ++++++++++++++++ venue/models.py | 8 ++++++- venue/serializers.py | 5 +++++ venue/urls.py | 2 ++ venue/views.py | 23 +++++++++++++++------ 5 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 venue/migrations/0003_alter_venue_status.py diff --git a/venue/migrations/0003_alter_venue_status.py b/venue/migrations/0003_alter_venue_status.py new file mode 100644 index 0000000..05df8ee --- /dev/null +++ b/venue/migrations/0003_alter_venue_status.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.9 on 2024-02-25 15:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('venue', '0002_alter_photo_image'), + ] + + operations = [ + migrations.AlterField( + model_name='venue', + name='status', + field=models.CharField(choices=[('NONE', 'NONE'), ('PENDING', 'PENDING'), ('WAITLIST', 'WAITLIST'), ('CONFIRMED', 'CONFIRMED'), ('CANCELLED', 'CANCELLED')], default='NONE', max_length=16), + ), + ] diff --git a/venue/models.py b/venue/models.py index 66a1436..9558a8c 100644 --- a/venue/models.py +++ b/venue/models.py @@ -8,7 +8,13 @@ class Venue(models.Model): name = models.CharField(max_length=255) address = models.CharField(max_length=255) price = models.IntegerField() - status = models.CharField(max_length=255) + status = models.CharField(max_length=16, default='NONE', choices=[ + ('NONE', 'NONE'), + ('PENDING', 'PENDING'), + ('WAITLIST', 'WAITLIST'), + ('CONFIRMED', 'CONFIRMED'), + ('CANCELLED', 'CANCELLED'), + ]) contact_name = models.CharField(max_length=255) contact_phone_number = models.CharField(max_length=15) event = models.IntegerField() diff --git a/venue/serializers.py b/venue/serializers.py index c08a404..94f263f 100644 --- a/venue/serializers.py +++ b/venue/serializers.py @@ -12,3 +12,8 @@ class VenueSerializer(serializers.ModelSerializer): class Meta: model = Venue fields = '__all__' + +class VenueStatusSerializer(serializers.ModelSerializer): + class Meta: + model = Venue + fields = ['status'] \ No newline at end of file diff --git a/venue/urls.py b/venue/urls.py index a3d49c2..eb058d8 100644 --- a/venue/urls.py +++ b/venue/urls.py @@ -5,11 +5,13 @@ VenueRetrieveUpdateDestroyView, PhotoCreateView, PhotoRetrieveUpdateDestroyView, + VenueStatusUpdateAPIView ) urlpatterns = [ path('venues/', VenueListCreateView.as_view(), name='venue-list-create'), path('venues//', VenueRetrieveUpdateDestroyView.as_view(), name='venue-retrieve-update-destroy'), + path('venues//status/', VenueStatusUpdateAPIView.as_view(), name='venue-status-update'), path('venues/event//', VenueEventListView.as_view(), name='venue-event-list'), path('photos/', PhotoCreateView.as_view(), name='photo-create'), path('photos//', PhotoRetrieveUpdateDestroyView.as_view(), name='photo-retrieve-update-destroy'), diff --git a/venue/views.py b/venue/views.py index bfcb5f1..2017dc7 100644 --- a/venue/views.py +++ b/venue/views.py @@ -1,13 +1,10 @@ -from django.shortcuts import render - -# Create your views here. - +from rest_framework import status from rest_framework import generics from rest_framework.views import APIView from rest_framework.response import Response from .models import Venue, Photo -from .serializers import VenueSerializer, PhotoSerializer - +from .serializers import VenueSerializer, PhotoSerializer, VenueStatusSerializer +from rest_framework.permissions import IsAuthenticated class VenueListCreateView(generics.ListCreateAPIView): queryset = Venue.objects.all() @@ -31,3 +28,17 @@ class PhotoCreateView(generics.CreateAPIView): class PhotoRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView): queryset = Photo.objects.all() serializer_class = PhotoSerializer + +class VenueStatusUpdateAPIView(APIView): + permission_classes = [IsAuthenticated] + def patch(self, request, pk): + try: + venue = Venue.objects.get(pk=pk) + except Venue.DoesNotExist: + return Response({'message': 'Venue not found'}, status=status.HTTP_404_NOT_FOUND) + + serializer = VenueStatusSerializer(venue, data=request.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) \ No newline at end of file