Пример #1
0
def drug_courses():
    if request.method == 'GET':
        limit = int(request.args.get('limit', 25))
        if not 0 < limit <= 100:
            return jsonify({'error': '\'limit\' must be in (0, 100]..'}), 400
        offset = int(request.args.get('offset', 0))
        if not 0 <= offset:
            return jsonify({'error': '\'limit\' must be in [0, +inf).'}), 400
        with db_connecton() as conn:
            res = r.table('drug_courses').pluck(
                'id', 'drug_name', 'diagnosis_id', 'start_time',
                'duration').skip(offset).limit(limit).run(conn)
        return jsonify({'drug_courses': list(res)}), 200
    elif request.method == 'POST':
        if any(_ not in COURSE_FIELDS for _ in request.json):
            return jsonify({'error': 'JSON contains unsupported fields.'}), 400
        course = request.json
        course.update({
            'user_phone_number': get_jwt_identity(),
            'intakes': list()
        })
        with db_connecton() as conn:
            res = r.table('drug_courses').insert(course).run(conn)
        if not db_operation_success(res):
            return jsonify({'error': 'An error occurred on server side.'}), 500
        return jsonify({
            'success': True,
            'drug_course_id': res['generated_keys'][0]
        }), 201
Пример #2
0
def course(course_id: str):
    with db_connecton() as conn:
        course_exists = r.table('drug_courses').get_all(course_id).count().eq(
            1).run(conn)
        if not course_exists:
            return jsonify(
                {'error': 'Drug course with given ID do not exist.'}), 400
        is_accessible = r.table('drug_courses').get(
            course_id)['user_phone_number'].eq(get_jwt_identity()).run(conn)
        if not is_accessible:
            return jsonify(
                {'error': 'You have no permissions to this course.'}), 403
        if request.method == 'GET':
            c = r.table('drug_courses').get(course_id).run(conn)
            return jsonify({'drug_course': c}), 200

        elif request.method == 'PATCH':
            if any(_ not in COURSE_FIELDS for _ in request.json):
                return jsonify({'error':
                                'JSON contains unsupported fields.'}), 400
            res = r.table('drug_courses').get(course_id).update(
                request.json, return_changes=True).run(conn)
            if not db_operation_success(res):
                return jsonify({'error':
                                'An error occurred on server side.'}), 500
            return jsonify({'drug_course': res['changes'][0]['new_val']}), 200
        elif request.method == 'DELETE':
            res = r.table('drug_courses').get(course_id).delete().run(conn)
            if not db_operation_success(res):
                return jsonify({'error':
                                'An error occurred on server side.'}), 500
            return jsonify({'success': True}), 200
Пример #3
0
def users():
    if not request.is_json:
        return abort(400, 'Missing JSON in request')
    if not all(_ in request.json for _ in ('phone_number', 'first_name', 'last_name')):
        return abort(400, 'Request must contain \'phone_number\', \'first_name\', \'last_name\' fields.')
    phone_number = request.json['phone_number']
    if not isinstance(phone_number, int):
        return abort(400, '\'phone_number\' is incorrect.')
    first_name = request.json['first_name']
    last_name = request.json['last_name']
    sms_code = generate_sms_code()

    with db_connecton() as conn:
        r.table('users').insert(
            {
                'phone_number': phone_number,
                'first_name': first_name,
                'last_name': last_name,
                'last_sms_code': sms_code,
            }
        ).run(conn)
    send_sms_code(phone_number, sms_code)
    return jsonify({
        'success': True
    })
