1+ from constance import config
12from django .shortcuts import get_object_or_404
23from rest_framework import status
3- from rest_framework .decorators import api_view
4+ from rest_framework .decorators import api_view , permission_classes
5+ from rest_framework .exceptions import NotAcceptable
46from rest_framework .pagination import PageNumberPagination
7+ from rest_framework .permissions import IsAuthenticated
58from rest_framework .response import Response
69from utils .random_item import random_element_list
7- from .models import Event , Interaction , City
8- from .serializers import CitySerializer , EventSerializer , InteractionSerializer
10+
11+ from ideas .models import IdeaParticipant
12+ from ideas .serializers import IdeaParticipantsIdeasSerializer
13+ from participants .models import User
14+ from participants .permissions import IsStaff
15+ from participants .serializers import UserSerializer
16+
17+ from .models import Event , Interaction , City , Meeting , Attendance
18+ from .serializers import CitySerializer , EventSerializer , InteractionSerializer , MeetingSerializer
19+ from .serializers import AttendanceRegisterSerializer
920
1021
1122@api_view (['GET' , ])
@@ -32,6 +43,14 @@ def event_detail(request, event_id):
3243def event_featured (request ):
3344 """
3445 Returns event featured
46+ ---
47+ GET:
48+ parameters:
49+ - name: city
50+ description: set city_id to filter events by city
51+ type: string
52+ required: false
53+ paramType: query
3554 """
3655 events = Event .objects .filter (is_active = True , is_featured = True )
3756
@@ -68,6 +87,14 @@ def event_featured(request):
6887def event_interaction (request , event_id ):
6988 """
7089 Returns event interactions
90+ ---
91+ GET:
92+ parameters:
93+ - name: pagination
94+ description: set true if you want paginated results
95+ type: string
96+ required: false
97+ paramType: query
7198 """
7299 event = get_object_or_404 (Event , pk = event_id , is_active = True )
73100 interactions = Interaction .objects .filter (event = event , is_active = True )
@@ -102,6 +129,14 @@ def event_interaction_vote(request, interaction_id):
102129def event_list (request ):
103130 """
104131 Returns event list
132+ ---
133+ GET:
134+ parameters:
135+ - name: city
136+ description: set city_id to filter events by city
137+ type: string
138+ required: false
139+ paramType: query
105140 """
106141 events = Event .objects .all ()
107142 if request .GET .get ('city' ):
@@ -126,6 +161,14 @@ def event_list(request):
126161def event_upcoming_list (request ):
127162 """
128163 Returns upcoming event list
164+ ---
165+ GET:
166+ parameters:
167+ - name: city
168+ description: set city_id to filter events by city
169+ type: string
170+ required: false
171+ paramType: query
129172 """
130173 events = Event .objects .filter (is_upcoming = True , is_active = True )
131174 if request .GET .get ('city' ):
@@ -150,6 +193,14 @@ def event_upcoming_list(request):
150193def event_past_list (request ):
151194 """
152195 Returns past event list
196+ ---
197+ GET:
198+ parameters:
199+ - name: city
200+ description: set city_id to filter events by city
201+ type: string
202+ required: false
203+ paramType: query
153204 """
154205 events = Event .objects .filter (is_upcoming = False , is_active = True )
155206 if request .GET .get ('city' ):
@@ -168,3 +219,43 @@ def event_past_list(request):
168219 else :
169220 serializer = EventSerializer (events , many = True )
170221 return Response (serializer .data , status = status .HTTP_200_OK )
222+
223+
224+ @api_view (['GET' , ])
225+ @permission_classes ((IsAuthenticated , IsStaff ))
226+ def meeting_list (request ):
227+ """
228+ Returns meetings list to register attendance
229+ ---
230+ GET:
231+ response_serializer: events.serializers.MeetingSerializer
232+ """
233+ meetings = Meeting .objects .all ().filter (is_active = True )
234+ serializer = MeetingSerializer (meetings , many = True )
235+ return Response (serializer .data , status = status .HTTP_200_OK )
236+
237+
238+ @api_view (['POST' , ])
239+ @permission_classes ((IsAuthenticated , IsStaff ))
240+ def register_attendance (request ):
241+ """
242+ Register attendance to a meeting
243+ ---
244+ POST:
245+ serializer: events.serializers.AttendanceRegisterSerializer
246+ """
247+ serializer = AttendanceRegisterSerializer (data = request .data )
248+ if serializer .is_valid (raise_exception = True ):
249+ meeting = get_object_or_404 (Meeting , pk = serializer .validated_data ['meeting_id' ])
250+ user = get_object_or_404 (User , email = serializer .validated_data ['user_email' ])
251+ try :
252+ Attendance .objects .create (meeting = meeting , participant = user )
253+ except Exception as e :
254+ print (e )
255+ raise NotAcceptable (config .PARTICIPANT_REGISTERED )
256+
257+ idea_participant = IdeaParticipant .objects .filter (user = user )
258+ user_serializer = UserSerializer (user )
259+ idea_serializer = IdeaParticipantsIdeasSerializer (idea_participant , many = True )
260+ return Response ({'user' : user_serializer .data ,
261+ 'ideas' : idea_serializer .data }, status = status .HTTP_200_OK )
0 commit comments