Add content rule and post tables
This commit is contained in:
parent
9c2d6bb917
commit
f8c7d70f72
|
@ -64,6 +64,7 @@ class User(ModelBase):
|
||||||
memberships = relationship('Membership', back_populates='user')
|
memberships = relationship('Membership', back_populates='user')
|
||||||
characters = relationship('Character', back_populates='user')
|
characters = relationship('Character', back_populates='user')
|
||||||
articles = relationship('Article', back_populates='user')
|
articles = relationship('Article', back_populates='user')
|
||||||
|
posts = relationship('Post', back_populates='user')
|
||||||
|
|
||||||
|
|
||||||
class Lexicon(ModelBase):
|
class Lexicon(ModelBase):
|
||||||
|
@ -192,6 +193,8 @@ class Lexicon(ModelBase):
|
||||||
articles = relationship('Article', back_populates='lexicon')
|
articles = relationship('Article', back_populates='lexicon')
|
||||||
indexes = relationship('ArticleIndex', back_populates='lexicon')
|
indexes = relationship('ArticleIndex', back_populates='lexicon')
|
||||||
index_rules = relationship('ArticleIndexRule', back_populates='lexicon')
|
index_rules = relationship('ArticleIndexRule', back_populates='lexicon')
|
||||||
|
content_rules = relationship('ArticleContentRule', back_populates='lexicon')
|
||||||
|
posts = relationship('Post', back_populates='lexicon')
|
||||||
|
|
||||||
|
|
||||||
class Membership(ModelBase):
|
class Membership(ModelBase):
|
||||||
|
@ -441,6 +444,10 @@ class ArticleIndexRule(ModelBase):
|
||||||
# The lexicon of this index rule
|
# The lexicon of this index rule
|
||||||
lexicon_id = Column(Integer, ForeignKey('lexicon.id'), nullable=False)
|
lexicon_id = Column(Integer, ForeignKey('lexicon.id'), nullable=False)
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Index rule scope #
|
||||||
|
####################
|
||||||
|
|
||||||
# The character to whom this rule applies
|
# The character to whom this rule applies
|
||||||
character_id = Column(Integer, ForeignKey('character.id'), nullable=False)
|
character_id = Column(Integer, ForeignKey('character.id'), nullable=False)
|
||||||
|
|
||||||
|
@ -457,3 +464,114 @@ class ArticleIndexRule(ModelBase):
|
||||||
lexicon = relationship('Lexicon', back_populates='index_rules')
|
lexicon = relationship('Lexicon', back_populates='index_rules')
|
||||||
index = relationship('ArticleIndex', back_populates='index_rules')
|
index = relationship('ArticleIndex', back_populates='index_rules')
|
||||||
character = relationship('Character', back_populates='index_rules')
|
character = relationship('Character', back_populates='index_rules')
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleContentRuleType(enum.Enum):
|
||||||
|
"""
|
||||||
|
The possible article content rules.
|
||||||
|
"""
|
||||||
|
# Whether characters can cite themselves
|
||||||
|
ALLOW_SELF_CITE = 0
|
||||||
|
# Whether characters can write new articles instead of phantoms
|
||||||
|
ALLOW_NEW_ARTICLE = 1
|
||||||
|
# Required number of extant articles cited
|
||||||
|
CITE_EXTANT_MIN = 2
|
||||||
|
CITE_EXTANT_MAX = 3
|
||||||
|
# Required number of phantom articles cited
|
||||||
|
CITE_PHANTOM_MIN = 4
|
||||||
|
CITE_PHANTOM_MAX = 5
|
||||||
|
# Required number of new articles cited
|
||||||
|
CITE_NEW_MIN = 6
|
||||||
|
CITE_NEW_MAX = 7
|
||||||
|
# Required number of characters among authors of articles cited
|
||||||
|
CITE_CHARS_MIN = 8
|
||||||
|
CITE_CHARS_MAX = 9
|
||||||
|
# Required number of citations of any kind
|
||||||
|
CITE_TOTAL_MIN = 10
|
||||||
|
CITE_TOTAL_MAX = 11
|
||||||
|
# Warn player below this wordcount
|
||||||
|
WORD_MIN_SOFT = 12
|
||||||
|
# Require player to exceed this wordcount
|
||||||
|
WORD_MIN_HARD = 13
|
||||||
|
# Warn player above this wordcount
|
||||||
|
WORD_MAX_SOFT = 14
|
||||||
|
# Require player to be under this wordcount
|
||||||
|
WORD_MAX_HARD = 15
|
||||||
|
|
||||||
|
|
||||||
|
class ArticleContentRule(ModelBase):
|
||||||
|
"""
|
||||||
|
Represents a restriction on the content of an article for a turn.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'article_content_rule'
|
||||||
|
|
||||||
|
#####################
|
||||||
|
# Content rule info #
|
||||||
|
#####################
|
||||||
|
|
||||||
|
# Primary content rule id
|
||||||
|
id = Column(Integer, primary_key=True)
|
||||||
|
|
||||||
|
# The lexicon of this content rule
|
||||||
|
lexicon_id = Column(Integer, ForeignKey('lexicon.id'), nullable=False)
|
||||||
|
|
||||||
|
######################
|
||||||
|
# Content rule scope #
|
||||||
|
######################
|
||||||
|
|
||||||
|
# The turn in which this rule applies
|
||||||
|
turn = Column(Integer, nullable=False)
|
||||||
|
|
||||||
|
###########################
|
||||||
|
# The content of the rule #
|
||||||
|
###########################
|
||||||
|
|
||||||
|
# The content rule type that is being declared
|
||||||
|
rule_name = Column(Enum(ArticleContentRuleType), nullable=False)
|
||||||
|
|
||||||
|
# The new value for the rule
|
||||||
|
# If this is NULL, the rule is disabled or has the default value
|
||||||
|
rule_value = Column(Integer, nullable=True)
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Foreign key relationships #
|
||||||
|
#############################
|
||||||
|
|
||||||
|
lexicon = relationship('Lexicon', back_populates='content_rules')
|
||||||
|
|
||||||
|
|
||||||
|
class Post(ModelBase):
|
||||||
|
"""
|
||||||
|
Represents a post in the game feed.
|
||||||
|
"""
|
||||||
|
__tablename__ = 'post'
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Post info #
|
||||||
|
#############
|
||||||
|
|
||||||
|
# Primary post id
|
||||||
|
id = Column(Integer, primary_key=True)
|
||||||
|
|
||||||
|
# The lexicon in which the post was made
|
||||||
|
lexicon_id = Column(Integer, ForeignKey('lexicon.id'), nullable=False)
|
||||||
|
|
||||||
|
# The user who made the post
|
||||||
|
user_id = Column(Integer, ForeignKey('user.id'), nullable=False)
|
||||||
|
|
||||||
|
################
|
||||||
|
# Post content #
|
||||||
|
################
|
||||||
|
|
||||||
|
# The timestamp the post was created
|
||||||
|
created = Column(DateTime, nullable=False, server_default=text('CURRENT_TIMESTAMP'))
|
||||||
|
|
||||||
|
# The body of the post
|
||||||
|
body = Column(Text, nullable=False)
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Foreign key relationships #
|
||||||
|
#############################
|
||||||
|
|
||||||
|
user = relationship('User', back_populates='posts')
|
||||||
|
lexicon = relationship('Lexicon', back_populates='posts')
|
||||||
|
|
Loading…
Reference in New Issue