Пример #4
0
def diagnoses():
    if request.method == 'GET':
        limit = int(request.args.get('limit', 25))
        if not 0 < limit <= 100:
            return jsonify({'error': '\'limit\' must be in (0, 100]..'}), 400
        offset = int(request.args.get('offset', 0))
        if not 0 <= offset:
            return jsonify({'error': '\'limit\' must be in [0, +inf).'}), 400
        with db_connecton() as conn:
            res = r.table('diagnoses').filter({
                'user_phone_number': get_jwt_identity()
            }).skip(offset).limit(limit).pluck(
                'id',
                'name',
                'created_at',
                'symptoms'
            ).run(conn)
        return jsonify({
            'diagnoses': list(res)
        }), 200

    elif request.method == 'POST':
        if any(_ not in DIAGNOSIS_FIELDS for _ in request.json):
            return jsonify({'error': 'JSON contains unsupported fields.'}), 400
        diagnosis = request.json
        diagnosis.update({
            'user_phone_number': get_jwt_identity(),
            'created_at': int(datetime.now().timestamp())
        })
        with db_connecton() as conn:
            res = r.table('diagnoses').insert(diagnosis).run(conn)
        if not db_operation_success(res):
            return jsonify({'error': 'An error occurred on server side.'}), 500
        return jsonify({
            'success': True,
            'diagnosis_id': res['generated_keys'][0]
        }), 201
Пример #5
0
def verify():
    if not request.is_json:
        return jsonify({'error': 'Missing JSON in request.'}), 400
    if not all(_ in request.json for _ in ('phone_number', 'sms_code')):
        return jsonify({'error': 'Request must contain \'phone_number\', \'sms_code\' fields.'}), 400
    phone_number = request.json.get('phone_number')
    if not isinstance(phone_number, int):
        return jsonify({'error': '\'phone_number\' is incorrect.'}), 400
    sms_code = request.json.get('sms_code')
    with db_connecton() as conn:
        is_good = r.table('users').get(phone_number)['last_sms_code'].eq(sms_code).run(conn)
    if not is_good:
        return jsonify({'error': 'Bad \'phone_number\' of \'sms_code\'.'}), 401
    access_token = create_access_token(identity=phone_number, expires_delta=timedelta(days=365))
    return jsonify(access_token=access_token)
Пример #6
0
def request_sms_code():
    if not request.is_json:
        return jsonify({'error': 'Missing JSON in request.'}), 400
    if 'phone_number' not in request.json:
        return jsonify({'error': 'Request must contain \'phone_number\' field.'}), 400
    phone_number = request.json['phone_number']
    if not isinstance(phone_number, int):
        return jsonify({'error': '\'phone_number\' is incorrect.'}), 400
    sms_code = generate_sms_code()
    with db_connecton() as conn:
        r.table('users').get(phone_number).update({
            'last_sms_code': sms_code
        }).run(conn)
    send_sms_code(phone_number, sms_code)
    return jsonify({
        'success': True
    })
Пример #7
0
def intakes(course_id: str):
    with db_connecton() as conn:
        course_exists = r.table('drug_courses').get_all(course_id).count().eq(
            1).run(conn)
        if not course_exists:
            return jsonify(
                {'error': 'Drug course with given ID do not exist.'}), 400
        is_accessible = r.table('drug_courses').get(
            course_id)['user_phone_number'].eq(get_jwt_identity()).run(conn)
        if not is_accessible:
            return jsonify(
                {'error': 'You have no permissions to this course.'}), 403
        if request.method == 'GET':
            limit = int(request.args.get('limit', 25))
            if not 0 < limit <= 100:
                return jsonify({'error':
                                '\'limit\' must be in (0, 100]..'}), 400
            offset = int(request.args.get('offset', 0))
            if not 0 <= offset:
                return jsonify({'error':
                                '\'limit\' must be in [0, +inf).'}), 400
            res = r.table('drug_courses').get(course_id)['intakes'].skip(
                offset).limit(limit).run(conn)
            return jsonify({'intakes': res}), 200
        elif request.method == 'POST':
            if 'at' not in request.json or len(request.json) > 1:
                return jsonify({'error':
                                'JSON contains unsupported fields.'}), 400
            at = request.json['at']
            res = r.table('drug_courses').get(course_id).update({
                'intakes':
                r.row['intakes'].append(at)
            }).run(conn)
            if not db_operation_success(res):
                return jsonify({'error':
                                'An error occurred on server side.'}), 500
            return jsonify({'success': True}), 200
Пример #8
0
def intakes_count(course_id: str):
    with db_connecton() as conn:
        count = r.table('drug_courses').get(course_id)['intakes'].count().run(
            conn)
        return jsonify({'intakes_count': count}), 200