Example #1
0
def hello(data):
    """hello world"""
    with get_session() as s:
        s.add(HelloLog(name=data["name"]))
        s.commit()

        return succeed()
Example #2
0
def logout():
    # 更新 token,即让所有的终端下线
    session.clear()
    s = g.mysql_session
    user = g.user
    user.reset_token(s)
    return succeed(msg="注销成功")
Example #3
0
def user_info():
    s = g.mysql_session
    user = g.user
    response = dict(
        nickname=user.nickname,
        email=user.email,
        is_admin=1 if user.admin else 0,
    )
    return succeed(data=response)
Example #4
0
def get_home_checklists():
    """
    获取首页的清单列表
    :return:
    """
    s = g.mysql_session
    raw_scene_id = KvConfig.get_value_of_key(
        s, KvConfig.KEY_HOME_CHECKLIST_SCENE_ID)
    checklists_res = []
    if raw_scene_id is None:
        return succeed(data=checklists_res)

    checklists = Checklist.get_list_by_scene(s, int(raw_scene_id))
    checklist_ids = [x.id for x in checklists]

    # 检索自己是否打卡的相关信息
    my_reviews_id_map = {}
    checklist_count_map = {}
    user = None
    if g.user:
        user = g.user
        my_reviews = ChecklistReview.get_today_list_of_user(s, user.id)
        my_reviews_id_map = {x.checklist_id: x for x in my_reviews}
        checklist_count_map = ChecklistReview.get_reviews_count_of_n_days_before(
            s, user.id, checklist_ids)

    for checklist in checklists:
        single_checklist_info = dict(
            id=checklist.id,
            description=checklist.description,
            checked_count=checklist_count_map.get(checklist.id, 0),
            checked=0,
        )
        if my_reviews_id_map.get(checklist.id):
            single_checklist_info["checked"] = 1
            review = my_reviews_id_map.get(checklist.id)
            last_review = dict(description=review.detail, )
            last_review["author_nickname"] = user.nickname
            single_checklist_info["last_review"] = last_review

        checklists_res.append(single_checklist_info)

    return succeed(data=checklists_res)
Example #5
0
def register(json_dict):
    email = json_dict["email"]
    password = json_dict["password"]

    with get_session() as s:
        user = User.get_by_email(s, email)
        if user:
            return failed(msg="用户已经存在")

        user = User.register(s, email, email, password)
        return succeed(msg="注册成功,请认证")
Example #6
0
def get_all_of():
    s = g.mysql_session
    user = g.user
    invitation_codes = UserInvitation.get_all_code_of_user(s, user.id)
    res = []
    for invitation_code in invitation_codes:
        res.append(dict(
            code=invitation_code.code,
            is_used=(1 if invitation_code.is_used else 0),
        ))
    return succeed(data=res)
Example #7
0
def add():
    s = g.mysql_session
    user = g.user
    user_invitation_count = UserInvitation.count_of_user(s, user.id)
    if user_invitation_count >= 10:
        return failed(code=402, msg="邀请码个数已超上限")
    user_invitation_code = UserInvitation.add(s, user.id)
    return succeed(msg="已成功生成",
                   data=dict(
                       code=user_invitation_code.code,
                       is_used=0,
                   ))
Example #8
0
def get_tabs_of_home():
    with get_session() as s:
        tabs = Tab.get_by_location(s, Tab.LOCATION_HOME)
        res = []
        for tab in tabs:
            res.append(
                dict(
                    id=tab.id,
                    display_name=tab.display_name,
                    slug=tab.slug,
                ))
        return succeed(data=res)
Example #9
0
def star():
    json_dict = g.json_dict
    review_id = json_dict["review_id"]
    s = g.mysql_session
    user = g.user
    review = ChecklistReview.get_by_id(s, review_id)
    is_add_success = ChecklistReviewStar.add_star(s, user.id, review.id)
    if is_add_success:
        review = ChecklistReview.add_star_count(s, review.id, 1)
    return succeed(data=dict(
        review_id=review_id,
        star_count=review.star_count,
        has_stared=1,
    ))
Example #10
0
def kindle():
    sender = request.form["sender"]
    subject = request.form["subject"]
    recipient = request.form["recipient"]
    attachment = request.files["attachment-1"]
    logging.info("sender: {}, recipient: {}, subject: {}, files: {}".format(
        sender, recipient, subject, attachment))

    with get_session() as s:
        item = Kindle(sender=sender, content=attachment.read())
        s.add(item)
        s.commit()

        return succeed()
Example #11
0
def login(json_dict):
    email = json_dict["email"]
    password = json_dict["password"]

    with get_session() as s:
        user = User.get_by_email(s, email)
        if not user:
            return failed(msg="邮箱或密码不对")

        user = User.login(s, email, password)
        if not user:
            return failed(msg="邮箱或密码不对")

        return succeed(msg="登录成功", data={"token": user.token})
