All column names are now lowercase

This commit is contained in:
Ben 2019-05-29 22:51:38 +01:00
parent 094ee97f4d
commit 3c09434012
19 changed files with 1313 additions and 1292 deletions

File diff suppressed because it is too large Load Diff

View File

@ -56,16 +56,16 @@ class PenguinStringCompiler(OrderedDict):
@classmethod @classmethod
def setup_default_builder(cls, string_builder): def setup_default_builder(cls, string_builder):
string_builder.update({ string_builder.update({
'ID': PenguinStringCompiler.data_attribute_by_name('ID'), 'ID': PenguinStringCompiler.data_attribute_by_name('id'),
'Nickname': PenguinStringCompiler.attribute_by_name('Nickname'), 'Nickname': PenguinStringCompiler.attribute_by_name('nickname'),
'Approval': PenguinStringCompiler.attribute_by_name('approval'), 'Approval': PenguinStringCompiler.data_attribute_by_name('approval'),
'Color': PenguinStringCompiler.data_attribute_by_name('Color'), 'Color': PenguinStringCompiler.data_attribute_by_name('color'),
'Head': PenguinStringCompiler.data_attribute_by_name('Head'), 'Head': PenguinStringCompiler.data_attribute_by_name('head'),
'Face': PenguinStringCompiler.data_attribute_by_name('Face'), 'Face': PenguinStringCompiler.data_attribute_by_name('face'),
'Neck': PenguinStringCompiler.data_attribute_by_name('Neck'), 'Neck': PenguinStringCompiler.data_attribute_by_name('neck'),
'Body': PenguinStringCompiler.data_attribute_by_name('Body'), 'Body': PenguinStringCompiler.data_attribute_by_name('body'),
'Hand': PenguinStringCompiler.data_attribute_by_name('Name'), 'Hand': PenguinStringCompiler.data_attribute_by_name('hand'),
'Photo': PenguinStringCompiler.data_attribute_by_name('Photo'), 'Photo': PenguinStringCompiler.data_attribute_by_name('photo'),
'X': PenguinStringCompiler.attribute_by_name('x'), 'X': PenguinStringCompiler.attribute_by_name('x'),
'Y': PenguinStringCompiler.attribute_by_name('y'), 'Y': PenguinStringCompiler.attribute_by_name('y'),
'Frame': PenguinStringCompiler.attribute_by_name('frame'), 'Frame': PenguinStringCompiler.attribute_by_name('frame'),
@ -80,14 +80,14 @@ class PenguinStringCompiler(OrderedDict):
@classmethod @classmethod
def setup_anonymous_default_builder(cls, string_builder): def setup_anonymous_default_builder(cls, string_builder):
string_builder.update({ string_builder.update({
'ID': PenguinStringCompiler.attribute_by_name('ID'), 'ID': PenguinStringCompiler.attribute_by_name('id'),
'Nickname': PenguinStringCompiler.attribute_by_name('Nickname'), 'Nickname': PenguinStringCompiler.attribute_by_name('nickname'),
'Approval': PenguinStringCompiler.attribute_by_name('approval'), 'Approval': PenguinStringCompiler.attribute_by_name('approval'),
'Color': PenguinStringCompiler.attribute_by_name('Color'), 'Color': PenguinStringCompiler.attribute_by_name('color'),
'Head': PenguinStringCompiler.attribute_by_name('Head'), 'Head': PenguinStringCompiler.attribute_by_name('head'),
'Face': PenguinStringCompiler.attribute_by_name('Face'), 'Face': PenguinStringCompiler.attribute_by_name('face'),
'Neck': PenguinStringCompiler.attribute_by_name('Neck'), 'Neck': PenguinStringCompiler.attribute_by_name('neck'),
'Body': PenguinStringCompiler.attribute_by_name('Body'), 'Body': PenguinStringCompiler.attribute_by_name('body'),
'Hand': PenguinStringCompiler.attribute_by_name('Name'), 'Hand': PenguinStringCompiler.attribute_by_name('name'),
'Photo': PenguinStringCompiler.attribute_by_name('Photo') 'Photo': PenguinStringCompiler.attribute_by_name('photo')
}) })

View File

@ -4,44 +4,41 @@ from houdini.data import db
class BuddyList(db.Model): class BuddyList(db.Model):
__tablename__ = 'buddy_list' __tablename__ = 'buddy_list'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
BuddyID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, buddy_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False, index=True) nullable=False, index=True)
BestBuddy = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) best_buddy = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
t_buddy_request = db.Table( class BuddyRequest(db.Model):
'buddy_request', db, __tablename__ = 'buddy_request'
db.Column('PenguinID', db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False), nullable=False)
db.Column('RequesterID', db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, requester_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)
t_ignore_list = db.Table( class IgnoreList(db.Model):
'ignore_list', db, __tablename__ = 'ignore_list'
db.Column('PenguinID', db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False), nullable=False),
db.Column('IgnoreID', db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, ignore_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False, index=True) nullable=False, index=True)
)
class Character(db.Model): class Character(db.Model):
__tablename__ = 'character' __tablename__ = 'character'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(30), nullable=False) name = db.Column(db.String(30), nullable=False)
GiftID = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) gift_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
StampID = db.Column(db.ForeignKey('stamp.ID', ondelete='CASCADE', onupdate='CASCADE')) stamp_id = db.Column(db.ForeignKey('stamp.id', ondelete='CASCADE', onupdate='CASCADE'))
t_character_buddy = db.Table( class CharacterBuddy(db.Model):
'character_buddy', db, __tablename__ = 'character_buddy'
db.Column('PenguinID', db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False), nullable=False)
db.Column('CharacterID', db.ForeignKey('character.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, character_id = db.Column(db.ForeignKey('character.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)

View File

@ -4,7 +4,7 @@ from houdini.data import db
class DanceSong(db.Model): class DanceSong(db.Model):
__tablename__ = 'dance_song' __tablename__ = 'dance_song'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(30), nullable=False) name = db.Column(db.String(30), nullable=False)
SongLength = db.Column(db.Integer, nullable=False, server_default=db.text("100000")) song_length = db.Column(db.Integer, nullable=False, server_default=db.text("100000"))
MillisPerBar = db.Column(db.Integer, nullable=False, server_default=db.text("2000")) millis_per_bar = db.Column(db.Integer, nullable=False, server_default=db.text("2000"))

