|
|
@ -98,7 +98,7 @@ class Reaction(db.Model): |
|
|
|
def choose_new_next(min_like_num=MIN_LIKE_NUM): |
|
|
|
for story in Story.query.filter_by(is_tree=False).all(): |
|
|
|
last_paragraph_id = story.tail |
|
|
|
next_one = Paragraph.query.filter_by(parent_id=last_paragraph_id, is_hidden=False)\ |
|
|
|
next_one = Paragraph.query.filter_by(story_id=story.id, parent_id=last_paragraph_id, is_hidden=False)\ |
|
|
|
.order_by(Paragraph.like_num.desc()).first() |
|
|
|
if next_one and next_one.like_num >= min_like_num: |
|
|
|
story.text += next_one.text |
|
|
@ -106,7 +106,35 @@ def choose_new_next(min_like_num=MIN_LIKE_NUM): |
|
|
|
story.tail = next_one.id |
|
|
|
next_one.is_chosen = True |
|
|
|
|
|
|
|
db.session.commit() |
|
|
|
for story in Story.query.filter_by(is_tree=True).all(): |
|
|
|
_max = story.total_like_num |
|
|
|
_tail = story.tail |
|
|
|
_sum_dict = {} |
|
|
|
|
|
|
|
def _get_like_sum(p): |
|
|
|
if p.id in _sum_dict: |
|
|
|
return _sum_dict[p.id] |
|
|
|
s = p.like_num + (p.parent_id and _get_like_sum(Paragraph.query.get(p.parent_id))) |
|
|
|
_sum_dict[p.id] = s |
|
|
|
return s |
|
|
|
|
|
|
|
for p in Paragraph.query.filter(Paragraph.like_num >= min_like_num)\ |
|
|
|
.filter_by(story_id=story.id, is_hidden=False).all(): |
|
|
|
if _get_like_sum(p) > _max: |
|
|
|
_max = _get_like_sum(p) |
|
|
|
_tail = p.id |
|
|
|
|
|
|
|
p = Paragraph.query.get(_tail) |
|
|
|
_text = p.text |
|
|
|
while p.parent_id: |
|
|
|
p = Paragraph.query.get(p.parent_id) |
|
|
|
_text = p.text + _text |
|
|
|
|
|
|
|
story.total_like_num = _max |
|
|
|
story.tail = _tail |
|
|
|
story.text = _text |
|
|
|
|
|
|
|
db.session.commit() |
|
|
|
|
|
|
|
|
|
|
|
def sample_question(qs, n=3): |
|
|
@ -185,13 +213,26 @@ def story(story_id): |
|
|
|
story = Story.query.get_or_404(story_id) |
|
|
|
is_tree = story.is_tree |
|
|
|
|
|
|
|
paragraph_part = Paragraph.query.filter_by( |
|
|
|
story_id=story_id, is_chosen=True, is_hidden=False |
|
|
|
).all() |
|
|
|
if is_tree: |
|
|
|
tail = request.args.get('tail', story.tail, type=int) |
|
|
|
p_tail = Paragraph.query.get_or_404(tail) |
|
|
|
if p_tail.story_id != story_id: |
|
|
|
abort(404) |
|
|
|
paragraph_part = [p_tail] |
|
|
|
p = p_tail |
|
|
|
while p.parent_id: |
|
|
|
p = Paragraph.query.get_or_404(p.parent_id) |
|
|
|
paragraph_part.insert(0, p) |
|
|
|
|
|
|
|
else: |
|
|
|
tail = story.tail |
|
|
|
paragraph_part = Paragraph.query.filter_by( |
|
|
|
story_id=story_id, is_chosen=True, is_hidden=False |
|
|
|
).all() |
|
|
|
|
|
|
|
sort_by = request.args.get('sort_by', 'time') |
|
|
|
|
|
|
|
q = Paragraph.query.filter_by(parent_id=story.tail, is_hidden=False) |
|
|
|
q = Paragraph.query.filter_by(story_id=story_id, parent_id=tail, is_hidden=False) |
|
|
|
q = q.order_by(Paragraph.like_num.desc() if sort_by == 'like' else |
|
|
|
Paragraph.id.desc()) |
|
|
|
pagination = q.paginate(max_per_page=100) |
|
|
@ -217,9 +258,14 @@ def create(): |
|
|
|
if not text or len(text) > 140: |
|
|
|
abort(422) |
|
|
|
story = Story.query.get_or_404(story_id) |
|
|
|
|
|
|
|
if story.is_tree: |
|
|
|
parent_id = request.form.get('tail', type=int) |
|
|
|
else: |
|
|
|
parent_id = story.tail |
|
|
|
|
|
|
|
p = Paragraph( |
|
|
|
parent_id=story.tail, |
|
|
|
parent_id=parent_id, |
|
|
|
story_id=story_id, |
|
|
|
text=text, |
|
|
|
author=session['username'] |
|
|
|