PCv5/app/models/trophies.py

48 lines
1.3 KiB
Python
Raw Normal View History

2019-06-06 23:24:14 +02:00
from app import db
# Trophy: Achievements granted to users for performing specific actions
2019-06-06 23:24:14 +02:00
class Trophy(db.Model):
__tablename__ = 'trophy'
# Trophy ID and type (polymorphic discriminator)
2019-06-06 23:24:14 +02:00
id = db.Column(db.Integer, primary_key=True)
type = db.Column(db.String(20))
2019-06-06 23:24:14 +02:00
__mapper_args__ = {
'polymorphic_identity': __tablename__,
'polymorphic_on': type
}
# Trophy name (in French)
name = db.Column(db.Unicode(64), index=True)
2019-06-06 23:24:14 +02:00
owners = db.relationship('Member', secondary=lambda: TrophyMember,
back_populates='trophies')
def __init__(self, name):
self.name = name
def __repr__(self):
return f'<Trophy: {self.name}>'
# Title: Rare trophies that can be displayed along one's name
2019-06-06 23:24:14 +02:00
class Title(Trophy):
__tablename__ = 'title'
__mapper_args__ = {'polymorphic_identity': __tablename__}
id = db.Column(db.Integer, db.ForeignKey('trophy.id'), primary_key=True)
css = db.Column(db.UnicodeText)
2019-06-06 23:24:14 +02:00
def __init__(self, name, css=""):
2019-06-06 23:24:14 +02:00
self.name = name
self.css = css
2019-06-06 23:24:14 +02:00
def __repr__(self):
return f'<Title: {self.name}>'
2019-06-06 23:24:14 +02:00
# Many-to-many relation for users earning trophies
TrophyMember = db.Table('trophy_member', db.Model.metadata,
db.Column('tid', db.Integer, db.ForeignKey('trophy.id')),
db.Column('uid', db.Integer, db.ForeignKey('member.id')))