CRUD comments

This commit is contained in:
knst-kotov 2021-11-21 14:04:38 +03:00
parent 2c5f8335d6
commit 252807b3b1
4 changed files with 70 additions and 3 deletions

View File

@ -25,8 +25,8 @@ class Comment(Base):
updatedBy = Column(ForeignKey("user.id"), nullable=True, comment="Last Editor")
deletedAt = Column(DateTime, nullable=True, comment="Deleted at")
deletedBy = Column(ForeignKey("user.id"), nullable=True, comment="Deleted by")
shout: int = Column(ForeignKey("shout.id"), nullable=True, comment="Shout ID")
rating: int = Column(Integer, nullable=True, comment="Comment Rating")
shout: int = Column(ForeignKey("shout.id"), nullable=False, comment="Shout ID")
replyTo: int = Column(ForeignKey("comment.id"), nullable=True, comment="comment ID")
ratings = relationship(CommentRating, foreign_keys=CommentRating.comment_id)
old_id: str = Column(String, nullable = True)
old_thread: str = Column(String, nullable = True)

View File

@ -5,6 +5,7 @@ from resolvers.zine import create_shout, get_shout_by_slug, top_month, top_overa
from resolvers.profile import get_user_by_slug, get_current_user
from resolvers.topics import topic_subscribe, topic_unsubscribe, topics_by_author, \
topics_by_community, topics_by_slugs
from resolvers.comments import create_comment
__all__ = [
"login",

57
resolvers/comments.py Normal file
View File

@ -0,0 +1,57 @@
from orm import Comment, CommentRating
from orm.base import local_session
from resolvers.base import mutation, query, subscription
from auth.authenticate import login_required
import asyncio
from datetime import datetime
@mutation.field("createComment")
@login_required
async def create_comment(_, info, body, shout, replyTo = None):
auth = info.context["request"].auth
user_id = auth.user_id
comment = Comment.create(
author = user_id,
body = body,
shout = shout,
replyTo = replyTo
)
return {"comment": comment}
@mutation.field("updateComment")
@login_required
async def update_comment(_, info, id, body):
auth = info.context["request"].auth
user_id = auth.user_id
with local_session() as session:
comment = session.query(Comment).filter(Comment.id == id).first()
if not comment:
return {"error": "invalid comment id"}
if comment.author != user_id:
return {"error": "access denied"}
comment.body = body
comment.updatedAt = datetime.now()
session.commit()
@mutation.field("deleteComment")
@login_required
async def delete_comment(_, info, id):
auth = info.context["request"].auth
user_id = auth.user_id
with local_session() as session:
comment = session.query(Comment).filter(Comment.id == id).first()
if not comment:
return {"error": "invalid comment id"}
if comment.author != user_id:
return {"error": "access denied"}
comment.deletedAt = datetime.now()
session.commit()
return {}

View File

@ -46,6 +46,11 @@ type ShoutResult {
shout: Shout
}
type CommentResult {
error: String
comment: Comment
}
################################### Mutation
type Mutation {
@ -79,6 +84,10 @@ type Mutation {
# topics
topicSubscribe(slug: String!): Result!
topicUnsubscribe(slug: String!): Result!
createComment(body: String!, shout: Int!, replyTo: Int): CommentResult!
updateComment(id: Int!, body: String!): CommentResult!
deleteComment(id: Int!): Result!
}
################################### Query
@ -199,7 +208,7 @@ type Comment {
id: Int!
author: Int!
body: String!
replyTo: Int!
replyTo: Int
createdAt: DateTime!
updatedAt: DateTime
updatedBy: Int