示例#1
0
def fitbit_sleep(user_id):
    """ 创建或更新今天的 sleep 记录
    API: https://dev.fitbit.com/build/reference/web-api/sleep/
    """
    user = load_user(user_id)
    oauth = get_user_oauth(user=user, provider='fitbit')

    if not oauth:
        return jsonify({'msg': 'Unauthorized'})

    fitbit = Fitbit(client_id=os.getenv('FITBIT_APP_ID'),
                    client_secret=os.getenv('FITBIT_SECRET'),
                    access_token=oauth.token['access_token'],
                    refresh_token=oauth.token['refresh_token'])

    # TODO: 如果没有 datetime 参数处理
    dt_str = request.args.get('datetime')
    dt = pendulum.parse(dt_str, strict=False)

    sleep_data = fitbit.sleep(date=dt.date(), user_id=oauth.provider_user_id)

    query = models.Sleep.query.filter_by(user=user, date=dt.date())

    try:
        sleep = query.one()
        sleep.data = sleep_data
        db.session.add(sleep)
        db.session.commit()
    except NoResultFound:
        sleep = models.Sleep(user=user, data=sleep_data, date=dt.date())
        db.session.add(sleep)
        db.session.commit()

    return jsonify(sleep.data['summary'])