View File

@ -1,72 +1,72 @@
from houdini.data import db, BaseCrumbsCollection from houdini.data import db, BaseCrumbsCollection
from houdini.data.penguin import PenguinIgloo, PenguinLocation, PenguinFurniture from houdini.data.penguin import PenguinIgloo, PenguinLocation, PenguinFurniture, PenguinFlooring
class Flooring(db.Model): class Flooring(db.Model):
__tablename__ = 'flooring' __tablename__ = 'flooring'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50)) name = db.Column(db.String(50))
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class Furniture(db.Model): class Furniture(db.Model):
__tablename__ = 'furniture' __tablename__ = 'furniture'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
Type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
Sort = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) sort = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Bait = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) bait = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
MaxQuantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) max_quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
class Igloo(db.Model): class Igloo(db.Model):
__tablename__ = 'igloo' __tablename__ = 'igloo'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
Cost = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) cost = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class IglooFurniture(db.Model): class IglooFurniture(db.Model):
__tablename__ = 'igloo_furniture' __tablename__ = 'igloo_furniture'
IglooID = db.Column(db.ForeignKey('penguin_igloo_room.ID', ondelete='CASCADE', onupdate='CASCADE'), igloo_id = db.Column(db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False, index=True) primary_key=True, nullable=False, index=True)
FurnitureID = db.Column(db.ForeignKey('furniture.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
X = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) x = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
Y = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) y = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
Frame = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) frame = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
Rotation = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) rotation = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
class IglooLike(db.Model): class IglooLike(db.Model):
__tablename__ = 'igloo_like' __tablename__ = 'igloo_like'
IglooID = db.Column(db.ForeignKey('penguin_igloo_room.ID', ondelete='CASCADE', onupdate='CASCADE'), igloo_id = db.Column(db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False) primary_key=True, nullable=False)
OwnerID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, owner_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
PlayerID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, player_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Count = db.Column(db.SmallInteger, nullable=False) count = db.Column(db.SmallInteger, nullable=False)
Date = db.Column(db.Date, nullable=False, server_default=db.text("now()")) date = db.Column(db.Date, nullable=False, server_default=db.text("now()"))
class Location(db.Model): class Location(db.Model):
__tablename__ = 'location' __tablename__ = 'location'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class IglooCrumbsCollection(BaseCrumbsCollection): class IglooCrumbsCollection(BaseCrumbsCollection):

View File

@ -5,16 +5,16 @@ from houdini.data.penguin import PenguinItem
class Item(db.Model): class Item(db.Model):
__tablename__ = 'item' __tablename__ = 'item'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50)) name = db.Column(db.String(50))
Type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Bait = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) bait = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) patched = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
EPF = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) epf = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Tour = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) tour = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ReleaseDate = db.Column(db.Date, nullable=False, server_default=db.text("now()")) release_date = db.Column(db.Date, nullable=False, server_default=db.text("now()"))
class ItemCrumbsCollection(BaseCrumbsCollection): class ItemCrumbsCollection(BaseCrumbsCollection):

View File

@ -5,10 +5,10 @@ from houdini.data.penguin import PenguinPostcard
class Postcard(db.Model): class Postcard(db.Model):
__tablename__ = 'postcard' __tablename__ = 'postcard'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("10")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("10"))
Enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PostcardCrumbsCollection(BaseCrumbsCollection): class PostcardCrumbsCollection(BaseCrumbsCollection):

View File