Example #12
0
def get_motto():
    data = dict(
        details="今天可以做点什么有意义的事情?",
        source="见周边",
    )
    with get_session() as s:
        motto_kv = KvConfig.get_value_of_key(session=s, key=KvConfig.KEY_MOTTO_ID)
        if motto_kv is None:
            motto = Motto.get_last(session=s)
        else:
            motto = Motto.get_by_id(s, int(motto_kv.value))
        if motto:
            data["details"] = motto.details
            data["source"] = motto.source
        return succeed(data=data)
Example #13
0
def login():
    json_dict = g.json_dict
    email = json_dict["email"]
    password = json_dict["password"]

    with get_session() as s:
        user = User.get_by_email(s, email)
        if not user:
            return failed(msg="邮箱或密码不对=_=")

        user = User.login(s, email, password)
        if not user:
            return failed(msg="邮箱或密码不对。。")
        session["token"] = user.token
        return succeed(msg="登录成功", data={"token": user.token})
Example #14
0
def get_all():
    mysql_session = g.mysql_session
    page_no = request.args.get("page", 1)
    page_size = request.args.get("size", 10)
    page_size = min(page_size, 100)
    offset = (page_no - 1) * page_size
    users = User.get_list(mysql_session, offset=offset, limit=page_size)
    data = []
    for user in users:
        data.append(
            dict(
                id=user.id,
                nickname=user.nickname,
                email=user.email,
                is_admin=(1 if user.admin else 0),
            ))
    return succeed(data=data)
Example #15
0
def register():
    json_dict = g.json_dict
    json_dict = signup_schema.load(json_dict)
    email = json_dict["email"]
    nickname = json_dict["nickname"]
    password = json_dict["password"]
    invitation_code = json_dict["invitation_code"]

    with get_session() as s:
        invitation = UserInvitation.get_by_code(s, invitation_code)
        if invitation is None or invitation.is_used:
            return failed(msg="邀请码无效")
        user = User.register(s, nickname, email, password)
        # 邀请码置位
        invitation.used_by_user(user.id)

        return succeed(msg="注册成功")
Example #16
0
def add_review():
    json_dict = g.json_dict
    s = g.mysql_session
    user = g.user
    checklist = Checklist.get_by_id(s, json_dict["checklist_id"])
    is_new, review = ChecklistReview.add_or_update(s, user.id, checklist.id,
                                                   json_dict.get("mood", "打卡"))
    s.commit()
    if is_new:  # 下面的更新存在并发问题
        checklist.checked_count += 1
        checklist.last_review_id = review.id
    return succeed(data=dict(
        checklist=dict(
            id=checklist.id,
            checked_count=checklist.checked_count,
        ),
        is_new=(1 if is_new else 0),
        review_id=review.id,
        mood=review.detail,
    ))
Example #17
0
def fetch_all():
    """
    根据传入的 last_review_id 进行抽取,固定每次抽取 fetch_size 个
    :return:
    """
    last_id = request.args.get("last_review_id", REVIEW_ID_LIMITATION)
    fetch_size = 10
    s = g.mysql_session

    reviews = ChecklistReview.get_reviews_ref_last_review_id(
        s, last_id, fetch_size)
    has_more_reviews = fetch_size == len(reviews)
    # 发布阅评的用户信息
    user_ids = [x.user_id for x in reviews]
    users = User.get_by_id_list(s, user_ids)
    users_id_map = {x.id: x for x in users}
    # 每个阅评对应的检查项
    checklist_ids = [x.checklist_id for x in reviews]
    checklists = Checklist.get_by_id_list(s, checklist_ids)
    checklists_id_map = {x.id: x for x in checklists}

    # 点赞
    review_star_map = {}
    if g.user:
        review_ids = [x.id for x in reviews]
        review_stars = ChecklistReviewStar.get_reviews_star_of_user(
            s, g.user.id, review_ids)
        review_star_map = {x.review_id: x for x in review_stars}

    reviews_json = []
    for review in reviews:
        review_json = dict(
            review_id=review.id,
            review_mood=review.detail,
            star_count=review.star_count,
            created_at=review.created_at.strftime("%Y-%m-%d %H:%M:%S"),
            has_stared=0,
        )
        # 组装用户信息,如果不存在用户信息,说明数据不完整,不做记录
        review_author = users_id_map.get(review.user_id)
        if review_author is None:
            continue
        review_json["author"] = review_author.get_base_info()

        # 组装检查项信息
        checklist = checklists_id_map.get(review.checklist_id)
        if checklist is None:
            continue
        review_json["checklist"] = dict(
            id=checklist.id,
            description=checklist.description,
        )

        # 拼点赞信息
        review_star = review_star_map.get(review.id)
        if review_star:
            review_json["has_stared"] = 1

        reviews_json.append(review_json)

    last_review_id = reviews[-1].id if reviews else -1

    return succeed(data=dict(
        reviews=reviews_json,
        last_review_id=last_review_id,
        has_more_reviews=(1 if has_more_reviews else 0),
    ))