def list(self, request): """ A method that tells if time is before mid-day or not. """ before_midday = Time.is_before_midday() content = {"before_midday": before_midday} return Response(content, status=status_code.HTTP_200_OK)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get("slackUserId") if not slack_id: content = {"status": "You're unauthorized to make this request"} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {"firstname": user.firstname, "lastname": user.lastname} if not user.is_active: content[ "status"] = "User has been deactivated. Contact the Ops team." return Response(content, status=status_code.HTTP_400_BAD_REQUEST) if not meal_in_progress: content["status"] = "There is no meal in progress" return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) before_midday = Time.is_before_midday() if user.is_tapped(): meal_type = "breakfast" if before_midday else "lunch" content["status"] = f"User has tapped in for {meal_type}" return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) mealservice = mealservice[0] if mealservice.count() else MealService() mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content["status"] = "Tap was successful" return Response(content, status=status_code.HTTP_200_OK)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get("slackUserId") if not slack_id: content = {"status": "You're unauthorized to make this request"} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {"firstname": user.firstname, "lastname": user.lastname} if not meal_in_progress: content["status"] = "There is no meal in progress" return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) else: before_midday = Time.is_before_midday() if user.is_tapped(): content["status"] = "User has tapped in for {0}".format("breakfast" if before_midday else "lunch") return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) if not mealservice.count(): mealservice = MealService() else: mealservice = mealservice[0] mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content["status"] = "Tap was successful" return Response(content, status=status_code.HTTP_200_OK)
def untap(self, request, pk): """ A method that untaps a user. --- parameters: - name: pk description: unique id of the user required: true type: string paramType: path - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = Time.is_before_midday() content = {} meal_in_progress = MealSession.in_progress() timenow = timezone.now() user = get_object_or_404(self.queryset, pk=pk) mealservice = MealService.objects.get(user=user, date=meal_in_progress[0].date) status = status_code.HTTP_200_OK if not meal_in_progress: content['status'] = 'There is no meal in progress' else: mealservice = mealservice.set_meal(before_midday, reverse=True) if not mealservice.untapped: untapped = [] else: untapped = json.loads(mealservice.untapped) log = { 'date_untapped': str(timenow), } untapped.append(log) mealservice.untapped = untapped mealservice.date_modified = timenow mealservice.save() content['status'] = 'Untap was successful' return Response(content, status=status)
def untap(self, request, pk): """ A method that untaps a user. --- parameters: - name: pk description: unique id of the user required: true type: string paramType: path - name: passphrase description: passphrase to allow authentication required: true type: string paramType: form """ before_midday = Time.is_before_midday() content = {} meal_in_progress = MealSession.in_progress() timenow = timezone.now() user = get_object_or_404(self.queryset, pk=pk) mealservice = MealService.objects.get(user=user, date=meal_in_progress[0].date) status = status_code.HTTP_200_OK if not meal_in_progress: content["status"] = "There is no meal in progress" else: mealservice = mealservice.set_meal(before_midday, reverse=True) if not mealservice.untapped: untapped = [] else: untapped = json.loads(mealservice.untapped) log = {"date_untapped": str(timenow)} untapped.append(log) mealservice.untapped = untapped mealservice.date_modified = timenow mealservice.save() content["status"] = "Untap was successful" return Response(content, status=status)
def nfctap(self, request): """ A method that taps a user via an NFC card. --- parameters: - name: slackUserId description: slack ID required: true type: string paramType: form """ slack_id = request.POST.get('slackUserId') if not slack_id: content = {'status': 'You\'re unauthorized to make this request'} return Response(content, status=status_code.HTTP_401_UNAUTHORIZED) user = get_object_or_404(self.queryset, slack_id=slack_id) meal_in_progress = MealSession.in_progress() content = {'firstname': user.firstname, 'lastname': user.lastname} if not meal_in_progress: content['status'] = 'There is no meal in progress' return Response(content, status=status_code.HTTP_406_NOT_ACCEPTABLE) else: before_midday = Time.is_before_midday() if user.is_tapped(): content['status'] = 'User has tapped in for {0}'.format( 'breakfast' if before_midday else 'lunch') return Response(content, status=status_code.HTTP_400_BAD_REQUEST) date_today = meal_in_progress[0].date mealservice = MealService.objects.filter(user=user, date=date_today) if not mealservice.count(): mealservice = MealService() else: mealservice = mealservice[0] api_auth_url = os.getenv( 'API_AUTH_URL') + '/users?email={}'.format(user.email) api_auth_headers = {'api-token': os.getenv('ANDELA_API_TOKEN')} auth_resp = None try: auth_resp = requests.get(api_auth_url, headers=api_auth_headers) except ConnectionError: return Response({'msg': 'user unable to tap auth'}, status=400) user_id = auth_resp.json()['values'][0]['id'] payload = auth_resp.json() jwt_token = generate_token(payload) authorization = 'Bearer {}'.format(jwt_token) headers = {'X-Location': 1, 'Authorization': authorization} meal_period = 'breakfast' if before_midday else 'lunch' andela_eats_url = os.getenv('ANDELA_EATS_URL') eats_url = urljoin(andela_eats_url, 'api/v1/orders/collect') data = { 'userId': user_id, 'orderType': meal_period, 'orderDate': datetime.strftime(datetime.now().date(), '%Y-%m-%d') } try: eats_resp = requests.post(eats_url, json=data, headers=headers) except: return Response({'msg': 'user unable to tap eats'}, status=400) mealservice = mealservice.set_meal(before_midday) mealservice = mealservice.set_user_and_date(user, date_today) mealservice.save() content['status'] = 'Tap was successful. ' eats_msg = eats_resp.json()['msg'] content['status'] += '{}'.format(eats_msg) return Response(content, status=status_code.HTTP_200_OK)