@ -4,34 +4,34 @@ from houdini.data import db
class Ban(db.Model): class Ban(db.Model):
__tablename__ = 'ban' __tablename__ = 'ban'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Issued = db.Column(db.DateTime, primary_key=True, nullable=False, server_default=db.text("now()")) issued = db.Column(db.DateTime, primary_key=True, nullable=False, server_default=db.text("now()"))
Expires = db.Column(db.DateTime, primary_key=True, nullable=False, server_default=db.text("now()")) expires = db.Column(db.DateTime, primary_key=True, nullable=False, server_default=db.text("now()"))
ModeratorID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), index=True) moderator_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), index=True)
Reason = db.Column(db.SmallInteger, nullable=False) reason = db.Column(db.SmallInteger, nullable=False)
Comment = db.Column(db.Text) comment = db.Column(db.Text)
class Warning(db.Model): class Warning(db.Model):
__tablename__ = 'warning' __tablename__ = 'warning'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Issued = db.Column(db.DateTime, primary_key=True, nullable=False) issued = db.Column(db.DateTime, primary_key=True, nullable=False)
Expires = db.Column(db.DateTime, primary_key=True, nullable=False) expires = db.Column(db.DateTime, primary_key=True, nullable=False)
Type = db.Column(db.SmallInteger, nullable=False) type = db.Column(db.SmallInteger, nullable=False)
Comment = db.Column(db.Text, nullable=False) comment = db.Column(db.Text, nullable=False)
class Report(db.Model): class Report(db.Model):
__tablename__ = 'report' __tablename__ = 'report'
ID = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"report_ID_seq\"'::regclass)")) id = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"report_ID_seq\"'::regclass)"))
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
ReporterID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) reporter_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
ReportType = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) report_type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
ServerID = db.Column(db.Integer, nullable=False) server_id = db.Column(db.Integer, nullable=False)
RoomID = db.Column(db.ForeignKey('room.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) room_id = db.Column(db.ForeignKey('room.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)

View File

@ -4,19 +4,19 @@ from houdini.data import db
class PenguinTrack(db.Model): class PenguinTrack(db.Model):
__tablename__ = 'penguin_track' __tablename__ = 'penguin_track'
ID = db.Column(db.Integer, primary_key=True, id = db.Column(db.Integer, primary_key=True,
server_default=db.text("nextval('\"penguin_track_ID_seq\"'::regclass)")) server_default=db.text("nextval('\"penguin_track_id_seq\"'::regclass)"))
Name = db.Column(db.String(12), nullable=False, server_default=db.text("''::character varying")) name = db.Column(db.String(12), nullable=False, server_default=db.text("''::character varying"))
OwnerID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) owner_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Sharing = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) sharing = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Pattern = db.Column(db.Text, nullable=False) pattern = db.Column(db.Text, nullable=False)
class TrackLike(db.Model): class TrackLike(db.Model):
__tablename__ = 'track_like' __tablename__ = 'track_like'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
TrackID = db.Column(db.ForeignKey('penguin_track.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, track_id = db.Column(db.ForeignKey('penguin_track.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False, index=True) nullable=False, index=True)
Date = db.Column(db.DateTime, primary_key=True, nullable=False) date = db.Column(db.DateTime, primary_key=True, nullable=False)

View File

@ -5,14 +5,14 @@ from houdini.data.penguin import PenguinCard
class Card(db.Model): class Card(db.Model):
__tablename__ = 'card' __tablename__ = 'card'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
SetID = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) set_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
PowerID = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) power_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Element = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'s'::bpchar")) element = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'s'::bpchar"))
Color = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'b'::bpchar")) color = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'b'::bpchar"))
Value = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2")) value = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2"))
Description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying"))
class CardCrumbsCollection(BaseCrumbsCollection): class CardCrumbsCollection(BaseCrumbsCollection):

View File

