collab-appear

This commit is contained in:
tonyrewin 2022-09-02 13:23:33 +03:00
parent fe13488584
commit 85892a88bc
4 changed files with 80 additions and 38 deletions

22
orm/collab.py Normal file
View File

@ -0,0 +1,22 @@
from datetime import datetime
from sqlalchemy import Boolean, Column, String, ForeignKey, DateTime
from base.orm import Base
class CollabAuthor(Base):
__tablename__ = 'collab_author'
id = None
collab = Column(ForeignKey('collab.id'), primary_key = True)
author = Column(ForeignKey('user.slug'), primary_key = True)
accepted = Column(Boolean, default=False)
class Collab(Base):
__tablename__ = 'collab'
authors = Column()
title: str = Column(String, nullable=True, comment="Title")
body: str = Column(String, nullable=True, comment="Body")
pic: str = Column(String, nullable=True, comment="Picture")
createdAt: datetime = Column(DateTime, default=datetime.now, comment="Created At")
createdBy: str = Column(ForeignKey('user.id'), comment="Created By")

View File

@ -1,10 +1,23 @@
from datetime import datetime from datetime import datetime
from base.orm import local_session from base.orm import local_session
from orm.collab import Collab
from orm.shout import Shout from orm.shout import Shout
from orm.user import User from orm.user import User
from base.resolvers import mutation from base.resolvers import query, mutation
from auth.authenticate import login_required from auth.authenticate import login_required
@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") @mutation.field("inviteAuthor")
@login_required @login_required
async def invite_author(_, info, author, shout): async def invite_author(_, info, author, shout):

View File

@ -245,8 +245,7 @@ type Query {
reactionsForSlugs(slugs: [String]!, page: Int!, size: Int!): [Reaction]! reactionsForSlugs(slugs: [String]!, page: Int!, size: Int!): [Reaction]!
# collab # collab
inviteAuthor(slug: String!, author: String!): Result! getCollabs: [Collab]!
removeAuthor(slug: String!, author: String!): Result
# topics # topics
topicsAll(page: Int!, size: Int!): [Topic]! topicsAll(page: Int!, size: Int!): [Topic]!
@ -339,6 +338,14 @@ type User {
oid: String oid: String
} }
type Collab {
authors: [String]!
invites: [String]
createdAt: DateTime!
title: String
body: String
}
enum ReactionKind { enum ReactionKind {
LIKE LIKE
DISLIKE DISLIKE
@ -392,7 +399,7 @@ type Shout {
body: String! body: String!
createdAt: DateTime! createdAt: DateTime!
authors: [Author] authors: [Author]
# ratings: [Rating] lang: String
community: String community: String
cover: String cover: String
layout: String layout: String