PCv5/app/models/trophies.py

43 lines
1.3 KiB
Python

from app import db
# Trophy: Achievements granted to users for performing specific actions
class Trophy(db.Model):
__tablename__ = 'trophy'
id = db.Column(db.Integer, primary_key=True)
# Trophy type (polymorphic discriminator)
type = db.Column(db.String(20))
__mapper_args__ = {
'polymorphic_identity': __tablename__,
'polymorphic_on': type
}
# Standalone properties
name = db.Column(db.Unicode(64), index=True)
owners = db.relationship('Member', secondary=lambda: TrophyMember,
back_populates='trophies')
def __init__(self, name):
self.name = name
# Title: Rare trophies that can be displayed along one's name
class Title(Trophy):
__tablename__ = 'title'
__mapper_args__ = {'polymorphic_identity': __tablename__}
id = db.Column(db.Integer, db.ForeignKey('trophy.id'), primary_key=True)
title = db.Column(db.Unicode(64))
css = db.Column(db.UnicodeText)
def __init__(self, name, title, css):
self.name = name
self.title = title
self.css = css
# 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')))