@ -4,251 +4,260 @@ from houdini.data import db
class Penguin(db.Model): class Penguin(db.Model):
__tablename__ = 'penguin' __tablename__ = 'penguin'
ID = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"penguin_ID_seq\"'::regclass)")) id = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"penguin_id_seq\"'::regclass)"))
Username = db.Column(db.String(12), nullable=False, unique=True) username = db.Column(db.String(12), nullable=False, unique=True)
Nickname = db.Column(db.String(30), nullable=False) nickname = db.Column(db.String(30), nullable=False)
Password = db.Column(db.CHAR(60), nullable=False) password = db.Column(db.CHAR(60), nullable=False)
Email = db.Column(db.String(255), nullable=False, index=True) email = db.Column(db.String(255), nullable=False, index=True)
RegistrationDate = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) registration_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
Active = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) active = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
SafeChat = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) safe_chat = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
LastPaycheck = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) last_paycheck = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
MinutesPlayed = db.Column(db.Integer, nullable=False, server_default=db.text("0")) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Character = db.Column(db.ForeignKey('character.ID', ondelete='CASCADE', onupdate='CASCADE')) character = db.Column(db.ForeignKey('character.id', ondelete='CASCADE', onupdate='CASCADE'))
Igloo = db.Column(db.ForeignKey('penguin_igloo_room.ID', ondelete='CASCADE', onupdate='CASCADE')) igloo = db.Column(db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE'))
Coins = db.Column(db.Integer, nullable=False, server_default=db.text("500")) coins = db.Column(db.Integer, nullable=False, server_default=db.text("500"))
Color = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) color = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Head = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) head = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Face = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) face = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Neck = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) neck = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Body = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) body = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Hand = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) hand = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Feet = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) feet = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Photo = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) photo = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Flag = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) flag = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Permaban = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) permaban = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
BookModified = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_modified = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
BookColor = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_color = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
BookHighlight = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_highlight = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
BookPattern = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_pattern = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
BookIcon = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_icon = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
AgentStatus = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) agent_status = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
FieldOpStatus = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) field_op_status = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
CareerMedals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) career_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
AgentMedals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) agent_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
LastFieldOp = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) last_field_op = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
NinjaRank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
NinjaProgress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
FireNinjaRank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
FireNinjaProgress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
WaterNinjaRank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
WaterNinjaProgress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
NinjaMatchesWon = db.Column(db.Integer, nullable=False, server_default=db.text("0")) ninja_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
FireMatchesWon = db.Column(db.Integer, nullable=False, server_default=db.text("0")) fire_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
WaterMatchesWon = db.Column(db.Integer, nullable=False, server_default=db.text("0")) water_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
RainbowAdoptability = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) rainbow_adoptability = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
HasDug = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) has_dug = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Nuggets = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) nuggets = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
TimerActive = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) timer_active = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
TimerStart = db.Column(db.Time, nullable=False, server_default=db.text("'00:00:00'::time without time zone")) timer_start = db.Column(db.Time, nullable=False, server_default=db.text("'00:00:00'::time without time zone"))
TimerEnd = db.Column(db.Time, nullable=False, server_default=db.text("'23:59:59'::time without time zone")) timer_end = db.Column(db.Time, nullable=False, server_default=db.text("'23:59:59'::time without time zone"))
ApprovalEn = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ApprovalPt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ApprovalFr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ApprovalEs = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ApprovalDe = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
ApprovalRu = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionEn = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionPt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionFr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionEs = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionDe = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
RejectionRu = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
@property @property
def approval(self): def approval(self):
return int('{}{}0{}{}{}{}'.format(self.ApprovalRu * 1, self.ApprovalDe * 1, self.ApprovalEs * 1, return int('{}{}0{}{}{}{}'.format(self.approval_ru * 1, self.approval_de * 1, self.approval_es * 1,
self.ApprovalFr * 1, self.ApprovalPt * 1, self.ApprovalEn * 1), 2) self.approval_fr * 1, self.approval_pt * 1, self.approval_en * 1), 2)
@property @property
def rejection(self): def rejection(self):
return int('{}{}0{}{}{}{}'.format(self.RejectionRu * 1, self.RejectionDe * 1, self.RejectionEs * 1, return int('{}{}0{}{}{}{}'.format(self.rejection_ru * 1, self.rejection_de * 1, self.rejection_es * 1,
self.RejectionFr * 1, self.RejectionPt * 1, self.RejectionEn * 1), 2) self.rejection_fr * 1, self.rejection_pt * 1, self.rejection_en * 1), 2)
class ActivationKey(db.Model): class ActivationKey(db.Model):
__tablename__ = 'activation_key' __tablename__ = 'activation_key'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
ActivationKey = db.Column(db.CHAR(255), primary_key=True, nullable=False) activation_key = db.Column(db.CHAR(255), primary_key=True, nullable=False)
class PuffleQuest(db.Model): class PuffleQuest(db.Model):
__tablename__ = 'puffle_quest' __tablename__ = 'puffle_quest'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
TaskID = db.Column(db.SmallInteger, primary_key=True, nullable=False) task_id = db.Column(db.SmallInteger, primary_key=True, nullable=False)
CompletionDate = db.Column(db.DateTime) completion_date = db.Column(db.DateTime)
ItemCollected = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) item_collected = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
CoinsCollected = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) coins_collected = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PenguinIgloo(db.Model): class PenguinIgloo(db.Model):
__tablename__ = 'penguin_igloo' __tablename__ = 'penguin_igloo'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
IglooID = db.Column(db.ForeignKey('igloo.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, igloo_id = db.Column(db.ForeignKey('igloo.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
class PenguinItem(db.Model): class PenguinItem(db.Model):
__tablename__ = 'penguin_item' __tablename__ = 'penguin_item'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False) primary_key=True, nullable=False)
ItemID = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE'), item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False) primary_key=True, nullable=False)
class PenguinLocation(db.Model): class PenguinLocation(db.Model):
__tablename__ = 'penguin_location' __tablename__ = 'penguin_location'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
LocationID = db.Column(db.ForeignKey('location.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, location_id = db.Column(db.ForeignKey('location.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
class PenguinStamp(db.Model): class PenguinStamp(db.Model):
__tablename__ = 'penguin_stamp' __tablename__ = 'penguin_stamp'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
StampID = db.Column(db.ForeignKey('stamp.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, stamp_id = db.Column(db.ForeignKey('stamp.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Recent = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) recent = db.Column(db.Boolean, nullable=False, server_default=db.text("true"))
class PenguinRedemption(db.Model): class PenguinRedemption(db.Model):
__tablename__ = 'penguin_redemption' __tablename__ = 'penguin_redemption'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
CodeID = db.Column(db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False, index=True) nullable=False, index=True)
BookID = db.Column(db.ForeignKey('redemption_book.ID', ondelete='CASCADE', onupdate='CASCADE'), index=True) book_id = db.Column(db.ForeignKey('redemption_book.id', ondelete='CASCADE', onupdate='CASCADE'), index=True)
class PenguinMembership(db.Model): class PenguinMembership(db.Model):
__tablename__ = 'penguin_membership' __tablename__ = 'penguin_membership'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Start = db.Column(db.DateTime, primary_key=True, nullable=False) start = db.Column(db.DateTime, primary_key=True, nullable=False)
End = db.Column(db.DateTime, primary_key=True, nullable=False) expires = db.Column(db.DateTime, primary_key=True, nullable=False)
class PenguinPostcard(db.Model): class PenguinPostcard(db.Model):
__tablename__ = 'penguin_postcard' __tablename__ = 'penguin_postcard'
ID = db.Column(db.Integer, primary_key=True, id = db.Column(db.Integer, primary_key=True,
server_default=db.text("nextval('\"penguin_postcard_ID_seq\"'::regclass)")) server_default=db.text("nextval('\"penguin_postcard_id_seq\"'::regclass)"))
SenderID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), index=True) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False,
RecipientID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False,
index=True) index=True)
PostcardID = db.Column(db.ForeignKey('postcard.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) sender_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), index=True)
SendDate = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) postcard_id = db.Column(db.ForeignKey('postcard.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Details = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) send_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
HasRead = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) details = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying"))
has_read = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PenguinIglooRoom(db.Model): class PenguinIglooRoom(db.Model):
__tablename__ = 'penguin_igloo_room' __tablename__ = 'penguin_igloo_room'
ID = db.Column(db.Integer, primary_key=True, id = db.Column(db.Integer, primary_key=True,
server_default=db.text("nextval('\"penguin_igloo_room_ID_seq\"'::regclass)")) server_default=db.text("nextval('\"penguin_igloo_room_id_seq\"'::regclass)"))
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Type = db.Column(db.ForeignKey('igloo.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) type = db.Column(db.ForeignKey('igloo.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Flooring = db.Column(db.ForeignKey('flooring.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) flooring = db.Column(db.ForeignKey('flooring.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Music = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) music = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Location = db.Column(db.ForeignKey('location.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) location = db.Column(db.ForeignKey('location.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Locked = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) locked = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PenguinLaunchGame(db.Model): class PenguinLaunchGame(db.Model):
__tablename__ = 'penguin_launch_game' __tablename__ = 'penguin_launch_game'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Level = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0")) level = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("0"))
PuffleOs = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) puffle_os = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
BestTime = db.Column(db.SmallInteger, nullable=False, server_default=db.text("600")) best_time = db.Column(db.SmallInteger, nullable=False, server_default=db.text("600"))
Turbo = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) turbo = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
class PenguinCard(db.Model): class PenguinCard(db.Model):
__tablename__ = 'penguin_card' __tablename__ = 'penguin_card'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False, index=True) nullable=False, index=True)
CardID = db.Column(db.ForeignKey('card.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, card_id = db.Column(db.ForeignKey('card.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class PenguinFurniture(db.Model): class PenguinFurniture(db.Model):
__tablename__ = 'penguin_furniture' __tablename__ = 'penguin_furniture'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
FurnitureID = db.Column(db.ForeignKey('furniture.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class PenguinFlooring(db.Model):
__tablename__ = 'penguin_flooring'
penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
flooring_id = db.Column(db.ForeignKey('flooring.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
class PenguinPuffle(db.Model): class PenguinPuffle(db.Model):
__tablename__ = 'penguin_puffle' __tablename__ = 'penguin_puffle'
ID = db.Column(db.Integer, primary_key=True, id = db.Column(db.Integer, primary_key=True,
server_default=db.text("nextval('\"penguin_puffle_ID_seq\"'::regclass)")) server_default=db.text("nextval('\"penguin_puffle_id_seq\"'::regclass)"))
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Name = db.Column(db.String(16), nullable=False) puffle_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
AdoptionDate = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) name = db.Column(db.String(16), nullable=False)
Type = db.Column(db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) adoption_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
Food = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) food = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
Play = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) play = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
Rest = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) rest = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
Clean = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) clean = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
Walking = db.Column(db.Boolean, server_default=db.text("false")) walking = db.Column(db.Boolean, server_default=db.text("false"))
Hat = db.Column(db.ForeignKey('puffle_item.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) hat = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Backyard = db.Column(db.Boolean, server_default=db.text("false")) backyard = db.Column(db.Boolean, server_default=db.text("false"))
HasDug = db.Column(db.Boolean, server_default=db.text("false")) has_dug = db.Column(db.Boolean, server_default=db.text("false"))
class PenguinPuffleItem(db.Model): class PenguinPuffleItem(db.Model):
__tablename__ = 'penguin_puffle_item' __tablename__ = 'penguin_puffle_item'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
ItemID = db.Column(db.Integer, primary_key=True, nullable=False) item_id = db.Column(db.Integer, primary_key=True, nullable=False)
Quantity = db.Column(db.SmallInteger, nullable=False) quantity = db.Column(db.SmallInteger, nullable=False)
class PenguinPermission(db.Model): class PenguinPermission(db.Model):
__tablename__ = 'penguin_permission' __tablename__ = 'penguin_permission'
PenguinID = db.Column(db.ForeignKey(u'penguin.ID', ondelete=u'CASCADE', onupdate=u'CASCADE'), primary_key=True) penguin_id = db.Column(db.ForeignKey(u'penguin.id', ondelete=u'CASCADE', onupdate=u'CASCADE'), primary_key=True)
PermissionID = db.Column(db.ForeignKey(u'permission.ID', ondelete=u'CASCADE', onupdate=u'CASCADE'), nullable=False) permission_id = db.Column(db.ForeignKey(u'permission.id', ondelete=u'CASCADE', onupdate=u'CASCADE'), nullable=False)
class Login(db.Model): class Login(db.Model):
__tablename__ = 'login' __tablename__ = 'login'
ID = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"login_ID_seq\"'::regclass)")) id = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"login_id_seq\"'::regclass)"))
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()"))
IPAddress = db.Column(db.CHAR(255), nullable=False) i_p_address = db.Column(db.CHAR(255), nullable=False)

View File

@ -5,9 +5,9 @@ from houdini.data.penguin import PenguinPermission
class Permission(db.Model): class Permission(db.Model):
__tablename__ = 'permission' __tablename__ = 'permission'
ID = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"permission_ID_seq\"'::regclass)")) id = db.Column(db.Integer, primary_key=True, server_default=db.text("nextval('\"permission_id_seq\"'::regclass)"))
Name = db.Column(db.String(50), nullable=False, unique=True) name = db.Column(db.String(50), nullable=False, unique=True)
Enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("true")) enabled = db.Column(db.Boolean, nullable=False, server_default=db.text("true"))
class PermissionCrumbsCollection(BaseCrumbsCollection): class PermissionCrumbsCollection(BaseCrumbsCollection):

