core/resolvers/collab.py

73 lines
2.0 KiB
Python
Raw Normal View History

from datetime import datetime
2022-08-11 05:53:14 +00:00
from base.orm import local_session
2022-09-02 10:23:33 +00:00
from orm.collab import Collab
2022-07-10 18:52:57 +00:00
from orm.shout import Shout
from orm.user import User
2022-09-02 10:23:33 +00:00
from base.resolvers import query, mutation
2022-06-19 17:54:39 +00:00
from auth.authenticate import login_required
2022-09-02 10:23:33 +00:00
@query.field("getCollabs")
@login_required
async def get_collabs(_, info):
auth = info.context["request"].auth
user_id = auth.user_id
collabs = []
with local_session() as session:
user = session.query(User).where(User.id == user_id).first()
collabs = session.query(Collab).filter(user.slug in Collab.authors)
return collabs
@mutation.field("inviteAuthor")
@login_required
2022-07-10 18:52:57 +00:00
async def invite_author(_, info, author, shout):
auth = info.context["request"].auth
user_id = auth.user_id
with local_session() as session:
shout = session.query(Shout).filter(Shout.slug == shout).first()
if not shout:
return {"error": "invalid shout slug"}
2022-07-10 18:52:57 +00:00
authors = [a.id for a in shout.authors]
if user_id not in authors:
return {"error": "access denied"}
2022-07-10 18:52:57 +00:00
author = session.query(User).filter(User.slug == author).first()
if author.id in authors:
return {"error": "already added"}
shout.authors.append(author)
shout.updated_at = datetime.now()
2022-09-02 10:23:33 +00:00
shout.save()
session.commit()
# TODO: email notify
return {}
@mutation.field("removeAuthor")
@login_required
2022-07-10 18:52:57 +00:00
async def remove_author(_, info, author, shout):
auth = info.context["request"].auth
user_id = auth.user_id
with local_session() as session:
shout = session.query(Shout).filter(Shout.slug == shout).first()
if not shout:
return {"error": "invalid shout slug"}
authors = [author.id for author in shout.authors]
if user_id not in authors:
return {"error": "access denied"}
2022-07-10 18:52:57 +00:00
author = session.query(User).filter(User.slug == author).first()
if author.id not in authors:
return {"error": "not in authors"}
shout.authors.remove(author)
shout.updated_at = datetime.now()
2022-09-02 10:23:33 +00:00
shout.save()
session.commit()
# result = Result("INVITED")
# FIXME: await ShoutStorage.put(result)
# TODO: email notify
return {}