pzx-web-api/app/api/v1/record.py

69 lines
2.3 KiB
Python

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_id>')
@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