Esempio n. 1
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),
    ))