Esempio n. 1
0
    def post(self, **kwargs):
        """
		"""
        try:
            args_data = request.args.to_dict()
            post_data = request.get_json()

            # print(post_data)
            print(f'kwargs: {kwargs}')

            testquestion_data.load(post_data)

            # Check for already exising entry:

            db = c_app.config.get('MONGO_DATABASE')
            collection1 = 'common_test_master'
            collection2 = 'common_question_master'
            collection3 = 'common_user_master'

            customer_id = post_data.get('customerid')
            room_name = post_data.get('room_name')

            columns = {"_id": 0, "deleted": 0}
            queries = {"_id": ObjectId(customer_id)}
            user_data = FlaskMongo.find(collection3, columns, queries)

            if not user_data:
                response = {
                    "meta": self.meta,
                    "message": f"user with id {customer_id} does not exists",
                    "status": "failure"
                }
                FlaskLogger.log('post',
                                'add_tests_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.bad_code, self.headers

            elif user_data[0].get("account_type") != 'teacher':
                response = {
                    "meta": self.meta,
                    "message":
                    f"user with id {customer_id} is not allowed to create tests",
                    "status": "failure"
                }
                FlaskLogger.log('post',
                                'add_tests_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.process_error_code, self.headers

            elif user_data[0].get("no_free_trial") < 1:
                response = {
                    "meta": self.meta,
                    "message":
                    f"user with id {customer_id} has 0 trials left. Please renew subscription.",
                    "status": "failure"
                }
                FlaskLogger.log('post',
                                'add_tests_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.process_error_code, self.headers

            else:
                testid = str(uuid.uuid1()).replace("-", "")
                teacher_id = kwargs.get("_id")

                data1 = {
                    "id":
                    testid,
                    "teacher_id":
                    teacher_id,
                    "room_name":
                    room_name,
                    "details":
                    post_data.get("details"),
                    "schedule":
                    post_data.get("schedule"),
                    "duration":
                    post_data.get("duration"),
                    "start_time":
                    post_data.get("start_time"),
                    "end_time":
                    post_data.get("end_time"),
                    "no_mandatory_questions":
                    post_data.get("no_mandatory_questions"),
                    "deleted":
                    0
                }
                FlaskMongo.insert(db, collection1, data1)

                for qna in post_data.get("qna"):
                    data2 = {
                        "customerid": post_data.get("customerid"),
                        "testid": testid,
                        "question": qna.get("question"),
                        "option1": qna.get("options")[0],
                        "option2": qna.get("options")[1],
                        "option3": qna.get("options")[2],
                        "option4": qna.get("options")[3],
                        "answer": qna.get("answer"),
                        "deleted": 0
                    }
                    FlaskMongo.insert(db, collection2, data2)

                no_free_trial = user_data[0].get("no_free_trial")
                if no_free_trial > 0:
                    no_free_trial = no_free_trial - 1

                    queries = {"_id": ObjectId(customer_id)}
                    updates = {"no_free_trial": no_free_trial}
                    FlaskMongo.update(collection3, updates, queries)

                response = {
                    "meta": self.meta,
                    "message":
                    f"new test with id {testid} created successfully",
                    "status": "success"
                }
                FlaskLogger.log('post',
                                'add_tests_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.success_code, self.headers

        except ValidationError as e:
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": format_api_error(e.messages)
            }
            FlaskLogger.log('post',
                            'add_tests_info',
                            response,
                            input_data=str(post_data),
                            log_level='error')
            return response, self.bad_code, self.headers

        except Exception as e:
            # raise e
            # print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": str(e)
            }
            FlaskLogger.log('post',
                            'add_tests_info',
                            response,
                            input_data=str(post_data),
                            log_level='warning')
            return response, self.exception_code, self.headers
Esempio n. 2
0
    def post(self):
        '''
			A Test Attempt can be new or redo
		'''
        try:
            args_data = request.args.to_dict()
            post_data = request.get_json()
            post_data.update(args_data)

            print(post_data)

            testattempt_data.load(post_data)
            student_name = post_data.get("student_name")
            phone_no = post_data.get("phone_no")

            print(post_data.keys())

            # Check for already exising entry:

            db = c_app.config.get('MONGO_DATABASE')
            collection1 = 'common_test_student'
            collection2 = 'common_test_student_ques_answers'

            test_id = args_data.get("test_id")
            student_id = args_data.get("student_id")

            columns = {"_id": 0}
            queries = {
                "test_id": test_id,
                "student_id": student_id  #, "is_complete": True
            }
            test_data = FlaskMongo.find(collection1, columns, queries)
            test_qna_data = FlaskMongo.find(collection2, columns, queries)

            print(post_data)

            if test_data and test_qna_data:
                response = {
                    "meta": self.meta,
                    "message": f"Test {test_id} is under progress",
                    "status": "failure",
                }
                FlaskLogger.log('post',
                                'add_test_attempt_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.bad_code, self.headers
            else:
                data1 = {
                    "student_id": student_id,
                    "test_id": test_id,
                    "student_name": student_name,
                    "phone_no": phone_no,
                    "timestamp": datetime.now().isoformat()
                }
                FlaskMongo.insert(db, collection1, data1)

                data2 = [{
                    "student_id": student_id,
                    "test_id": test_id,
                    "question_id": qa.get("_id"),
                    "question": qa.get("question"),
                    "answer": qa.get("answer"),
                    "is_correct": qa.get("is_correct"),
                    "timestamp": datetime.now().isoformat()
                } for qa in post_data.get('qna')]

                # Bulk Insert Records Here:

                FlaskMongo.insert(db, collection2, data2, bulk=True)

                response = {
                    "meta": self.meta,
                    "message": f"test with id {test_id} started successfully",
                    "status": "success"
                }
                FlaskLogger.log('post',
                                'add_test_attempt_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.success_code, self.headers

        except ValidationError as e:
            # raise e
            # print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "errors": format_api_error(e.messages)
            }
            FlaskLogger.log('post',
                            'add_test_attempt_info',
                            response,
                            input_data=str(post_data),
                            log_level='error')
            return response, self.bad_code, self.headers

        except Exception as e:
            # raise e
            print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": str(e)
            }
            FlaskLogger.log('post',
                            'add_test_attempt_info',
                            response,
                            input_data=str(post_data),
                            log_level='warning')
            return response, self.exception_code, self.headers
Esempio n. 3
0
    def post(self):
        '''
		'''
        try:
            post_data = request.get_json()

            teacherusers_data.load(post_data)
            name = post_data.get("name")
            # mobile = post_data.get("mobile")
            print(post_data.keys())

            # Check for already exising entry:

            db = c_app.config.get('MONGO_DATABASE')
            collection = 'common_user_master'
            username = post_data.get("username")
            phone_no = post_data.get("phone_no")

            columns = {"_id": 0}
            queries = {"phone_no": phone_no}
            user_data = FlaskMongo.find(collection, columns, queries)

            print(post_data)

            if user_data != []:
                response = {
                    "meta": self.meta,
                    "message": f"user {username} is already registered",
                    "status": "failure",
                }
                FlaskLogger.log('post',
                                f'add_{self.account_type}_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.bad_code, self.headers

            post_data["account_type"] = self.account_type
            post_data["no_free_trial"] = 2
            post_data["is_active"] = True
            post_data["deleted"] = 0
            post_data["created"] = datetime.now().isoformat()
            FlaskMongo.insert(db, collection, post_data)

            response = {
                "meta": self.meta,
                "message": f"new user {name} added successfully",
                # "unique_id": post_data['unique_id'],
                "status": "success"
            }
            FlaskLogger.log('post',
                            f'add_{self.account_type}_info',
                            response,
                            input_data=str(post_data),
                            log_level='info')
            return response, self.success_code, self.headers

        except ValidationError as e:
            # raise e
            # print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "errors": format_api_error(e.messages)
            }
            FlaskLogger.log('post',
                            f'add_{self.account_type}_info',
                            response,
                            input_data=str(post_data),
                            log_level='error')
            return response, self.bad_code, self.headers

        except Exception as e:
            raise e
            print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": str(e)
            }
            FlaskLogger.log('post',
                            f'add_{self.account_type}_info',
                            response,
                            input_data=str(post_data),
                            log_level='warning')
            return response, self.exception_code, self.headers
Esempio n. 4
0
    def post(self):
        '''
		'''
        try:
            post_data = request.get_json()

            users_data.load(post_data)
            name = post_data.get("name")
            mobile = post_data.get("mobile")
            print(post_data.keys())

            if not post_data:
                response = {
                    "meta": self.meta,
                    "message": "unable to process request",
                    "status": "failure",
                }
                return response, self.bad_code, self.headers

            # Check for already exising entry:

            db = c_app.config.get('MONGO_DATABASE')
            collection = 'common_user_master'
            username = post_data.get("username")
            phone_no = post_data.get("phone_no")

            columns = {"_id": 0}
            queries = {"phone_no": phone_no}
            user_data = FlaskMongo.find(collection, columns, **queries)

            print(post_data)

            if user_data != []:
                response = {
                    "meta": self.meta,
                    "message": f"user {username} is already registered",
                    "status": "failure",
                }
                return response, self.bad_code, self.headers

            post_data["no_free_trial"] = 2
            post_data["is_active"] = True
            post_data["deleted"] = 0
            post_data["created"] = datetime.now().isoformat()
            FlaskMongo.insert(db, collection, post_data)

            response = {
                "meta": self.meta,
                "message": f"new user {name} added successfully",
                # "unique_id": post_data['unique_id'],
                "status": "success"
            }
            return response, self.success_code, self.headers

        except ValidationError as e:
            # raise e
            # print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "errors": e.messages
            }
            return response, self.bad_code, self.headers

        except Exception as e:
            # raise e
            print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": str(e)
            }
            return response, self.exception_code, self.headers
