feat: add persistent badges and admin badge page
This commit is contained in:
@@ -46,6 +46,13 @@ class User(UserMixin, TimestampMixin, db.Model):
|
||||
lazy=True,
|
||||
)
|
||||
subscriptions = db.relationship("PushSubscription", backref="user", lazy=True, cascade="all, delete-orphan")
|
||||
awarded_badges = db.relationship(
|
||||
"UserBadge",
|
||||
backref="user",
|
||||
lazy=True,
|
||||
cascade="all, delete-orphan",
|
||||
order_by="desc(UserBadge.awarded_at)",
|
||||
)
|
||||
|
||||
def set_password(self, password: str) -> None:
|
||||
self.password_hash = generate_password_hash(password)
|
||||
@@ -165,3 +172,15 @@ class BadgeDefinition(TimestampMixin, db.Model):
|
||||
threshold = db.Column(db.Integer, nullable=False, default=1)
|
||||
bonus_points = db.Column(db.Integer, nullable=False, default=0)
|
||||
active = db.Column(db.Boolean, nullable=False, default=True)
|
||||
|
||||
user_badges = db.relationship("UserBadge", backref="badge_definition", lazy=True, cascade="all, delete-orphan")
|
||||
|
||||
|
||||
class UserBadge(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False, index=True)
|
||||
badge_definition_id = db.Column(db.Integer, db.ForeignKey("badge_definition.id"), nullable=False, index=True)
|
||||
awarded_at = db.Column(db.DateTime, nullable=False, default=utcnow, index=True)
|
||||
context = db.Column(db.Text, nullable=True)
|
||||
|
||||
__table_args__ = (db.UniqueConstraint("user_id", "badge_definition_id", name="uq_user_badge_once"),)
|
||||
|
||||
Reference in New Issue
Block a user