This commit is contained in:
parent
e3ee65f79a
commit
61528e5269
|
@ -2,7 +2,7 @@
|
||||||
- Shout.featured_at timestamp of the frontpage featuring event
|
- Shout.featured_at timestamp of the frontpage featuring event
|
||||||
- added proposal accepting logics
|
- added proposal accepting logics
|
||||||
- schema modulized
|
- schema modulized
|
||||||
-
|
- Shout.visibility removed
|
||||||
|
|
||||||
[0.2.22]
|
[0.2.22]
|
||||||
- added precommit hook
|
- added precommit hook
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import time
|
import time
|
||||||
from enum import Enum as Enumeration
|
|
||||||
|
|
||||||
from sqlalchemy import JSON, Boolean, Column, ForeignKey, Integer, String
|
from sqlalchemy import JSON, Boolean, Column, ForeignKey, Integer, String
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
@ -48,12 +47,6 @@ class ShoutCommunity(Base):
|
||||||
community = Column(ForeignKey('community.id'), primary_key=True, index=True)
|
community = Column(ForeignKey('community.id'), primary_key=True, index=True)
|
||||||
|
|
||||||
|
|
||||||
class ShoutVisibility(Enumeration):
|
|
||||||
AUTHORS = 'AUTHORS'
|
|
||||||
COMMUNITY = 'COMMUNITY'
|
|
||||||
FEATURED = 'FEATURED'
|
|
||||||
|
|
||||||
|
|
||||||
class Shout(Base):
|
class Shout(Base):
|
||||||
__tablename__ = 'shout'
|
__tablename__ = 'shout'
|
||||||
|
|
||||||
|
@ -83,8 +76,6 @@ class Shout(Base):
|
||||||
communities = relationship(lambda: Community, secondary='shout_community')
|
communities = relationship(lambda: Community, secondary='shout_community')
|
||||||
reactions = relationship(lambda: Reaction)
|
reactions = relationship(lambda: Reaction)
|
||||||
|
|
||||||
visibility = Column(String, default=ShoutVisibility.AUTHORS.value)
|
|
||||||
|
|
||||||
lang = Column(String, nullable=False, default='ru', comment='Language')
|
lang = Column(String, nullable=False, default='ru', comment='Language')
|
||||||
version_of = Column(ForeignKey('shout.id'), nullable=True)
|
version_of = Column(ForeignKey('shout.id'), nullable=True)
|
||||||
oid = Column(String, nullable=True)
|
oid = Column(String, nullable=True)
|
||||||
|
|
|
@ -5,7 +5,7 @@ from sqlalchemy.orm import joinedload
|
||||||
|
|
||||||
from orm.author import Author
|
from orm.author import Author
|
||||||
from orm.reaction import Reaction, ReactionKind
|
from orm.reaction import Reaction, ReactionKind
|
||||||
from orm.shout import Shout, ShoutAuthor, ShoutTopic, ShoutVisibility
|
from orm.shout import Shout, ShoutAuthor, ShoutTopic
|
||||||
from orm.topic import Topic
|
from orm.topic import Topic
|
||||||
from resolvers.follower import reactions_follow, reactions_unfollow
|
from resolvers.follower import reactions_follow, reactions_unfollow
|
||||||
from resolvers.rater import is_negative, is_positive
|
from resolvers.rater import is_negative, is_positive
|
||||||
|
@ -61,7 +61,7 @@ async def create_shout(_, info, inp):
|
||||||
'authors': [],
|
'authors': [],
|
||||||
'slug': slug,
|
'slug': slug,
|
||||||
'topics': inp.get('topics', []),
|
'topics': inp.get('topics', []),
|
||||||
'visibility': ShoutVisibility.AUTHORS.value,
|
'published_at': None,
|
||||||
'created_at': current_time, # Set created_at as Unix timestamp
|
'created_at': current_time, # Set created_at as Unix timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ from sqlalchemy.sql import union
|
||||||
|
|
||||||
from orm.author import Author
|
from orm.author import Author
|
||||||
from orm.reaction import Reaction, ReactionKind
|
from orm.reaction import Reaction, ReactionKind
|
||||||
from orm.shout import Shout, ShoutVisibility
|
from orm.shout import Shout
|
||||||
from resolvers.editor import handle_proposing
|
from resolvers.editor import handle_proposing
|
||||||
from resolvers.follower import reactions_follow
|
from resolvers.follower import reactions_follow
|
||||||
from resolvers.rater import RATING_REACTIONS, is_negative, is_positive
|
from resolvers.rater import RATING_REACTIONS, is_negative, is_positive
|
||||||
|
@ -90,7 +90,7 @@ def check_to_unfeature(session, rejecter_id, reaction):
|
||||||
async def set_featured(session, shout_id):
|
async def set_featured(session, shout_id):
|
||||||
s = session.query(Shout).where(Shout.id == shout_id).first()
|
s = session.query(Shout).where(Shout.id == shout_id).first()
|
||||||
s.featured_at = int(time.time())
|
s.featured_at = int(time.time())
|
||||||
Shout.update(s, {'visibility': ShoutVisibility.FEATURED.value})
|
Shout.update(s, { 'featured_at': int(time.time()) })
|
||||||
author = session.query(Author).filter(Author.id == s.created_by).first()
|
author = session.query(Author).filter(Author.id == s.created_by).first()
|
||||||
if author:
|
if author:
|
||||||
await add_user_role(str(author.user))
|
await add_user_role(str(author.user))
|
||||||
|
@ -100,7 +100,7 @@ async def set_featured(session, shout_id):
|
||||||
|
|
||||||
def set_unfeatured(session, shout_id):
|
def set_unfeatured(session, shout_id):
|
||||||
s = session.query(Shout).where(Shout.id == shout_id).first()
|
s = session.query(Shout).where(Shout.id == shout_id).first()
|
||||||
Shout.update(s, {'visibility': ShoutVisibility.COMMUNITY.value , 'featured_at': None })
|
Shout.update(s, {'featured_at': None })
|
||||||
session.add(s)
|
session.add(s)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ from starlette.exceptions import HTTPException
|
||||||
|
|
||||||
from orm.author import Author, AuthorFollower
|
from orm.author import Author, AuthorFollower
|
||||||
from orm.reaction import Reaction, ReactionKind
|
from orm.reaction import Reaction, ReactionKind
|
||||||
from orm.shout import Shout, ShoutAuthor, ShoutTopic, ShoutVisibility
|
from orm.shout import Shout, ShoutAuthor, ShoutTopic
|
||||||
from orm.topic import Topic, TopicFollower
|
from orm.topic import Topic, TopicFollower
|
||||||
from resolvers.reaction import add_stat_columns
|
from resolvers.reaction import add_stat_columns
|
||||||
from resolvers.topic import get_random_topic
|
from resolvers.topic import get_random_topic
|
||||||
|
@ -28,7 +28,7 @@ def apply_filters(q, filters, author_id=None):
|
||||||
|
|
||||||
by_featured = filters.get('featured')
|
by_featured = filters.get('featured')
|
||||||
if by_featured:
|
if by_featured:
|
||||||
q = q.filter(Shout.visibility == ShoutVisibility.FEATURED.value)
|
q = q.filter(Shout.featered_at.is_not(None))
|
||||||
by_layouts = filters.get('layouts')
|
by_layouts = filters.get('layouts')
|
||||||
if by_layouts:
|
if by_layouts:
|
||||||
q = q.filter(Shout.layout.in_(by_layouts))
|
q = q.filter(Shout.layout.in_(by_layouts))
|
||||||
|
@ -206,8 +206,7 @@ async def load_shouts_drafts(_, info):
|
||||||
joinedload(Shout.authors),
|
joinedload(Shout.authors),
|
||||||
joinedload(Shout.topics),
|
joinedload(Shout.topics),
|
||||||
)
|
)
|
||||||
.filter(Shout.deleted_at.is_(None))
|
.filter(and_(Shout.deleted_at.is_(None), Shout.published_at.is_(None)))
|
||||||
.filter(Shout.visibility == ShoutVisibility.AUTHORS.value)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
shouts = []
|
shouts = []
|
||||||
|
@ -466,7 +465,7 @@ async def load_shouts_random_topic(_, info, limit: int = 10):
|
||||||
.filter(
|
.filter(
|
||||||
and_(
|
and_(
|
||||||
Shout.deleted_at.is_(None),
|
Shout.deleted_at.is_(None),
|
||||||
Shout.visibility == ShoutVisibility.FEATURED.value,
|
Shout.featured_at.is_not(None),
|
||||||
Shout.topics.any(slug=topic.slug),
|
Shout.topics.any(slug=topic.slug),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
enum ShoutVisibility {
|
|
||||||
AUTHORS
|
|
||||||
COMMUNITY
|
|
||||||
FEATURED
|
|
||||||
}
|
|
||||||
|
|
||||||
enum ReactionStatus {
|
enum ReactionStatus {
|
||||||
NEW
|
NEW
|
||||||
UPDATED
|
UPDATED
|
||||||
|
|
|
@ -84,7 +84,6 @@ type Shout {
|
||||||
cover: String
|
cover: String
|
||||||
cover_caption: String
|
cover_caption: String
|
||||||
layout: String!
|
layout: String!
|
||||||
visibility: String
|
|
||||||
|
|
||||||
created_at: Int!
|
created_at: Int!
|
||||||
updated_at: Int
|
updated_at: Int
|
||||||
|
|
Loading…
Reference in New Issue
Block a user