from apiflask import APIBlueprint from flask import session from app import rpc from app.api.v1.exception.record import AddBodyRecordError, BodyRecordNotFound, BodyRecordChartError from app.api.v1.schema.record import BodyRecordIn, BodyRecordOut, BodyRecordsOut, BodyRecordsIn, BodyRecordChartIn, \ BodyRecordChartOut from app.util.auth import login_required record = APIBlueprint('record', __name__) @record.post('/') @record.doc(summary='添加身体记录', description='添加身体记录') @record.input(BodyRecordIn, location='json') @login_required def add_record(json_data): try: rpc.body_record.add(**{ 'user_id': session['user_id'], 'height': json_data['height'], 'weight': json_data['weight'], 'bmi': json_data['bmi'] }) except Exception as e: raise AddBodyRecordError(extra_data={'error_docs': str(e)}) return {'msg': 'add body record success'} @record.get('/') @record.doc(summary='查询单条身体记录', description='查询单条身体记录') @record.output(BodyRecordOut) @login_required def get_record(record_id): try: result = rpc.body_record.get_one(record_id) except Exception as e: raise BodyRecordNotFound(extra_data={'error_docs': str(e)}) return result @record.get('/list') @record.doc(summary='查询身体记录列表', description='查询身体记录列表') @record.input(BodyRecordsIn, location='query') @record.output(BodyRecordsOut) @login_required def get_records(query_data): try: sort = query_data.get('sort', '-create_time') results = rpc.body_record.get_all_by_user(session['user_id'], sort) except Exception as e: raise BodyRecordNotFound(extra_data={'error_docs': str(e)}) return {'records': results} @record.get('/chart') @record.doc(summary='查询身体记录图表', description='查询身体记录图表') @record.input(BodyRecordChartIn, location='query') @record.output(BodyRecordChartOut) @login_required def get_record_charts(query_data): try: period = query_data.get('period', 'week') current_date = query_data['current_date'] result = rpc.body_record.get_record_charts(session['user_id'], current_date, period) except Exception as e: raise BodyRecordChartError(extra_data={'error_docs': str(e)}) return result