def delete_comment(): response = { 'status': True, 'message': '' } if not 'token' in request.form or not 'comment_id' in request.form: response['message'] = 'bad request' else: token = request.form['token'] comment_id = int(request.form['comment_id']) is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) comment = Comment.query.filter_by(id=comment_id, commenter_id=user.id) if comment.count() == 0: response['message'] = 'comment_id invalid' else: comment.update({Comment.status: 'excluded'}) db.session.commit() response['message'] = 'ok' response['status'] = True return (json.dumps(response))
def add_access(): response = { 'status': False, 'message': '' } if not 'token' in request.form or not 'device' in request.form: response['message'] = 'bad request' else: token = request.form['token'] device = request.form['device'] is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) currentTime = time.time() access = Access.query.filter( Access.user_id == user.id, Access.datetime.between(currentTime - 86400, currentTime + 86400)) if access.count() == 0: response['message'] = 'ok' response['status'] = True new_access = Access(user_id=user.id, ip=request.remote_addr, user_agent=device, datetime=currentTime) db.session.add(new_access) db.session.commit() else: response['message'] = 'already registed today' return (json.dumps(response))
def edit_story(): response = {'status': False, 'message': ''} if not 'token' in request.form or \ not 'id' in request.form or \ not 'title' in request.form or \ not 'text' in request.form or \ not 'tags' in request.form: response['message'] = 'bad request' else: token = request.form['token'] story_id = int(request.form['id']) title = request.form['title'] text = request.form['text'] tags = request.form['tags'] is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) Story.query.filter_by(id=story_id, publisher_id=user.id) \ .update({Story.title: title, Story.text:text, Story.tags: tags,Story.preview:text[:preview_size]}) db.session.commit() response['status'] = True response['message'] = 'story edited' return (json.dumps(response))
def get_sketch(token=None): response = {'status': False, 'message': ''} if token == None: response['message'] = 'bad request' else: is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authentificated' else: user = get_user_by_token(token) story = Story.query.filter_by(publisher_id=user.id, status='in_sketch') \ .with_entities(Story.id, Story.title, Story.text).first() if story == None: response['message'] = 'none sketch created yet' else: response['status'] = True response['message'] = 'ok' response['payload'] = { "id": story.id, "title": story.title, "text": story.text } return (json.dumps(response))
def get_story(token=None, story_id=None): response = {'status': False, 'message': ''} if token == None or id == None: response['message'] = 'bad request' else: is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) sql_query = "SELECT story.*,\ (SELECT COUNT(comment.id) from comment WHERE comment.story_id LIKE story.id) as 'comments',\ (SELECT COUNT(view.story_id) from view WHERE view.story_id LIKE story.id) as 'views',\ (SELECT COUNT(enjoy.story_id) from enjoy WHERE enjoy.story_id LIKE story.id) as 'enjoys'\ FROM story WHERE story.id LIKE {0} and story.status LIKE 'published'\ GROUP BY story.id LIMIT 1".format(story_id) result = db.session.execute(sql_query) story = result.fetchone() is_liked_by_user = Enjoy.query.filter_by(story_id=story_id, user_id=user.id).count() is_liked_by_user = True if is_liked_by_user == 1 else False if story == None: response['message'] = 'story not found' else: viewscount = View.query.filter_by(story_id=story_id, user_id=user.id).count() if viewscount == 0: new_view = View(user_id=user.id, story_id=story[0], duration=0, datetime=time.time()) db.session.add(new_view) db.session.commit() response['payload'] = {\ "id": story[0],\ "title": story[1],\ "text": story[2],\ "preview": story[3],\ "tags": story[4],\ "is_liked_by_user": is_liked_by_user, "datetime_created": story[5],\ "publisher_id": story[6],\ "views": story.views,\ "enjoys": story.enjoys,\ "comments":story.comments} response['status'] = True response['message'] = 'ok' return (json.dumps(response))
def save_sketch(): response = {'status': False, 'message': ''} if not 'token' in request.form or not 'text' in request.form: response['message'] = 'bad request' else: text = request.form['text'] token = request.form['token'] is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) story = Story.query.filter_by(publisher_id=user.id, status='in_sketch').with_entities( Story.id, Story.title, Story.text).first() response['status'] = True if story == None: timestamp_now = str(time.time()) new_story = Story(id=False, title="", text=text, preview=text[:preview_size], tags="", datetime_created=timestamp_now, last_update=timestamp_now, locale=user.locale, status="in_sketch", publisher_id=user.id) db.session.add(new_story) response['message'] = 'story created' else: db.session.query(Story).filter(Story.id == story.id).update({ Story.text: text, Story.preview: text[:preview_size] }) response['message'] = 'story saved' db.session.commit() last_story = Story.query.filter_by( publisher_id=user.id, status='in_sketch').with_entities(Story.id).first() response["id"] = last_story.id return (json.dumps(response))
def enjoy_story(): response = {'status': False, 'message': ''} if not 'token' in request.form or not 'story_id' in request.form: response['message'] = 'bad request' else: token = request.form['token'] story_id = int(request.form['story_id']) is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: story = Story.query.filter_by(id=story_id) if story.count() == 0: response['message'] = 'story not found' else: story = story.first() user = get_user_by_token(token) has_already_enjoyed_post = Enjoy.query.filter_by( story_id=story_id, user_id=user.id).count() if has_already_enjoyed_post == 1: enjoy = Enjoy.query.filter_by(user_id=user.id, story_id=story_id).delete() response['message'] = 'enjoy removed' else: enjoy = Enjoy(story_id=story_id, user_id=user.id, datetime=str(time.time())) db.session.add(enjoy) response['message'] = 'enjoy added' publisher = User.query.filter_by( id=story.publisher_id).first() if publisher.push_token != None and publisher.id != user.id: header = {"en": "YourStories"} content = { "en": "{0} liked your post".format(user.full_name) } users = [publisher.push_token] data = {'story_id': story.id} notify_android_users(content, header, users, data) db.session.commit() response['status'] = True return (json.dumps(response))
def get_stories(token=None, page=None): response = {'status': False, 'message': ''} if token == None or page == None: response['message'] = 'bad request' else: page = int(page) is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) fetch = Story.query.filter(Story.status.like('published'), Story.locale.like('%'+user.locale[:2]+'%')) \ .with_entities(Story.id, Story.title, Story.preview) \ .order_by(Story.datetime_created.desc()) \ .paginate(per_page=page_size, page=page, error_out=False) if len(fetch.items) == 0: fetch = Story.query.filter(Story.status.like('published'), Story.locale.like('en')) \ .with_entities(Story.id, Story.title, Story.preview) \ .order_by(Story.datetime_created.desc()) \ .paginate(per_page=page_size, page=page, error_out=False) data = [] for item in fetch.items: data.append({'id': item[0], 'title':item[1], 'preview':item[2]}) if len(data) > 0: response['last_page'] = True if page_size > len(data) else False response['status'] = True response['message'] = 'ok' response['size'] = len(data) response['payload'] = data else: response['status'] = True response['message'] = 'ok' response['size'] = 0 return(json.dumps(response))
def get_comments(token=None, post_id=None, page=None): response = { 'status': False, 'message': '' } if token == None or post_id == None or page == None: response['message'] = 'bad request' else: is_signed = verify_login(token) page = int(page) post_id = int(post_id) if is_signed == False: response['message'] = 'not authorized' else: comments = db.session.query(Comment, User)\ .with_entities(Comment.id,Comment.commenter_id,Comment.story_id,Comment.comment, User.full_name, User.photo)\ .filter(Comment.status == 'published', Comment.story_id == post_id, Comment.commenter_id == User.id)\ .order_by(Comment.datetime.desc())\ .paginate(per_page=page_size, page=page, error_out=False) comments_array = [] replies_array = [] for comm in comments.items: comments_array.append({ 'id': comm[0], 'user_id': comm[1], 'story_id': comm[2], 'comment': comm[3], 'user_fullname': comm[4], 'user_photo': comm[5] }) response['last_page'] = True if page_size > len( comments_array) else False response['status'] = True response['message'] = 'ok' response['payload'] = { 'size': len(comments_array), 'data': comments_array } return (json.dumps(response))
def get_my_stories(token=None, page=None): response = {'status': False, 'message': ''} if token == None: response['message'] = 'bad request' else: page = 1 if page == None else int(page) is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) fetch = Story.query.filter_by(status='published', publisher_id=user.id) \ .with_entities(Story.id, Story.title, Story.preview) \ .order_by(Story.datetime_created.desc()) \ .paginate(per_page=page_size, page=page, error_out=False) \ data = [] for item in fetch.items: views = View.query.filter_by(story_id=item[0]).count() comments = Comment.query.filter_by(story_id=item[0]).count() enjoys = Enjoy.query.filter_by(story_id=item[0]).count() data.append({\ 'id': item[0],\ 'title':item[1],\ 'preview': item[2],\ 'comments':comments,\ 'enjoys': enjoys,\ 'views': views}) response['status'] = True response['message'] = 'ok' response['last_page'] = True if page_size > len(fetch.items) else False response['size'] = len(data) response['payload'] = data return(json.dumps(response))
def add_comment(): response = {'status': False, 'message': ''}; if not 'token' in request.form\ or not 'story_id' in request.form\ or not 'comment' in request.form: response['message'] = 'bad request' else: token = request.form['token'] story_id = int(request.form['story_id']) comment = request.form['comment'] is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) story = Story.query.filter_by(id=story_id) if story.count() == 0: response['message'] = 'invalid story id' else: story = story.first() current_time = time.time() new_comment = Comment(commenter_id=user.id, story_id=story_id, comment=comment, datetime=current_time, status='published') db.session.add(new_comment) db.session.commit() publisher = User.query.filter_by(id=story.publisher_id).first() if publisher != None: if publisher.push_token != None and publisher.id != user.id: header = {"en":"YourStories"} content = {"en": "{0} commented on your post".format(user.full_name)} users = [publisher.push_token] data = {'story_id': story.id} notify_android_users(content, header, users, data) response['status'] = True response['message'] = 'ok' return(json.dumps(response))
def delete_story(): response = { 'status': True, 'message': '' } if not 'token' in request.form or not 'story_id' in request.form: response['message'] = 'bad request' else: token = request.form['token'] story_id = int(request.form['story_id']) is_signed = verify_login(token) if is_signed == False: response['message'] = 'not authorized' else: user = get_user_by_token(token) story = Story.query.filter_by(id=story_id, publisher_id=user.id) if story.count() == 0: response['message'] = 'story_id invalid' else: story.update({Story.status: 'excluded'}) db.session.commit() response['message'] = 'ok' response['status'] = True return (json.dumps(response))