View File

@ -5,59 +5,59 @@ from houdini.data.penguin import PenguinPuffle, PenguinPuffleItem
class Puffle(db.Model): class Puffle(db.Model):
__tablename__ = 'puffle' __tablename__ = 'puffle'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
ParentID = db.Column(db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) parent_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying")) name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying"))
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
FavouriteFood = db.Column(db.ForeignKey('puffle_item.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) favourite_food = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
RunawayPostcard = db.Column(db.ForeignKey('postcard.ID', ondelete='CASCADE', onupdate='CASCADE')) runaway_postcard = db.Column(db.ForeignKey('postcard.id', ondelete='CASCADE', onupdate='CASCADE'))
MaxFood = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) max_food = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
MaxRest = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) max_rest = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
MaxClean = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100")) max_clean = db.Column(db.SmallInteger, nullable=False, server_default=db.text("100"))
class PuffleItem(db.Model): class PuffleItem(db.Model):
__tablename__ = 'puffle_item' __tablename__ = 'puffle_item'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
ParentID = db.Column(db.ForeignKey('puffle_item.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) parent_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying")) name = db.Column(db.String(50), nullable=False, server_default=db.text("''::character varying"))
Type = db.Column(db.String(10), nullable=False, server_default=db.text("'care'::character varying")) type = db.Column(db.String(10), nullable=False, server_default=db.text("'care'::character varying"))
PlayExternal = db.Column(db.String(10), nullable=False, server_default=db.text("'none'::character varying")) play_external = db.Column(db.String(10), nullable=False, server_default=db.text("'none'::character varying"))
Cost = db.Column(db.Integer, nullable=False, server_default=db.text("0")) cost = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) quantity = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
FoodEffect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) food_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
RestEffect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) rest_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
PlayEffect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) play_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
CleanEffect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) clean_effect = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
class PuffleTreasureFurniture(db.Model): class PuffleTreasureFurniture(db.Model):
__tablename__ = 'puffle_treasure_furniture' __tablename__ = 'puffle_treasure_furniture'
PuffleID = db.Column(db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, puffle_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
FurnitureID = db.Column(db.ForeignKey('furniture.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
class PuffleTreasureItem(db.Model): class PuffleTreasureItem(db.Model):
__tablename__ = 'puffle_treasure_item' __tablename__ = 'puffle_treasure_item'
PuffleID = db.Column(db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, puffle_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
ItemID = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
class PuffleTreasurePuffleItem(db.Model): class PuffleTreasurePuffleItem(db.Model):
__tablename__ = 'puffle_treasure_puffle_item' __tablename__ = 'puffle_treasure_puffle_item'
PuffleID = db.Column(db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, puffle_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
PuffleItemID = db.Column(db.ForeignKey('puffle_item.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
puffle_item_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False)
class PuffleCrumbsCollection(BaseCrumbsCollection): class PuffleCrumbsCollection(BaseCrumbsCollection):

View File

@ -4,92 +4,91 @@ from houdini.data import db
class RedemptionBook(db.Model): class RedemptionBook(db.Model):
__tablename__ = 'redemption_book' __tablename__ = 'redemption_book'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(255), nullable=False) name = db.Column(db.String(255), nullable=False)
class RedemptionBookWord(db.Model): class RedemptionBookWord(db.Model):
__tablename__ = 'redemption_book_word' __tablename__ = 'redemption_book_word'
BookID = db.Column(db.ForeignKey('redemption_book.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, book_id = db.Column(db.ForeignKey('redemption_book.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Page = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) page = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1"))
Line = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) line = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1"))
WordNumber = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1")) word_number = db.Column(db.SmallInteger, primary_key=True, nullable=False, server_default=db.text("1"))
Answer = db.Column(db.String(20), nullable=False) answer = db.Column(db.String(20), nullable=False)
class RedemptionCode(db.Model): class RedemptionCode(db.Model):
__tablename__ = 'redemption_code' __tablename__ = 'redemption_code'
ID = db.Column(db.Integer, primary_key=True, id = db.Column(db.Integer, primary_key=True,
server_default=db.text("nextval('\"redemption_code_ID_seq\"'::regclass)")) server_default=db.text("nextval('\"redemption_code_id_seq\"'::regclass)"))
Code = db.Column(db.String(16), nullable=False, unique=True) code = db.Column(db.String(16), nullable=False, unique=True)
Type = db.Column(db.String(8), nullable=False, server_default=db.text("'BLANKET'::character varying")) type = db.Column(db.String(8), nullable=False, server_default=db.text("'BLANKET'::character varying"))
Coins = db.Column(db.Integer, nullable=False, server_default=db.text("0")) coins = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
Expires = db.Column(db.DateTime) expires = db.Column(db.DateTime)
t_redemption_award_card = db.Table( class RedemptionAwardCard(db.Model):
'redemption_award_card', db, __tablename__ = 'redemption_award_card'
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False),
db.Column('CardID', db.ForeignKey('card.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
) card_id = db.Column(db.ForeignKey('card.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
t_redemption_award_flooring = db.Table(
'redemption_award_flooring', db,
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False),
db.Column('FlooringID', db.ForeignKey('flooring.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)
t_redemption_award_furniture = db.Table(
'redemption_award_furniture', db,
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False),
db.Column('FurnitureID', db.ForeignKey('furniture.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
)
t_redemption_award_igloo = db.Table( class RedemptionAwardFlooring(db.Model):
'redemption_award_igloo', db, __tablename__ = 'redemption_award_flooring'
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False), nullable=False)
db.Column('IglooID', db.ForeignKey('igloo.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, flooring_id = db.Column(db.ForeignKey('flooring.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)
t_redemption_award_item = db.Table(
'redemption_award_item', db,
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False),
db.Column('ItemID', db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
)
t_redemption_award_location = db.Table( class RedemptionAwardFurniture(db.Model):
'redemption_award_location', db, __tablename__ = 'redemption_award_furniture'
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False), nullable=False)
db.Column('LocationID', db.ForeignKey('location.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, furniture_id = db.Column(db.ForeignKey('furniture.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)
t_redemption_award_puffle = db.Table(
'redemption_award_puffle', db,
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False),
db.Column('PuffleID', db.ForeignKey('puffle.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
)
t_redemption_award_puffle_item = db.Table( class RedemptionAwardIgloo(db.Model):
'redemption_award_puffle_item', db, __tablename__ = 'redemption_award_igloo'
db.Column('CodeID', db.ForeignKey('redemption_code.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, code_id = db.Column('CodeID', db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'),
nullable=False), primary_key=True,nullable=False)
db.Column('PuffleItemID', db.ForeignKey('puffle_item.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, igloo_id = db.Column(db.ForeignKey('igloo.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
)
class RedemptionAwardItem(db.Model):
__tablename__ = 'redemption_award_item'
code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
class RedemptionAwardLocation(db.Model):
__tablename__ = 'redemption_award_location'
code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
location_id = db.Column(db.ForeignKey('location.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
class RedemptionAwardPuffle(db.Model):
__tablename__ = 'redemption_award_puffle'
code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
puffle_id = db.Column(db.ForeignKey('puffle.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
class RedemptionAwardPuffleItem(db.Model):
__tablename__ = 'redemption_award_puffle_item'
code_id = db.Column(db.ForeignKey('redemption_code.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False)
puffle_item_id = db.Column(db.ForeignKey('puffle_item.id', ondelete='CASCADE', onupdate='CASCADE'),
primary_key=True, nullable=False)

View File

@ -4,17 +4,17 @@ from houdini.data import db, BaseCrumbsCollection
class Room(db.Model): class Room(db.Model):
__tablename__ = 'room' __tablename__ = 'room'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
InternalID = db.Column(db.Integer, nullable=False, unique=True, internal_id = db.Column(db.Integer, nullable=False, unique=True,
server_default=db.text("nextval('\"room_InternalID_seq\"'::regclass)")) server_default=db.text("nextval('\"room_internal_id_seq\"'::regclass)"))
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
MaxUsers = db.Column(db.SmallInteger, nullable=False, server_default=db.text("80")) max_users = db.Column(db.SmallInteger, nullable=False, server_default=db.text("80"))
RequiredItem = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE')) required_item = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'))
Game = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) game = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Blackhole = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) blackhole = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Spawn = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) spawn = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
StampGroup = db.Column(db.ForeignKey('stamp_group.ID', ondelete='CASCADE', onupdate='CASCADE')) stamp_group = db.Column(db.ForeignKey('stamp_group.id', ondelete='CASCADE', onupdate='CASCADE'))
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -50,10 +50,10 @@ class Room(db.Model):
class RoomTable(db.Model): class RoomTable(db.Model):
__tablename__ = 'room_table' __tablename__ = 'room_table'
ID = db.Column(db.Integer, primary_key=True, nullable=False) id = db.Column(db.Integer, primary_key=True, nullable=False)
RoomID = db.Column(db.ForeignKey('room.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, room_id = db.Column(db.ForeignKey('room.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Game = db.Column(db.String(20), nullable=False) game = db.Column(db.String(20), nullable=False)
GameClassMapping = { GameClassMapping = {
@ -111,11 +111,11 @@ class RoomTable(db.Model):
class RoomWaddle(db.Model): class RoomWaddle(db.Model):
__tablename__ = 'room_waddle' __tablename__ = 'room_waddle'
ID = db.Column(db.Integer, primary_key=True, nullable=False) id = db.Column(db.Integer, primary_key=True, nullable=False)
RoomID = db.Column(db.ForeignKey('room.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, room_id = db.Column(db.ForeignKey('room.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
Seats = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2")) seats = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2"))
Game = db.Column(db.String(20), nullable=False) game = db.Column(db.String(20), nullable=False)
GameClassMapping = { GameClassMapping = {

View File

@ -5,35 +5,35 @@ from houdini.data.penguin import PenguinStamp
class Stamp(db.Model): class Stamp(db.Model):
__tablename__ = 'stamp' __tablename__ = 'stamp'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
GroupID = db.Column(db.ForeignKey('stamp_group.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) group_id = db.Column(db.ForeignKey('stamp_group.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
Member = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) member = db.Column(db.Boolean, nullable=False, server_default=db.text("false"))
Rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1"))
Description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying"))
class StampGroup(db.Model): class StampGroup(db.Model):
__tablename__ = 'stamp_group' __tablename__ = 'stamp_group'
ID = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
Name = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False)
ParentID = db.Column(db.ForeignKey('stamp_group.ID', ondelete='CASCADE', onupdate='CASCADE')) parent_id = db.Column(db.ForeignKey('stamp_group.id', ondelete='CASCADE', onupdate='CASCADE'))
class CoverStamp(db.Model): class CoverStamp(db.Model):
__tablename__ = 'cover_stamp' __tablename__ = 'cover_stamp'
PenguinID = db.Column(db.ForeignKey('penguin.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
StampID = db.Column(db.ForeignKey('stamp.ID', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, stamp_id = db.Column(db.ForeignKey('stamp.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True,
nullable=False) nullable=False)
ItemID = db.Column(db.ForeignKey('item.ID', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) item_id = db.Column(db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)
X = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) x = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Y = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) y = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) type = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Rotation = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) rotation = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
Depth = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) depth = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0"))
class StampCrumbsCollection(BaseCrumbsCollection): class StampCrumbsCollection(BaseCrumbsCollection):

View File

@ -210,5 +210,5 @@ def player_data_attribute(**attrs):
def player_in_room(*room_ids): def player_in_room(*room_ids):
def check_room_id(_, p): def check_room_id(_, p):
return p.room.ID in room_ids return p.room.id in room_ids
return check(check_room_id) return check(check_room_id)

View File

@ -1,6 +1,6 @@
from houdini import handlers from houdini import handlers
from houdini.handlers import XMLPacket, login from houdini.handlers import XMLPacket, login
from houdini.converters import CredentialsConverter from houdini.converters import Credentials
from houdini.data.penguin import Penguin from houdini.data.penguin import Penguin
from houdini.data.buddy import BuddyList from houdini.data.buddy import BuddyList
from houdini.data.moderator import Ban from houdini.data.moderator import Ban
@ -17,21 +17,21 @@ from datetime import datetime
@handlers.handler(XMLPacket('login')) @handlers.handler(XMLPacket('login'))
@handlers.allow_once() @handlers.allow_once()
async def handle_login(p, credentials: CredentialsConverter): async def handle_login(p, credentials: Credentials):
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
login_timestamp = time.time() login_timestamp = time.time()
username, password = credentials username, password = credentials.username, credentials.password
p.logger.info('{} is logging in!'.format(username)) p.logger.info('{} is logging in!'.format(username))
data = await Penguin.query.where(Penguin.Username == username).gino.first() data = await Penguin.query.where(Penguin.username == username).gino.first()
if data is None: if data is None:
p.logger.info('{} failed to login: penguin does not exist') p.logger.info('{} failed to login: penguin does not exist')
await p.send_error_and_disconnect(100) await p.send_error_and_disconnect(100)
password_correct = await loop.run_in_executor(None, bcrypt.checkpw, password_correct = await loop.run_in_executor(None, bcrypt.checkpw,
password.encode('utf-8'), data.Password.encode('utf-8')) password.encode('utf-8'), data.password.encode('utf-8'))
ip_addr = p.peer_name[0] ip_addr = p.peer_name[0]
@ -64,16 +64,16 @@ async def handle_login(p, credentials: CredentialsConverter):
else: else:
del p.server.login_attempts[ip_addr] del p.server.login_attempts[ip_addr]
if not data.Active: if not data.active:
return await p.send_error_and_disconnect(900) return await p.send_error_and_disconnect(900)
if data.Permaban: if data.permaban:
return await p.send_error_and_disconnect(603) return await p.send_error_and_disconnect(603)
active_ban = await Ban.query.where(Ban.PenguinID == data.ID and Ban.Expires >= datetime.now()).gino.first() active_ban = await Ban.query.where(Ban.penguin_id == data.id and Ban.expires >= datetime.now()).gino.first()
if active_ban is not None: if active_ban is not None:
hours_left = round((active_ban.Expires - datetime.now()).total_seconds() / 60 / 60) hours_left = round((active_ban.expires - datetime.now()).total_seconds() / 60 / 60)
if hours_left == 0: if hours_left == 0:
return await p.send_error_and_disconnect(602) return await p.send_error_and_disconnect(602)
@ -86,8 +86,10 @@ async def handle_login(p, credentials: CredentialsConverter):
login_key = Crypto.hash(random_key[::-1]) login_key = Crypto.hash(random_key[::-1])
confirmation_hash = Crypto.hash(os.urandom(24)) confirmation_hash = Crypto.hash(os.urandom(24))
await p.server.redis.setex('{}.lkey'.format(data.ID), p.server.server_config['KeyTTL'], login_key) tr = p.server.redis.multi_exec()
await p.server.redis.setex('{}.ckey'.format(data.ID), p.server.server_config['KeyTTL'], confirmation_hash) tr.setex('{}.lkey'.format(data.id), p.server.server_config['KeyTTL'], login_key)
tr.setex('{}.ckey'.format(data.id), p.server.server_config['KeyTTL'], confirmation_hash)
await tr.execute()
buddy_worlds = [] buddy_worlds = []
world_populations = [] world_populations = []
@ -97,8 +99,9 @@ async def handle_login(p, credentials: CredentialsConverter):
for server_name, server_config in servers_config.items(): for server_name, server_config in servers_config.items():
if server_config['World']: if server_config['World']:
server_population = await p.server.redis.get('{}.population'.format(server_name)) server_population = await p.server.redis.get('{}.population'.format(server_name))
server_population = (7 if int(server_population) == server_config['Capacity'] \ server_population = (7 if int(server_population) == server_config['Capacity']
else int(server_population) / (server_config['Capacity'] / 6)) if server_population else 0 else int(server_population) / (server_config['Capacity'] / 6)) \
if server_population else 0
server_players = await p.server.redis.smembers('{}.players'.format(server_name)) server_players = await p.server.redis.smembers('{}.players'.format(server_name))
@ -114,9 +117,10 @@ async def handle_login(p, credentials: CredentialsConverter):
buddy_worlds.append(server_config['Id']) buddy_worlds.append(server_config['Id'])
break break
raw_login_data = '|'.join([str(data.ID), str(data.ID), data.Username, login_key, str(data.approval), raw_login_data = '|'.join([str(data.id), str(data.id), data.username, login_key, str(data.approval),
str(data.rejection)]) str(data.rejection)])
await p.send_xt('l', raw_login_data, confirmation_hash, '', '|'.join(world_populations), '|'.join(buddy_worlds), data.Email) await p.send_xt('l', raw_login_data, confirmation_hash, '', '|'.join(world_populations), '|'.join(buddy_worlds),
data.email)
handle_version_check = login.handle_version_check handle_version_check = login.handle_version_check
handle_random_key = login.handle_random_key handle_random_key = login.handle_random_key

View File

@ -57,5 +57,5 @@ class Penguin(Spheniscidae):
def __repr__(self): def __repr__(self):
if self.data is not None: if self.data is not None:
return '<Penguin ID=\'{}\' Username=\'{}\'>'.format(self.data.ID, self.data.Username) return '<Penguin ID=\'{}\' Username=\'{}\'>'.format(self.data.id, self.data.username)
return super().__repr__() return super().__repr__()