Esempio n. 5
0
    def post(self, **kwargs):
        '''
		'''
        try:
            post_data = request.get_json()

            rooms_data.load(post_data)
            print(post_data.keys())

            # Check for already exising entry:

            db = c_app.config.get('MONGO_DATABASE')
            collection = 'common_room_master'
            collection2 = 'common_user_master'
            teacher_id = post_data.get("teacher_id")
            room_name = post_data.get("room_name")

            columns = {"_id": 0}
            queries = {"teacher_id": teacher_id, "room_name": room_name}
            queries2 = {"_id": ObjectId(teacher_id)}
            room_data = FlaskMongo.find(collection, columns, queries)
            user_data = FlaskMongo.find(collection2, columns, queries2)

            print(post_data)
            print(f'room_data: {room_data}')

            if user_data == []:
                response = {
                    "meta": self.meta,
                    "message": f"teacher with id {teacher_id} does not exists",
                    "status": "failure",
                }
                FlaskLogger.log('post',
                                'add_rooms_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.bad_code, self.headers

            if room_data != []:
                response = {
                    "meta": self.meta,
                    "message": f"room {room_name} is already created",
                    "status": "failure",
                }
                FlaskLogger.log('post',
                                'add_rooms_info',
                                response,
                                input_data=str(post_data),
                                log_level='info')
                return response, self.bad_code, self.headers

            room_id = get_uuid1()
            post_data["room_id"] = room_id
            post_data["deleted"] = 0
            post_data["created"] = datetime.now().isoformat()
            FlaskMongo.insert(db, collection, post_data)

            response = {
                "meta": self.meta,
                "message": f"new room with id {room_id} added successfully",
                "status": "success"
            }
            FlaskLogger.log('post',
                            'add_rooms_info',
                            response,
                            input_data=str(post_data),
                            log_level='info')
            return response, self.success_code, self.headers

        except ValidationError as e:
            # raise e
            # print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "errors": format_api_error(e.messages)
            }
            FlaskLogger.log('post',
                            'add_rooms_info',
                            response,
                            input_data=str(post_data),
                            log_level='error')
            return response, self.bad_code, self.headers

        except Exception as e:
            # raise e
            print(e)
            response = {
                "meta": self.meta,
                "message": "unable to process request",
                "status": "failure",
                "reason": str(e)
            }
            FlaskLogger.log('post',
                            'add_rooms_info',
                            response,
                            input_data=str(post_data),
                            log_level='warning')
            return response, self.exception_code, self.headers