From d9023f37d581dc502f34e6da0f453d830bb753d3 Mon Sep 17 00:00:00 2001 From: MG Date: Sat, 9 Jun 2018 06:59:24 +0200 Subject: [PATCH] Add booking api endpoint --- roofis2/core/urls.py | 4 +--- roofis2/roomservice/api/__init__.py | 0 roofis2/roomservice/api/serializers.py | 20 ++++++++++++++++++++ roofis2/roomservice/api/urls.py | 7 +++++++ roofis2/roomservice/api/views.py | 21 +++++++++++++++++++++ roofis2/roomservice/urls.py | 4 +++- roofis2/roomservice/views.py | 2 +- 7 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 roofis2/roomservice/api/__init__.py create mode 100644 roofis2/roomservice/api/serializers.py create mode 100644 roofis2/roomservice/api/urls.py create mode 100644 roofis2/roomservice/api/views.py diff --git a/roofis2/core/urls.py b/roofis2/core/urls.py index 04b87fe..67217f3 100644 --- a/roofis2/core/urls.py +++ b/roofis2/core/urls.py @@ -20,7 +20,6 @@ from rest_framework.documentation import include_docs_urls from rest_framework.permissions import AllowAny from django.contrib.auth import views as auth_views - urlpatterns = [ path('admin/', admin.site.urls), path('', include('roomservice.urls')), @@ -28,9 +27,8 @@ urlpatterns = [ path('login/', auth_views.login, {'template_name': 'login.jinja'}, name='login'), path('logout/', auth_views.logout, name='logout'), - # APIs - # path('api/', include('respool.api.urls')), + path('api/', include('roomservice.api.urls')), # API Docs # path('api/docs/', include_docs_urls(title='Respool API Docs', public=True, diff --git a/roofis2/roomservice/api/__init__.py b/roofis2/roomservice/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/roofis2/roomservice/api/serializers.py b/roofis2/roomservice/api/serializers.py new file mode 100644 index 0000000..ca40138 --- /dev/null +++ b/roofis2/roomservice/api/serializers.py @@ -0,0 +1,20 @@ +from roomservice.models import Booking, Room +from rest_framework import serializers + + +class RoomSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Room + fields = ('id',) + + +class BookingSerializer(serializers.HyperlinkedModelSerializer): + room = RoomSerializer(many=False, read_only=True) + start_date = serializers.DateField(format='iso-8601') + end_date = serializers.DateField(format='iso-8601') + start_time = serializers.TimeField(format='iso-8601') + end_time = serializers.TimeField(format='iso-8601') + + class Meta: + model = Booking + fields = ('id', 'room', 'start_date', 'end_date', 'start_time', 'end_time') diff --git a/roofis2/roomservice/api/urls.py b/roofis2/roomservice/api/urls.py new file mode 100644 index 0000000..2a68b8a --- /dev/null +++ b/roofis2/roomservice/api/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +app_name = 'roomservice.api' +urlpatterns = [ + path('booking', views.ApiBooking.as_view(), name='api-booking'), +] \ No newline at end of file diff --git a/roofis2/roomservice/api/views.py b/roofis2/roomservice/api/views.py new file mode 100644 index 0000000..630bbe5 --- /dev/null +++ b/roofis2/roomservice/api/views.py @@ -0,0 +1,21 @@ +from __future__ import unicode_literals + +from roomservice.models import Booking +from roomservice.api.serializers import BookingSerializer + +from rest_framework import generics +from rest_framework.decorators import permission_classes +from rest_framework.permissions import IsAuthenticated, AllowAny + + +@permission_classes((AllowAny,)) +class ApiBooking(generics.ListAPIView): + serializer_class = BookingSerializer + + def get_queryset(self): + queryset = Booking.objects.all() + roomId = self.request.query_params.get('room_id') + + if roomId: + queryset = queryset.filter(room=roomId) + return queryset diff --git a/roofis2/roomservice/urls.py b/roofis2/roomservice/urls.py index f0878f4..271fece 100644 --- a/roofis2/roomservice/urls.py +++ b/roofis2/roomservice/urls.py @@ -1,4 +1,4 @@ -from django.urls import path +from django.urls import path, include from . import views app_name = 'roomservice' @@ -10,4 +10,6 @@ urlpatterns = [ path('booking', views.booking, name='booking'), path('search', views.search, name='search'), path('search', views.location_based_search, name='location-based-search'), + + path('roomservice', include('roomservice.api.urls')) ] diff --git a/roofis2/roomservice/views.py b/roofis2/roomservice/views.py index 32485ba..55d2b88 100644 --- a/roofis2/roomservice/views.py +++ b/roofis2/roomservice/views.py @@ -1,4 +1,4 @@ -from roomservice.models import Room, Favorite +from roomservice.models import Room, Favorite, Booking from django.shortcuts import render, redirect import logging