import html from db import db from db import Comment, User, Video from user import get_authorized_user from video import find_video_by_id from tools import parse_offset, validate_text async def get_comments(video_id, offset=0): video = await find_video_by_id(video_id) comments = await db.execute(Comment .select(Comment, User) .join(User) .switch(Comment) .join(Video) .where( (Video.id == video.id) & (~Comment.is_hidden) ) .order_by(Comment.publish_date.desc()) .offset(parse_offset(offset)) .limit(5)) return [ { 'id': comment.id, 'author_id': comment.user.id, 'publish_ts': int(comment.publish_date.timestamp()), 'text': html.escape(comment.text) } for comment in comments ] async def get_comments_count(video_id): video = await find_video_by_id(video_id) return await db.count(Comment .select() .join(Video) .where( (Video.id == video.id) & (~Comment.is_hidden) )) async def post_comment(session, video_id, text): user = await get_authorized_user(session) video = await find_video_by_id(video_id) text = validate_text(text) return await db.create(Comment, text=text, user=user, video=video)