class Review(db.Model, Base): __tablename__ = "reviews" rating = db.Column(db.Numeric()) content = db.Column(db.Unicode(2000)) mod_id = db.Column(None, db.ForeignKey("mods.id")) author_id = db.Column(None, db.ForeignKey("users.id")) def __init__(self, **kwargs): super().__init__(**kwargs) self._upvoters = set() self._downvoters = set() self._helpfuls = set() @property def upvoters(self): return self._upvoters @property def downvoters(self): return self._downvoters @property def helpfuls(self): return self._helpfuls
class Report(db.Model, Base): __tablename__ = "report" content = db.Column(db.Unicode(1000)) author_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE")) type = db.Column(db.Enum(ReportType))
class UserReport(db.Model, Base): __tablename__ = "userreport" # No underscore, as its not a many-many relationship. content = db.Column(db.Unicode(1000)) author_id = db.Column(None, db.ForeignKey("user.id")) user_id = db.Column(None, db.ForeignKey("user.id")) type = db.Column(db.Enum(UserReportType))
class Review(db.Model, Base): __tablename__ = "review" rating = db.Column(db.Numeric()) content = db.Column(db.Unicode(2000)) title = db.Column(db.Unicode(32)) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE")) author_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE"))
class EditorsChoice(db.Model, Base): __tablename__ = "editors_choice" mod_id = db.Column(None, db.ForeignKey("mods.id")) featured = db.Column(db.Boolean(), default=False) editors_notes = db.Column(db.Unicode(500), nullable=True) # 500 char limit as defined in spec author_id = db.Column(None, db.ForeignKey("users.id")) article_url = db.Column(db.Unicode(), nullable=True)
class Review(db.Model, Base): __tablename__ = "review" rating = db.Column(db.Numeric()) content = db.Column(db.Unicode(2000)) title = db.Column(db.Unicode(32)) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE")) author_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) def __init__(self, **kwargs): super().__init__(**kwargs) self._upvotes = [] self._downvotes = [] self._funnys = [] @property def upvotes(self): return self._upvotes @property def downvotes(self): return self._downvotes @property def funnys(self): return self._funnys @upvotes.setter def upvotes(self, value: "ReviewReaction"): self._upvotes.append(value) @downvotes.setter def downvotes(self, value: "ReviewReaction"): self._downvotes.append(value) @funnys.setter def funnys(self, value: "ReviewReaction"): self._funnys.append(value) def to_dict(self): return { **{k: v for k, v in super().to_dict}, "upvotes": self._upvotes, "downvotes": self._downvotes, "funnys": self._funnys, }
class Media(db.Model, Base): __tablename__ = "media" id = db.Column(db.Unicode(), primary_key=True) type = db.Column(db.Enum(MediaType)) url = db.Column(db.Unicode()) mod_id = db.Column(None, db.ForeignKey("mods.id"))
class UserFavorites(db.Model): __tablename__ = "user_favourites" user_id = db.Column(None, db.ForeignKey("users.id")) mod_id = db.Column(None, db.ForeignKey("mods.id"))
class Connection(db.Model, Base): __tablename__ = "connections" name = db.Column(db.Unicode()) type = db.Column(db.Enum(ConnectionType)) user = db.Column(None, db.ForeignKey("users.id"))
class ModAuthor(db.Model, Base): __tablename__ = "user_mod" role = db.Column(db.Enum(AuthorRole), default=AuthorRole.unassigned) user_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE"))
class ReviewDownvoters(db.Model): __tablename__ = "review_downvoters" review_id = db.Column(None, db.ForeignKey("reviews.id")) user_id = db.Column(None, db.ForeignKey("users.id"))
class ReviewHelpfuls(db.Model): __tablename__ = "review_helpfuls" review_id = db.Column(None, db.ForeignKey("reviews.id")) user_id = db.Column(None, db.ForeignKey("users.id"))
class ModPlaytester(db.Model, Base): __tablename__ = "mod_playtester" user_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE"))
class UserFavorite(db.Model, Base): __tablename__ = "user_favorite" user_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE"))
class ReviewReaction(db.Model, Base): __tablename__ = "review_reaction" review_id = db.Column(None, db.ForeignKey("review.id", ondelete="CASCADE")) user_id = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE")) reaction = db.Column(db.Enum(ReactionType), nullable=False)
class Media(db.Model, Base): __tablename__ = "media" type = db.Column(db.Enum(MediaType)) url = db.Column(db.Unicode()) mod_id = db.Column(None, db.ForeignKey("mod.id", ondelete="CASCADE"))
class Connection(db.Model, Base): __tablename__ = "connection" name = db.Column(db.Unicode()) type = db.Column(db.Enum(ConnectionType)) user = db.Column(None, db.ForeignKey("user.id", ondelete="CASCADE"))
class UserReport(db.Model, Base): __tablename__ = "user_reports" content = db.Column(db.Unicode(200)) author_id = db.Column(None, db.ForeignKey("users.id")) target_id = db.Column(None, db.ForeignKey("users.id"))
class ModAuthors(db.Model): __tablename__ = "user_mods" role = db.Column(db.Enum(AuthorRole), default=AuthorRole.Unassigned) user_id = db.Column(None, db.ForeignKey("users.id")) mod_id = db.Column(None, db.ForeignKey("mods.id"))
class Report(db.Model, Base): __tablename__ = "reports" content = db.Column(db.Unicode(200)) author_id = db.Column(None, db.ForeignKey("users.id")) mod_id = db.Column(None, db.ForeignKey("mods.id"))