This commit is contained in:
copyrighttxt
2026-07-06 13:28:00 -04:00
commit 05211f73ef
441 changed files with 94128 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
from app.extensions import db
class AdminPermissions(db.Model):
id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True)
userid = db.Column(db.BigInteger, nullable=False, index=True)
permission = db.Column(db.String(128), nullable=False, index=True)
def __init__(self, userid, permission):
self.userid = userid
self.permission = permission
def __repr__(self):
return "<AdminPermissions userid={userid}, permission={permission}>".format(
userid=self.userid,
permission=self.permission
)
+83
View File
@@ -0,0 +1,83 @@
from app.extensions import db
from app.enums.AssetType import AssetType
from sqlalchemy import Enum
from datetime import datetime
class Asset(db.Model):
id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True)
roblox_asset_id = db.Column(db.BigInteger, nullable=True, default=None, index=True) # Roblox asset ID
name = db.Column(db.Text, nullable=False) # Asset name
description = db.Column(db.String(4096), nullable=False) # Asset description
created_at = db.Column(db.DateTime, nullable=False) # Asset creation date
updated_at = db.Column(db.DateTime, nullable=False) # Asset last update date
asset_type = db.Column(Enum(AssetType), nullable=False, index=True) # Asset type (e.g. shirt, pants, etc.)
asset_genre = db.Column(db.SmallInteger, nullable=False) # Asset genre (e.g. all, town and city, etc.)
creator_type = db.Column(db.SmallInteger, nullable=False) # Asset creator type (e.g. user, group, etc.)
creator_id = db.Column(db.BigInteger, nullable=False, index=True) # Asset creator ID
moderation_status = db.Column(db.SmallInteger, nullable=False, index=True) # Asset moderation status ( 0 = Approved, 1 = Pending, 2 = Declined )
# Economy
is_for_sale = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset for sale?
price_robux = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Robux
price_tix = db.Column(db.BigInteger, nullable=False, default=0) # Asset price in Tix
is_limited = db.Column(db.Boolean, nullable=False, default=False, index=True) # Is the asset limited?
is_limited_unique = db.Column(db.Boolean, nullable=False, default=False) # Is the asset limited unique?
serial_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset serial count
sale_count = db.Column(db.BigInteger, nullable=False, default=0) # Asset sale count
offsale_at = db.Column(db.DateTime, nullable=True, default=None) # Asset offsale date
def __init__(
self,
roblox_asset_id=None,
name="Asset",
description="",
created_at=None,
updated_at=None,
asset_type=AssetType.Image,
asset_genre=0,
creator_type=0,
creator_id=1,
moderation_status=1,
is_for_sale=False,
price_robux=0,
price_tix=0,
is_limited=False,
is_limited_unique=False,
serial_count=0,
sale_count=0,
offsale_at=None,
force_asset_id=None
):
if created_at is None:
created_at = datetime.utcnow()
if updated_at is None:
updated_at = datetime.utcnow()
self.roblox_asset_id = roblox_asset_id
self.name = name
self.description = description
self.created_at = created_at
self.updated_at = updated_at
self.asset_type = asset_type
self.asset_genre = asset_genre
self.creator_type = creator_type
self.creator_id = creator_id
self.moderation_status = moderation_status
self.is_for_sale = is_for_sale
self.price_robux = price_robux
self.price_tix = price_tix
self.is_limited = is_limited
self.is_limited_unique = is_limited_unique
self.serial_count = serial_count
self.sale_count = sale_count
self.offsale_at = offsale_at
if force_asset_id is not None:
self.id = force_asset_id
def __repr__(self):
return f"<Asset {self.id}>"
+13
View File
@@ -0,0 +1,13 @@
from app.extensions import db
class AssetFavorite( db.Model ):
id = db.Column( db.BigInteger, primary_key=True, autoincrement=True )
assetid = db.Column( db.BigInteger, nullable=False, index=True )
userid = db.Column( db.BigInteger, nullable=False, index=True )
def __init__(self, assetid : int, userid : int):
self.assetid = assetid
self.userid = userid
def __repr__(self):
return f"<AssetFavorite {self.id} {self.assetid} {self.userid}>"
+27
View File
@@ -0,0 +1,27 @@
from app.extensions import db
# This is used for the asset moderation system to link two assets together, eg. a Image and Shirt
# So the moderator does not need to approve both assets
class AssetModerationLink(db.Model):
id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True)
ParentAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Parent asset ID, eg. Shirt
ChildAssetId = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Child asset ID eg. Image
ParentAsset = db.relationship("Asset", foreign_keys=[ParentAssetId], uselist=False, lazy="joined")
ChildAsset = db.relationship("Asset", foreign_keys=[ChildAssetId], uselist=False, lazy="joined")
def __init__(
self,
ParentAssetId,
ChildAssetId
):
self.ParentAssetId = ParentAssetId
self.ChildAssetId = ChildAssetId
def __repr__(self):
return "<AssetModerationLink id={id} ParentAssetId={ParentAssetId} ChildAssetId={ChildAssetId}>".format(
id=self.id,
ParentAssetId=self.ParentAssetId,
ChildAssetId=self.ChildAssetId
)
+23
View File
@@ -0,0 +1,23 @@
from app.extensions import db
from datetime import datetime
class AssetRap(db.Model):
assetid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True)
rap = db.Column(db.BigInteger, nullable=False, default=0)
updated = db.Column(db.DateTime, nullable=False)
def __init__(
self,
assetid,
rap=0
):
self.assetid = assetid
self.rap = rap
self.updated = datetime.utcnow()
def __repr__(self):
return "<AssetRap assetid={assetid}, rap={rap}, updated={updated}>".format(
assetid=self.assetid,
rap=self.rap,
updated=self.updated
)
+36
View File
@@ -0,0 +1,36 @@
from app.extensions import db
class AssetThumbnail(db.Model):
id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True)
asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID
asset_version_id = db.Column(db.BigInteger, nullable=False) # Asset version ID
content_hash = db.Column(db.String(512), nullable=False) # Asset thumbnail content hash
created_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail creation date
updated_at = db.Column(db.DateTime, nullable=False) # Asset thumbnail last update date
moderation_status = db.Column(db.SmallInteger, nullable=False) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined )
asset = db.relationship('Asset', backref=db.backref('thumbnails', lazy=True, uselist=True), uselist=False)
def __init__(
self,
asset_id,
asset_version_id,
content_hash,
created_at,
moderation_status
):
self.asset_id = asset_id
self.asset_version_id = asset_version_id
self.content_hash = content_hash
self.created_at = created_at
self.updated_at = created_at
self.moderation_status = moderation_status
def __repr__(self):
return "<AssetThumbnail asset_id={asset_id} asset_version_id={asset_version_id} content_hash={content_hash} created_at={created_at} updated_at={updated_at} moderation_status={moderation_status}>".format(
asset_id=self.asset_id,
asset_version_id=self.asset_version_id,
content_hash=self.content_hash,
created_at=self.created_at,
updated_at=self.updated_at,
moderation_status=self.moderation_status
)
+35
View File
@@ -0,0 +1,35 @@
from app.extensions import db
class AssetVersion(db.Model):
id = db.Column(db.BigInteger, primary_key=True, unique=True, nullable=False, autoincrement=True)
asset_id = db.Column(db.BigInteger, nullable=False, index=True)
version = db.Column(db.BigInteger, nullable=False)
content_hash = db.Column(db.String(512), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
uploaded_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True)
def __init__(
self,
asset_id,
version,
content_hash,
created_at,
uploaded_by=None
):
self.asset_id = asset_id
self.version = version
self.content_hash = content_hash
self.created_at = created_at
self.updated_at = created_at
self.uploaded_by = uploaded_by
def __repr__(self):
return "<AssetVersion id={id} asset_id={asset_id} version={version} content_hash={content_hash} created_at={created_at} updated_at={updated_at}>".format(
id=self.id,
asset_id=self.asset_id,
version=self.version,
content_hash=self.content_hash,
created_at=self.created_at,
updated_at=self.updated_at
)
+15
View File
@@ -0,0 +1,15 @@
from app.extensions import db
class AssetVote( db.Model ):
id = db.Column( db.BigInteger, primary_key=True )
assetid = db.Column( db.BigInteger, nullable=False, index=True )
userid = db.Column( db.BigInteger, nullable=False, index=True )
vote = db.Column( db.Boolean, nullable=False, default=True )
def __init__(self, assetid : int, userid : int, vote : bool):
self.assetid = assetid
self.userid = userid
self.vote = vote
def __repr__(self):
return f"<AssetVote {self.id} {self.assetid} {self.userid} {self.vote}>"
+52
View File
@@ -0,0 +1,52 @@
from app.extensions import db
from datetime import datetime
from app.enums.CryptomusPaymentStatus import CryptomusPaymentStatus
class CryptomusInvoice(db.Model):
id = db.Column( db.Text, primary_key=True, unique=True, nullable=False, index = True )
cryptomus_invoice_id = db.Column( db.Text, nullable=False, index = True )
initiator_id = db.Column( db.Integer, db.ForeignKey('user.id'), nullable=False, index = True )
required_amount = db.Column( db.Float, nullable=False )
paid_amount_usd = db.Column( db.Float, nullable=False, default=0 )
currency = db.Column( db.Text, nullable=False )
status = db.Column( db.Enum(CryptomusPaymentStatus), nullable=False )
is_final = db.Column( db.Boolean, nullable=False, default=False )
extra_data = db.Column( db.Text, nullable=True )
created_at = db.Column( db.DateTime, nullable=False )
updated_at = db.Column( db.DateTime, nullable=False )
expires_at = db.Column( db.DateTime, nullable=False )
assigned_key = db.Column( db.Text, nullable=True )
def __init__(
self,
id : str,
cryptomus_invoice_id : str,
initiator_id : int,
required_amount : float,
currency : str,
status : CryptomusPaymentStatus,
expires_at : datetime,
created_at : datetime = None,
updated_at : datetime = None,
paid_amount_usd : float = 0,
extra_data : str = None
):
self.id = id
self.cryptomus_invoice_id = cryptomus_invoice_id
self.initiator_id = initiator_id
self.required_amount = required_amount
self.currency = currency
self.status = status
self.expires_at = expires_at
self.created_at = created_at if created_at is not None else datetime.utcnow()
self.updated_at = updated_at if updated_at is not None else datetime.utcnow()
self.paid_amount_usd = paid_amount_usd
self.extra_data = extra_data
+54
View File
@@ -0,0 +1,54 @@
from app.extensions import db
from datetime import datetime, timedelta
class ExchangeOffer(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
creator = db.relationship('User', backref=db.backref('exchange_offers', lazy=True), foreign_keys=[creator_id], uselist=False)
offer_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is sending
receive_value = db.Column(db.BigInteger, nullable=False) # Amount of currency the creator is receiving
offer_currency_type = db.Column(db.SmallInteger, nullable=False) # Currency type of the offer value, 0 = Robux, 1 = Tix
# Recieve currency type is the opposite of the offer currency type
reciever_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # If the offer is accepted by someone, this will be set to the user's id
reciever = db.relationship('User', backref=db.backref('exchange_offers_recieved', lazy=True), foreign_keys=[reciever_id], uselist=False)
created_at = db.Column(db.DateTime, nullable=False)
expires_at = db.Column(db.DateTime, nullable=False)
ratio = db.Column(db.Float, nullable=False, default=0) # The ratio of the offer value to the receive value
worth = db.Column(db.Float, nullable=False, default=0, index = True)
def __init___(
self,
creator_id,
offer_value,
receive_value,
offer_currency_type=0, # Robux
reciever_id=None,
ratio = None,
created_at=None,
expires_at=None
):
if created_at is None:
created_at = datetime.utcnow()
if expires_at is None:
expires_at = datetime.utcnow() + timedelta(days=31)
self.creator_id = creator_id
self.offer_value = offer_value
self.receive_value = receive_value
self.offer_currency_type = offer_currency_type
self.reciever_id = reciever_id
self.created_at = created_at
self.expires_at = expires_at
if ratio is None:
self.ratio = (offer_value / receive_value) if offer_currency_type == 0 else (receive_value / offer_value)
else:
self.ratio = ratio
def __repr__(self):
return '<ExchangeOffer %r>' % self.id
+35
View File
@@ -0,0 +1,35 @@
from app.extensions import db
class FflagGroup(db.Model):
group_id = db.Column(db.BigInteger, primary_key=True, nullable=False, index=True) # Group ID
name = db.Column(db.String(128), nullable=False) # Group name
description = db.Column(db.String(512), nullable=False) # Group description
created_at = db.Column(db.DateTime, nullable=False) # Group creation date
updated_at = db.Column(db.DateTime, nullable=False) # Group last update date
enabled = db.Column(db.Boolean, nullable=False) # Group enabled
apikey = db.Column(db.String(128), nullable=True) # Group API key ( optional )
gameserver_only = db.Column(db.Boolean, nullable=False) # Group is for gameserver only
def __init__(
self,
group_id,
name,
description,
created_at,
enabled,
apikey
):
self.group_id = group_id
self.name = name
self.description = description
self.created_at = created_at
self.updated_at = created_at
self.enabled = enabled
self.apikey = apikey
def __repr__(self):
return "<FflagGroup group_id={group_id}, name={name}, enabled={enabled}>".format(
group_id=self.group_id,
name=self.name,
enabled=self.enabled
)
+29
View File
@@ -0,0 +1,29 @@
from app.extensions import db
class FflagValue(db.Model):
flag_id = db.Column(db.BigInteger, primary_key=True, nullable=False, autoincrement=True) # Flag ID
group_id = db.Column(db.BigInteger, nullable=False, index=True) # Group ID
name = db.Column(db.String(128), nullable=False) # Flag name
flag_type = db.Column(db.Integer, nullable=False, default=1) # Flag type ( 1 = bool, 2 = number, 3 = string)
flag_value = db.Column(db.Text, nullable=False) # Flag value ( base64 )
def __init__(
self,
group_id,
name,
flag_type,
flag_value
):
self.group_id = group_id
self.name = name
self.flag_type = flag_type
self.flag_value = flag_value
def __repr__(self):
return "<FflagValue flag_id={flag_id}, group_id={group_id}, name={name}, flag_type={flag_type}>".format(
flag_id=self.flag_id,
group_id=self.group_id,
name=self.name,
flag_type=self.flag_type
)
+20
View File
@@ -0,0 +1,20 @@
from app.extensions import db
from datetime import datetime
class FollowRelationship(db.Model):
id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True)
followerUserId = db.Column(db.BigInteger, nullable=False, index=True)
followeeUserId = db.Column(db.BigInteger, nullable=False, index=True)
created = db.Column(db.DateTime, nullable=False)
def __init__(self, followerUserId, followeeUserId):
self.followerUserId = followerUserId
self.followeeUserId = followeeUserId
self.created = datetime.utcnow()
def __repr__(self):
return "<FollowRelationship followerUserId={followerUserId}, followeeUserId={followeeUserId}, created={created}>".format(
followerUserId=self.followerUserId,
followeeUserId=self.followeeUserId,
created=self.created
)
+16
View File
@@ -0,0 +1,16 @@
from app.extensions import db
from datetime import datetime
class FriendRelationship(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False)
user_id = db.Column(db.BigInteger, nullable=False, index=True)
friend_id = db.Column(db.BigInteger, nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
def __init__(self, user_id, friend_id):
self.user_id = user_id
self.friend_id = friend_id
self.created_at = datetime.utcnow()
def __repr__(self):
return '<FriendRelationship %r>' % self.id
+17
View File
@@ -0,0 +1,17 @@
from app.extensions import db
from datetime import datetime
class FriendRequest(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False)
requester_id = db.Column(db.BigInteger, db.ForeignKey("user.id") ,nullable=False, index=True) # The person who sent the friend request
requestee_id = db.Column(db.BigInteger, nullable=False, index=True) # The person who received the friend request
created_at = db.Column(db.DateTime, nullable=False)
requester = db.relationship("User", foreign_keys=[requester_id], backref="friend_requests_sent", uselist=False)
def __init__(self, requester_id, requestee_id):
self.requester_id = requester_id
self.requestee_id = requestee_id
self.created_at = datetime.utcnow()
def __repr__(self):
return '<FriendRequest %r>' % self.id
+36
View File
@@ -0,0 +1,36 @@
from app.extensions import db
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime, timedelta
class GameSessionLog( db.Model ):
id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False )
user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True)
serveruuid = db.Column( UUID(as_uuid=True), nullable=False, index=True )
joined_at = db.Column( db.DateTime, nullable = False, index = True )
left_at = db.Column( db.DateTime, nullable = True )
place_id = db.Column( db.BigInteger, nullable = False, index=True )
def __init__(
self,
user_id,
serveruuid,
place_id,
joined_at = None,
left_at = None
):
self.user_id = user_id
self.serveruuid = serveruuid
self.place_id = place_id
self.joined_at = joined_at or datetime.utcnow()
self.left_at = left_at
def __repr__(self):
return "<GameSessionLog user_id={user_id}, serveruuid={serveruuid}, place_id={place_id}, joined_at={joined_at}, left_at={left_at}>".format(
user_id=self.user_id,
serveruuid=self.serveruuid,
place_id=self.place_id,
joined_at=self.joined_at,
left_at=self.left_at
)
+24
View File
@@ -0,0 +1,24 @@
from app.extensions import db
import datetime
class GamepassLink(db.Model):
gamepass_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False)
place_id = db.Column(db.BigInteger, db.ForeignKey("asset.id"), primary_key=True, nullable=False, index=True) # DEPRECATED
creator_id = db.Column(db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
gamepass = db.relationship("Asset", foreign_keys=[gamepass_id], uselist=False, lazy="joined")
place = db.relationship("Asset", foreign_keys=[place_id], uselist=False, lazy="joined")
creator = db.relationship("User", foreign_keys=[creator_id], uselist=False, lazy="joined")
universe_id = db.Column(db.BigInteger, db.ForeignKey("universe.id"), nullable=True, index=True)
def __init__(self, place_id, gamepass_id, universe_id, creator_id):
self.place_id = place_id
self.gamepass_id = gamepass_id
self.universe_id = universe_id
self.creator_id = creator_id
self.created_at = datetime.datetime.utcnow()
def __repr__(self):
return '<GamepassLink %r>' % self.id
+45
View File
@@ -0,0 +1,45 @@
from app.extensions import db
from sqlalchemy.dialects.postgresql import UUID
import uuid
class GameServer(db.Model):
serverId = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True, default=uuid.uuid4)
serverName = db.Column(db.String(128), nullable=False)
serverIP = db.Column(db.String(128), nullable=False)
serverPort = db.Column(db.Integer, nullable=False)
accessKey = db.Column(db.String(128), nullable=False)
lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None)
heartbeatResponseTime = db.Column(db.Float, nullable=True, default=0)
isRCCOnline = db.Column(db.Boolean, nullable=False, default=False)
thumbnailQueueSize = db.Column(db.Integer, nullable=False, default=0)
RCCmemoryUsage = db.Column(db.BigInteger, nullable=False, default=0)
allowThumbnailGen = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to generate thumbnails
allowGameServerHost = db.Column(db.Boolean, nullable=False, default=True) # If false, the server will not be able to host game servers
def __init__(
self,
serverId,
serverName,
serverIP,
serverPort,
accessKey,
allowThumbnailGen=True,
allowGameServerHost=True
):
self.serverId = serverId
self.serverName = serverName
self.serverIP = serverIP
self.serverPort = serverPort
self.accessKey = accessKey
self.allowThumbnailGen = allowThumbnailGen
self.allowGameServerHost = allowGameServerHost
def __repr__(self):
return "<GameServers serverId={serverId}, serverName={serverName}, serverIP={serverIP}, serverPort={serverPort}>".format(
serverId=self.serverId,
serverName=self.serverName,
serverIP=self.serverIP,
serverPort=self.serverPort
)
+31
View File
@@ -0,0 +1,31 @@
from app.extensions import db
from app.enums.GiftcardType import GiftcardType
from datetime import datetime
class GiftcardKey(db.Model):
id = db.Column(db.BigInteger, primary_key=True)
key = db.Column(db.String(255), nullable=False)
type = db.Column(db.Enum(GiftcardType), nullable=False)
value = db.Column(db.BigInteger, nullable=True)
created_at = db.Column(db.DateTime, nullable=False)
redeemed_at = db.Column(db.DateTime, nullable=True)
redeemed_by = db.Column(db.BigInteger, nullable=True)
def __init__(
self,
key: str,
type: GiftcardType,
value: int = None,
created_at: datetime = None,
):
if created_at is None:
created_at = datetime.utcnow()
self.key = key
self.type = type
self.value = value
self.created_at = created_at
def __repr__(self):
return f'<GiftcardKey {self.id}>'
+296
View File
@@ -0,0 +1,296 @@
from app.extensions import db
from datetime import datetime
class Group(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
owner_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True, index=True) # Can be nullable since owners can leave groups
name = db.Column(db.String(255), nullable=False, index=True)
description = db.Column(db.String(1024), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
locked = db.Column(db.Boolean, nullable=False, default=False)
owner = db.relationship('User', backref=db.backref('groups', lazy=True))
def __init__(
self,
owner_id,
name,
description,
created_at=None,
updated_at=None,
):
if created_at is None:
created_at = datetime.utcnow()
if updated_at is None:
updated_at = datetime.utcnow()
self.owner_id = owner_id
self.name = name
self.description = description
self.created_at = created_at
self.updated_at = updated_at
def __repr__(self):
return '<Group %r>' % self.name
class GroupIcon(db.Model):
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True)
content_hash = db.Column(db.String(512), nullable=False, index=True)
moderation_status = db.Column(db.Integer, nullable=False, default=1)
creator_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('icon', lazy=True, uselist=False), uselist=False)
creator = db.relationship('User', backref=db.backref('group_icons', lazy=True))
def __init__(
self,
group_id,
content_hash,
moderation_status,
creator_id,
created_at=None
):
if created_at is None:
created_at = datetime.utcnow()
self.group_id = group_id
self.content_hash = content_hash
self.moderation_status = moderation_status
self.creator_id = creator_id
self.created_at = created_at
def __repr__(self):
return '<GroupIcon %r>' % self.group_id
class GroupSettings(db.Model):
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True)
approval_required = db.Column(db.Boolean, nullable=False, default=False)
enemies_allowed = db.Column(db.Boolean, nullable=False, default=False)
funds_visible = db.Column(db.Boolean, nullable=False, default=False)
games_visible = db.Column(db.Boolean, nullable=False, default=False)
membership_required = db.Column(db.Boolean, nullable=False, default=False)
last_updated = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('settings', lazy=True, uselist=False), uselist=False)
def __init__(
self,
group_id,
approval_required = False,
enemies_allowed = False,
funds_visible = False,
games_visible = False,
membership_required = False,
last_updated=None
):
if last_updated is None:
last_updated = datetime.utcnow()
self.group_id = group_id
self.approval_required = approval_required
self.enemies_allowed = enemies_allowed
self.funds_visible = funds_visible
self.games_visible = games_visible
self.membership_required = membership_required
self.last_updated = last_updated
def __repr__(self):
return '<GroupSettings %r>' % self.group_id
class GroupRole(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True)
name = db.Column(db.String(255), nullable=False)
description = db.Column(db.String(255), nullable=False)
rank = db.Column(db.Integer, nullable=False, default=1)
member_count = db.Column(db.Integer, nullable=False, default=0)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('roles', lazy=True))
def __init__(
self,
group_id,
name,
description,
rank,
member_count,
created_at=None,
updated_at=None
):
if created_at is None:
created_at = datetime.utcnow()
if updated_at is None:
updated_at = datetime.utcnow()
self.group_id = group_id
self.name = name
self.description = description
self.rank = rank
self.member_count = member_count
self.created_at = created_at
self.updated_at = updated_at
def __repr__(self):
return '<GroupRole %r>' % self.name
class GroupRolePermission(db.Model):
group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), primary_key=True)
# One to one relationship
group_roleset = db.relationship('GroupRole', backref=db.backref('permissions', uselist=False, lazy=True), lazy=True, uselist=False)
delete_from_wall = db.Column(db.Boolean, nullable=False, default=False)
post_to_wall = db.Column(db.Boolean, nullable=False, default=False)
invite_members = db.Column(db.Boolean, nullable=False, default=False)
post_to_status = db.Column(db.Boolean, nullable=False, default=False)
remove_members = db.Column(db.Boolean, nullable=False, default=False)
view_status = db.Column(db.Boolean, nullable=False, default=False)
view_wall = db.Column(db.Boolean, nullable=False, default=False)
change_rank = db.Column(db.Boolean, nullable=False, default=False)
advertise_group = db.Column(db.Boolean, nullable=False, default=False)
manage_relationships = db.Column(db.Boolean, nullable=False, default=False)
add_group_places = db.Column(db.Boolean, nullable=False, default=False)
view_audit_logs = db.Column(db.Boolean, nullable=False, default=False)
create_items = db.Column(db.Boolean, nullable=False, default=False)
manage_items = db.Column(db.Boolean, nullable=False, default=False)
spend_group_funds = db.Column(db.Boolean, nullable=False, default=False)
manage_clan = db.Column(db.Boolean, nullable=False, default=False)
manage_group_games = db.Column(db.Boolean, nullable=False, default=False)
def __init__(
self,
group_role_id
):
self.group_role_id = group_role_id
def __repr__(self):
return '<GroupRolePermission %r>' % self.group_role_id
class GroupMember(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True)
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
group_role_id = db.Column(db.BigInteger, db.ForeignKey('group_role.id'), nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('members', lazy=True))
user = db.relationship('User', backref=db.backref('group_members', lazy=True))
group_role = db.relationship('GroupRole', backref=db.backref('members', lazy=True))
def __init__(
self,
group_id,
user_id,
group_role_id,
created_at=None
):
if created_at is None:
created_at = datetime.utcnow()
self.created_at = created_at
self.group_id = group_id
self.user_id = user_id
self.group_role_id = group_role_id
def __repr__(self):
return '<GroupMember %r>' % self.id
class GroupEconomy(db.Model):
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), primary_key=True)
robux_balance = db.Column(db.BigInteger, nullable=False, default=0)
tix_balance = db.Column(db.BigInteger, nullable=False, default=0)
group = db.relationship('Group', backref=db.backref('economy', lazy=True, uselist=False), uselist=False)
def __init__(
self,
group_id
):
self.group_id = group_id
def __repr__(self):
return '<GroupEconomy %r>' % self.group_id
class GroupJoinRequest(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True)
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('join_requests', lazy=True))
user = db.relationship('User', backref=db.backref('group_join_requests', lazy=True))
def __init__(
self,
group_id,
user_id,
created_at=None
):
if created_at is None:
created_at = datetime.utcnow()
self.group_id = group_id
self.user_id = user_id
self.created_at = created_at
def __repr__(self):
return '<GroupJoinRequest %r>' % self.id
class GroupStatus(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True)
poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
content = db.Column(db.String(1024), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('statuses', lazy=True))
poster = db.relationship('User', backref=db.backref('group_statuses', lazy=True))
def __init__(
self,
group_id,
poster_id,
content,
created_at=None
):
self.group_id = group_id
self.poster_id = poster_id
self.content = content
if created_at is None:
created_at = datetime.utcnow()
self.created_at = created_at
def __repr__(self):
return '<GroupStatus %r>' % self.id
class GroupWallPost(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
group_id = db.Column(db.BigInteger, db.ForeignKey('group.id'), nullable=False, index=True)
poster_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
content = db.Column(db.String(1024), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
group = db.relationship('Group', backref=db.backref('wall_posts', lazy=True))
poster = db.relationship('User', backref=db.backref('group_wall_posts', lazy=True, uselist=False), uselist=False)
def __init__(
self,
group_id,
poster_id,
content,
created_at=None
):
self.group_id = group_id
self.poster_id = poster_id
self.content = content
if created_at is None:
created_at = datetime.utcnow()
self.created_at = created_at
def __repr__(self):
return '<GroupWallPost %r>' % self.id
+25
View File
@@ -0,0 +1,25 @@
from app.extensions import db
from datetime import datetime
class InviteKey(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False)
key = db.Column(db.String(255), nullable=False) # vortexi-randomstring
created_at = db.Column(db.DateTime, nullable=False)
created_by = db.Column(db.BigInteger, db.ForeignKey('user.id') ,nullable=True, index=True)
used_by = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=True)
used_on = db.Column(db.DateTime, nullable=True)
creator = db.relationship('User', backref=db.backref('invite_keys', lazy=True), foreign_keys=[created_by], uselist=False)
user = db.relationship('User', backref=db.backref('used_invite_keys', lazy=True), foreign_keys=[used_by], uselist=False)
def __init__(
self,
key,
created_by
):
self.key = key
self.created_by = created_by
self.created_at = datetime.utcnow()
def __repr__(self):
return '<InviteKey %r>' % self.id
+41
View File
@@ -0,0 +1,41 @@
from app.extensions import db
class KofiTransaction(db.Model):
kofi_transaction_id = db.Column(db.Text, primary_key=True)
timestamp = db.Column(db.DateTime, nullable=False)
donation_type = db.Column(db.Text, nullable=False)
amount = db.Column(db.Float, nullable=False)
currency = db.Column(db.Text, nullable=False)
is_subscription_payment = db.Column(db.Boolean, nullable=False)
message = db.Column(db.Text, nullable=False)
from_name = db.Column(db.Text, nullable=False)
from_email = db.Column(db.Text, nullable=False)
assigned_key = db.Column(db.Text ,nullable=True)
def __init__(
self,
kofi_transaction_id,
timestamp,
donation_type,
amount,
currency,
is_subscription_payment,
message,
from_name,
from_email,
assigned_key=None
):
self.kofi_transaction_id = kofi_transaction_id
self.timestamp = timestamp
self.donation_type = donation_type
self.amount = amount
self.currency = currency
self.is_subscription_payment = is_subscription_payment
self.message = message
self.from_name = from_name
self.from_email = from_email
self.assigned_key = assigned_key
def __repr__(self):
return f"<KofiTransaction {self.kofi_transaction_id}>"
+31
View File
@@ -0,0 +1,31 @@
from app.extensions import db
from datetime import datetime
class LegacyDataPersistence( db.Model ):
id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True )
userid = db.Column( db.BigInteger, nullable=False, index=True )
placeid = db.Column( db.BigInteger, nullable=False, index=True ) # DEPRECATED
data = db.Column( db.LargeBinary, nullable=False )
last_updated = db.Column( db.DateTime, nullable=False )
universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True )
def __init__(
self,
userid,
placeid,
universe_id
):
self.userid = userid
self.placeid = placeid
self.last_updated = datetime.utcnow()
self.universe_id = universe_id
def __repr__(self):
return "<LegacyDataPersistence id={id}, userid={userid}, placeid={placeid}>".format(
id=self.id,
userid=self.userid,
placeid=self.placeid
)
+33
View File
@@ -0,0 +1,33 @@
from app.extensions import db
from app.enums.LimitedItemTransferMethod import LimitedItemTransferMethod
from datetime import datetime
class LimitedItemTransfer(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
original_owner_id = db.Column(db.BigInteger, nullable=False, index=True)
new_owner_id = db.Column(db.BigInteger, nullable=False, index=True)
asset_id = db.Column(db.BigInteger, nullable=False, index=True)
user_asset_id = db.Column(db.BigInteger, nullable=False, index=True)
transferred_at = db.Column(db.DateTime, nullable=False)
transfer_method = db.Column(db.Enum(LimitedItemTransferMethod), nullable=False, index=True)
purchased_price = db.Column(db.BigInteger, nullable=True, default=None)
associated_trade_id = db.Column(db.BigInteger, nullable=True, default=None)
def __init__(self, original_owner_id, new_owner_id, asset_id, user_asset_id, transfer_method=LimitedItemTransferMethod.Purchase, transferred_at=None, purchased_price=None, associated_trade_id = None):
self.original_owner_id = original_owner_id
self.new_owner_id = new_owner_id
self.asset_id = asset_id
self.user_asset_id = user_asset_id
self.transfer_method = transfer_method
if transferred_at is None:
self.transferred_at = datetime.utcnow()
else:
self.transferred_at = transferred_at
self.purchased_price = purchased_price
self.associated_trade_id = associated_trade_id
+49
View File
@@ -0,0 +1,49 @@
from app.extensions import db
from datetime import datetime
class LinkedDiscord(db.Model):
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True)
discord_id = db.Column(db.BigInteger, nullable=False)
discord_username = db.Column(db.String(255), nullable=False)
discord_discriminator = db.Column(db.String(255), nullable=True)
discord_avatar = db.Column(db.Text, nullable=True)
discord_access_token = db.Column(db.String(512), nullable=True)
discord_refresh_token = db.Column(db.String(512), nullable=True)
discord_expiry = db.Column(db.DateTime, nullable=True)
last_updated = db.Column(db.DateTime, nullable=False)
linked_on = db.Column(db.DateTime, nullable=False)
user = db.relationship('User', backref=db.backref('discord', lazy=True))
def __init__(self,
user_id,
discord_id,
discord_username,
discord_discriminator,
discord_avatar,
discord_access_token,
discord_refresh_token,
discord_expiry,
last_updated=None,
linked_on=None
):
self.user_id = user_id
self.discord_id = discord_id
self.discord_username = discord_username
self.discord_discriminator = discord_discriminator
self.discord_avatar = discord_avatar
self.discord_access_token = discord_access_token
self.discord_refresh_token = discord_refresh_token,
self.discord_expiry = discord_expiry
if last_updated is None:
self.last_updated = datetime.utcnow()
else:
self.last_updated = last_updated
if linked_on is None:
self.linked_on = datetime.utcnow()
else:
self.linked_on = linked_on
def __repr__(self):
return '<LinkedDiscord %r>' % self.user_id
+21
View File
@@ -0,0 +1,21 @@
from app.extensions import db
class LoginRecord(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False)
userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
ip = db.Column(db.Text, nullable=False, index=True)
useragent = db.Column(db.Text, nullable=False)
timestamp = db.Column(db.DateTime, nullable=False)
session_token = db.Column(db.Text, nullable=True, index=True)
User = db.relationship('User', backref=db.backref('login_records', lazy=True), uselist=False)
def __init__(self, userid, ip, useragent, timestamp, session_token = None):
self.userid = userid
self.ip = ip
self.useragent = useragent
self.timestamp = timestamp
self.session_token = session_token
def __repr__(self):
return '<LoginRecord {} ({} - {})>'.format(self.id, self.userid, self.ip)
+33
View File
@@ -0,0 +1,33 @@
from app.extensions import db
from datetime import datetime
class Message( db.Model ):
id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False )
sender_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True )
recipient_id = db.Column( db.BigInteger, db.ForeignKey("user.id"), nullable=False, index=True )
created = db.Column( db.DateTime, nullable=False )
read = db.Column( db.Boolean, nullable=False )
subject = db.Column( db.String( 128 ), nullable=False )
content = db.Column( db.Text, nullable=False )
sender = db.relationship( "User", foreign_keys=[sender_id], uselist=False)
recipient = db.relationship( "User", foreign_keys=[recipient_id], uselist=False)
def __init__(
self,
sender_id,
recipient_id,
content,
subject,
read=False
):
self.sender_id = sender_id
self.recipient_id = recipient_id
self.content = content
self.read = read
self.subject = subject
self.created = datetime.utcnow()
def __repr__(self):
return '<Message %r>' % self.id
+36
View File
@@ -0,0 +1,36 @@
from app.extensions import db
from datetime import datetime
class ModeratorNote( db.Model ):
id = db.Column( db.BigInteger, primary_key = True, autoincrement = True )
user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True)
note_creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True)
note = db.Column( db.Text )
created_at = db.Column( db.DateTime, index=True, nullable=False )
updated_at = db.Column( db.DateTime, index=True, nullable=False )
related_action_id = db.Column( db.BigInteger, db.ForeignKey('user_ban.id'), nullable = True, index = True)
def __init__( self, user_id, note_creator_id, note, related_action_id = None ):
self.user_id = user_id
self.note_creator_id = note_creator_id
self.note = note
self.related_action_id = related_action_id
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
def __repr__( self ):
return '<ModeratorNote %r>' % self.id
class ModeratorNoteAttachment( db.Model ):
id = db.Column( db.BigInteger, primary_key = True, autoincrement = True )
moderator_note_id = db.Column( db.BigInteger, db.ForeignKey( 'moderator_note.id' ), index = True)
attachment_hash = db.Column( db.String( 512 ), index = True, nullable = False )
attachment_name = db.Column( db.String( 512 ), index = True, nullable = False )
def __init__( self, moderator_note_id, attachment_hash, attachment_name ):
self.moderator_note_id = moderator_note_id
self.attachment_hash = attachment_hash
self.attachment_name = attachment_name
+13
View File
@@ -0,0 +1,13 @@
from app.extensions import db
class PackageAsset( db.Model ):
id = db.Column( db.BigInteger, primary_key=True, autoincrement=True)
package_asset_id = db.Column( db.BigInteger, nullable=False, index=True )
asset_id = db.Column( db.BigInteger, nullable=False )
def __init__( self, package_asset_id, asset_id ):
self.package_asset_id = package_asset_id
self.asset_id = asset_id
def __repr__( self ):
return '<PackageAsset %r>' % self.package_asset_id
+16
View File
@@ -0,0 +1,16 @@
from app.extensions import db
from datetime import datetime
class PastUsername(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, nullable=False)
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False, index=True)
username = db.Column(db.Text, nullable=False)
created = db.Column(db.DateTime, nullable=False)
def __init__(self, user_id, username):
self.user_id = user_id
self.username = username
self.created = datetime.utcnow()
def __repr__(self):
return '<PastUsername {} ({})>'.format(self.username, str(self.id))
+51
View File
@@ -0,0 +1,51 @@
from app.extensions import db
from app.models.asset import Asset
from app.enums.PlaceYear import PlaceYear
from app.enums.PlaceRigChoice import PlaceRigChoice
from app.enums.ChatStyle import ChatStyle
class Place( db.Model ):
placeid = db.Column( db.BigInteger, db.ForeignKey('asset.id') ,primary_key=True, nullable=False, unique=True ) # Should be the same as the asset id
visitcount = db.Column( db.BigInteger, nullable=False, default=0 )
is_public = db.Column( db.Boolean, nullable=False, default=True )
maxplayers = db.Column( db.BigInteger, nullable=False, default=10 )
placeyear = db.Column( db.Enum( PlaceYear ), nullable=False, default=PlaceYear.Sixteen )
featured = db.Column( db.Boolean, nullable=False, default=False, index=True)
bc_required = db.Column( db.Boolean, nullable=False, default=False, index=True)
rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default=PlaceRigChoice.UserChoice )
chat_style = db.Column( db.Enum( ChatStyle ), nullable=False, default=ChatStyle.ClassicAndBubble )
min_account_age = db.Column( db.Integer, nullable=False, default=0)
parent_universe_id = db.Column( db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True )
assetObj = db.relationship( 'Asset', backref=db.backref('place', lazy=True, uselist=False), uselist=False )
def __init__(
self,
placeid,
visitcount = 0,
is_public = True,
maxplayers = 10,
placeyear = PlaceYear.Sixteen,
rig_choice = PlaceRigChoice.UserChoice,
chat_style = ChatStyle.ClassicAndBubble,
min_account_age = 0,
parent_universe_id = None
):
self.placeid = placeid
self.visitcount = visitcount
self.is_public = is_public
self.maxplayers = maxplayers
self.placeyear = placeyear
self.rig_choice = rig_choice
self.chat_style = chat_style
self.min_account_age = min_account_age
self.parent_universe_id = parent_universe_id
def __repr__(self):
return "<Place placeid={placeid}, visitcount={visitcount}, is_public={is_public}, maxplayers={maxplayers}>".format(
placeid=self.placeid,
visitcount=self.visitcount,
is_public=self.is_public,
maxplayers=self.maxplayers
)
+48
View File
@@ -0,0 +1,48 @@
from app.extensions import db
from datetime import datetime
class PlaceBadge( db.Model ):
id = db.Column( db.BigInteger, primary_key=True )
associated_place_id = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), index = True ) # DEPRECATED
icon_image_id = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable = False )
name = db.Column( db.String( 255 ), nullable = False )
description = db.Column( db.String( 1024 ), nullable = False )
created_at = db.Column( db.DateTime, nullable = False, index = True )
updated_at = db.Column( db.DateTime, nullable = False, index = True )
enabled = db.Column( db.Boolean, nullable = False, default = True )
asset_reward = db.Column( db.BigInteger, nullable = True, default = None )
universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable = True, index = True )
def __init__( self, name, description, icon_image_id, associated_place_id, universe_id):
self.name = name
self.description = description
self.icon_image_id = icon_image_id
self.associated_place_id = associated_place_id
self.universe_id = universe_id
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
def __repr__( self ):
return '<PlaceBadge %r>' % self.id
class UserBadge( db.Model ):
id = db.Column( db.BigInteger, primary_key=True )
badge_id = db.Column( db.BigInteger, db.ForeignKey( 'place_badge.id' ), index = True )
user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), index = True )
awarded_at = db.Column( db.DateTime, nullable = False, index = True )
badge = db.relationship( 'PlaceBadge', backref = db.backref( 'user_badges', lazy = 'dynamic' ) )
def __init__( self, badge_id, user_id ):
self.badge_id = badge_id
self.user_id = user_id
self.awarded_at = datetime.utcnow()
def __repr__( self ):
return '<UserBadge %r>' % self.id
+34
View File
@@ -0,0 +1,34 @@
from app.extensions import db
from datetime import datetime
class PlaceDatastore( db.Model ):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
placeid = db.Column(db.BigInteger, nullable=False, index=True) # DEPRECATED
scope = db.Column(db.String(255), nullable=False, index=True)
key = db.Column(db.String(255), nullable=False, index=True)
name = db.Column(db.String(255), nullable=False)
value = db.Column(db.String(1024 * 1024), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True)
def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id = None):
self.placeid = placeid
self.scope = scope
self.key = key
self.name = name
self.value = value
self.universe_id = universe_id
if created_at is None:
created_at = datetime.utcnow()
if updated_at is None:
updated_at = datetime.utcnow()
self.created_at = created_at
self.updated_at = updated_at
def __repr__(self):
return '<PlaceDatastore %r>' % self.id
+48
View File
@@ -0,0 +1,48 @@
from app.extensions import db
from datetime import datetime
class DeveloperProduct( db.Model ):
productid = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True )
placeid = db.Column( db.BigInteger, db.ForeignKey( 'place.placeid' ), nullable=True, index=True ) # DEPRECATED
name = db.Column( db.String( 256 ), nullable=False )
description = db.Column( db.String( 1024 ), nullable=False )
iconimage_assetid = db.Column( db.BigInteger, db.ForeignKey( 'asset.id' ), nullable=True, index=True )
robux_price = db.Column( db.BigInteger, nullable=False, default = 0 )
sales_count = db.Column( db.BigInteger, nullable=False, default = 0 )
is_for_sale = db.Column( db.Boolean, nullable=False, default = False )
created_at = db.Column( db.DateTime, nullable=False )
updated_at = db.Column( db.DateTime, nullable=False )
creator_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True )
universe_id = db.Column( db.BigInteger, db.ForeignKey( 'universe.id' ), nullable=True, index=True )
placeObj = db.relationship( 'Place', lazy='joined', uselist=False )
creatorObj = db.relationship( 'User', lazy='joined', uselist=False )
iconimageObj = db.relationship( 'Asset', lazy='joined', uselist=False )
def __init__( self, placeid, name, description, iconimage_assetid, creator_id, universe_id ):
self.placeid = placeid
self.name = name
self.description = description
self.iconimage_assetid = iconimage_assetid
self.creator_id = creator_id
self.universe_id = universe_id
self.created_at = datetime.utcnow()
self.updated_at = datetime.utcnow()
def __repr__( self ):
return "<DeveloperProduct productid={productid}, placeid={placeid}, name={name}, description={description}, iconimage_assetid={iconimage_assetid}, moderation_status={moderation_status}, robux_price={robux_price}, sales_count={sales_count}, created_at={created_at}, updated_at={updated_at}, creator_id={creator_id}>".format(
productid=self.productid,
placeid=self.placeid,
name=self.name,
description=self.description,
iconimage_assetid=self.iconimage_assetid,
robux_price=self.robux_price,
sales_count=self.sales_count,
created_at=self.created_at,
updated_at=self.updated_at,
creator_id=self.creator_id
)
+22
View File
@@ -0,0 +1,22 @@
from app.extensions import db
class PlaceIcon(db.Model):
placeid = db.Column(db.BigInteger, db.ForeignKey('asset.id'), primary_key=True, nullable=False, unique=True)
contenthash = db.Column(db.String(512), nullable=True)
updated_at = db.Column(db.DateTime, nullable=True)
moderation_status = db.Column(db.SmallInteger, nullable=False, default=1) # Asset thumbnail moderation status ( 0 = Approved, 1 = Pending, 2 = Declined )
asset = db.relationship('Asset', backref=db.backref('place_icon', lazy=True, uselist=False), uselist=False)
def __init__(self, placeid, contenthash, updated_at, moderation_status=1):
self.placeid = placeid
self.contenthash = contenthash
self.updated_at = updated_at
self.moderation_status = moderation_status
def __repr__(self):
return "<PlaceIcon placeid={placeid}, contenthash={contenthash}, updated_at={updated_at}>".format(
placeid=self.placeid,
contenthash=self.contenthash,
updated_at=self.updated_at
)
+33
View File
@@ -0,0 +1,33 @@
from app.extensions import db
from datetime import datetime
class PlaceOrderedDatastore( db.Model ):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
placeid = db.Column(db.BigInteger, nullable=False)
scope = db.Column(db.String(255), nullable=False)
key = db.Column(db.String(255), nullable=False)
name = db.Column(db.String(255), nullable=False)
value = db.Column(db.BigInteger, nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
universe_id = db.Column(db.BigInteger, db.ForeignKey('universe.id'), nullable=True, index=True)
def __init__(self, placeid, scope, key, name, value, created_at=None, updated_at=None, universe_id=None):
self.placeid = placeid
self.scope = scope
self.key = key
self.name = name
self.value = value
if created_at is None:
created_at = datetime.utcnow()
if updated_at is None:
updated_at = datetime.utcnow()
self.created_at = created_at
self.updated_at = updated_at
def __repr__(self):
return '<PlaceDatastore %r>' % self.id
+23
View File
@@ -0,0 +1,23 @@
from app.extensions import db
from sqlalchemy.dialects.postgresql import UUID
class PlaceServerPlayer(db.Model):
userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True, nullable=False, unique=True)
serveruuid = db.Column(UUID(as_uuid=True), nullable=False, index=True)
joinTime = db.Column(db.DateTime, nullable=False)
lastHeartbeat = db.Column(db.DateTime, nullable=True, default=None)
user = db.relationship('User', backref=db.backref('placeserver_players', lazy=True), uselist=False)
def __init__(self, userid, serveruuid, joinTime):
self.userid = userid
self.serveruuid = serveruuid
self.joinTime = joinTime
self.lastHeartbeat = joinTime
def __repr__(self):
return "<PlaceServerPlayer userid={userid}, serveruuid={serveruuid}, joinTime={joinTime}>".format(
userid=self.userid,
serveruuid=self.serveruuid,
joinTime=self.joinTime
)
+52
View File
@@ -0,0 +1,52 @@
from app.extensions import db
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime, timedelta
class PlaceServer(db.Model):
serveruuid = db.Column(UUID(as_uuid=True), primary_key=True, nullable=False, unique=True)
originServerId = db.Column(UUID(as_uuid=True), nullable=False, index=True)
serverIP = db.Column(db.String(128), nullable=False)
serverPort = db.Column(db.Integer, nullable=False)
serverPlaceId = db.Column(db.BigInteger, nullable=False, index=True)
serverRunningTime = db.Column(db.BigInteger, nullable=False, default=0)
playerCount = db.Column(db.Integer, nullable=False, default=0)
maxPlayerCount = db.Column(db.Integer, nullable=False, default=20)
lastping = db.Column(db.DateTime, nullable=True)
reservedServerAccessCode = db.Column(db.Text, nullable=True)
def __init__(
self,
serveruuid,
originServerId,
serverIP,
serverPort,
serverPlaceId,
serverRunningTime=0,
playerCount=0,
maxPlayerCount=20,
reservedServerAccessCode=None
):
self.serveruuid = serveruuid
self.originServerId = originServerId
self.serverIP = serverIP
self.serverPort = serverPort
self.serverPlaceId = serverPlaceId
self.serverRunningTime = serverRunningTime
self.playerCount = playerCount
self.maxPlayerCount = maxPlayerCount
self.lastping = datetime.utcnow()
self.reservedServerAccessCode = reservedServerAccessCode
def __repr__(self):
return "<PlaceServer serveruuid={serveruuid}, originServerId={originServerId}, serverIP={serverIP}, serverPort={serverPort}, serverPlaceId={serverPlaceId}>".format(
serveruuid=self.serveruuid,
originServerId=self.originServerId,
serverIP=self.serverIP,
serverPort=self.serverPort,
serverPlaceId=self.serverPlaceId
)
+15
View File
@@ -0,0 +1,15 @@
from app.extensions import db
class PointsService(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
placeId = db.Column(db.BigInteger, nullable=False, index=True)
userId = db.Column(db.BigInteger, nullable=False, index=True)
points = db.Column(db.BigInteger, nullable=False, default=0)
def __init__(self, placeId, userId, points):
self.placeId = placeId
self.userId = userId
self.points = points
def __repr__(self):
return f"<PointsService {self.id} - Place {self.placeId} - User {self.userId} - Points {self.points}>"
+16
View File
@@ -0,0 +1,16 @@
from app.extensions import db
from datetime import datetime
class PreviouslyPlayed(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True)
userid = db.Column(db.BigInteger, nullable=False, index=True)
lastplayed = db.Column(db.DateTime, nullable=False)
placeid = db.Column(db.BigInteger, nullable=False, index=True)
def __init__(self, userid, placeid):
self.userid = userid
self.placeid = placeid
self.lastplayed = datetime.utcnow()
def __repr__(self):
return f"<PreviouslyPlayed {self.userid} {self.placeid} {self.lastplayed}>"
+31
View File
@@ -0,0 +1,31 @@
from app.extensions import db
from datetime import datetime
class ProductReceipt( db.Model ):
receipt_id = db.Column( db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True )
user_id = db.Column( db.BigInteger, db.ForeignKey( 'user.id' ), nullable=False, index=True )
product_id = db.Column( db.BigInteger, db.ForeignKey( 'developer_product.productid' ), nullable=False, index=True )
robux_amount = db.Column( db.BigInteger, nullable=False )
is_processed = db.Column( db.Boolean, nullable=False, default = False )
created_at = db.Column( db.DateTime, nullable=False )
userObj = db.relationship( 'User', lazy='joined', uselist=False )
productObj = db.relationship( 'DeveloperProduct', lazy='joined', uselist=False )
def __init__( self, user_id, product_id, robux_amount ):
self.user_id = user_id
self.product_id = product_id
self.robux_amount = robux_amount
self.created_at = datetime.utcnow()
def __repr__( self ):
return "<ProductReceipt receipt_id={receipt_id}, user_id={user_id}, product_id={product_id}, robux_amount={robux_amount}, is_processed={is_processed}, created_at={created_at}>".format(
receipt_id=self.receipt_id,
user_id=self.user_id,
product_id=self.product_id,
robux_amount=self.robux_amount,
is_processed=self.is_processed,
created_at=self.created_at
)
+56
View File
@@ -0,0 +1,56 @@
from app.extensions import db
from datetime import datetime
from app.enums.PlaceRigChoice import PlaceRigChoice
from app.enums.PlaceYear import PlaceYear
class Universe( db.Model ):
id = db.Column( db.BigInteger, primary_key=True, autoincrement=True, nullable=False )
root_place_id = db.Column( db.BigInteger, nullable=False, index=True, unique=True )
creator_id = db.Column( db.BigInteger, nullable=False, index=True )
creator_type = db.Column( db.SmallInteger, nullable=False )
created_at = db.Column( db.DateTime, nullable=False )
updated_at = db.Column( db.DateTime, nullable=False )
place_rig_choice = db.Column( db.Enum( PlaceRigChoice ), nullable=False, default = PlaceRigChoice.UserChoice )
place_year = db.Column( db.Enum( PlaceYear ), nullable=False, default = PlaceYear.Sixteen )
is_featured = db.Column( db.Boolean, nullable=False, default = False, index=True )
minimum_account_age = db.Column( db.Integer, nullable=False, default = 0 )
bc_required = db.Column( db.Boolean, nullable=False, default = False, index=True )
allow_direct_join = db.Column( db.Boolean, nullable=False, default = False, index=True )
is_public = db.Column( db.Boolean, nullable=False, default = True, index=True )
moderation_status = db.Column( db.SmallInteger, nullable=False, default = 0, index=True )
visit_count = db.Column( db.BigInteger, nullable=False, default = 0, index=True )
def __init__(
self,
root_place_id : int,
creator_id : int,
creator_type : int,
place_rig_choice : PlaceRigChoice = PlaceRigChoice.UserChoice,
place_year : PlaceYear = PlaceYear.Sixteen,
is_featured : bool = False,
minimum_account_age : int = 0,
bc_required : bool = False,
allow_direct_join : bool = False,
is_public : bool = True,
updated_at : datetime = None,
created_at : datetime = None
):
self.root_place_id = root_place_id
self.creator_id = creator_id
self.creator_type = creator_type
self.place_rig_choice = place_rig_choice
self.place_year = place_year
self.is_featured = is_featured
self.minimum_account_age = minimum_account_age
self.bc_required = bc_required
self.allow_direct_join = allow_direct_join
self.is_public = is_public
self.created_at = datetime.utcnow() if created_at is None else created_at
self.updated_at = datetime.utcnow() if updated_at is None else updated_at
+25
View File
@@ -0,0 +1,25 @@
from app.extensions import db
class User(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True, unique=True, nullable=False)
username = db.Column(db.Text, index=True, unique=True, nullable=False)
password = db.Column(db.Text, nullable=False)
created = db.Column(db.DateTime, nullable=False)
description = db.Column(db.Text, nullable=False, default="")
lastonline = db.Column(db.DateTime, nullable=False)
# 1 = OK, 2 = Banned, 3 = Deleted, 4 = Forgotten
accountstatus = db.Column(db.Integer, nullable=False, default=1)
TOTPEnabled = db.Column(db.Boolean, nullable=False, default=False)
def __init__( self, username, password, created, lastonline):
self.username = username
self.password = password
self.created = created
self.lastonline = lastonline
self.description = "Hi! I just joined Vortexi!"
def __repr__(self):
return '<User {} ({})>'.format(self.username, str(self.id))
+43
View File
@@ -0,0 +1,43 @@
from app.extensions import db
class UserAvatar(db.Model):
user_id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True) # User ID
content_hash = db.Column(db.String(512), nullable=True, default=None) # User avatar content hash
avatar_type = db.Column(db.SmallInteger, nullable=False, default=1) # Deprecated
# Refer to https://create.roblox.com/docs/reference/engine/datatypes/BrickColor
# for BrickColor IDs and names
# The only IDs that should be used is 1001-1032
head_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar head color ID
torso_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar torso color ID
right_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right arm color ID
left_arm_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left arm color ID
right_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar right leg color ID
left_leg_color_id = db.Column(db.BigInteger, nullable=False, default=1001) # User avatar left leg color ID
r15 = db.Column(db.Boolean, nullable=True, default=False) # Is the user using R15?
height_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar height scale
width_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar width scale
head_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar head scale
proportion_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar proportion scale
body_type_scale = db.Column(db.Float, nullable=False, default=1.0) # User avatar body type scale
def __init__(
self,
user_id
):
self.user_id = user_id
def __repr__(self):
return "<UserAvatar user_id={user_id} content_hash={content_hash} avatar_type={avatar_type} head_color_id={head_color_id} torso_color_id={torso_color_id} right_arm_color_id={right_arm_color_id} left_arm_color_id={left_arm_color_id} right_leg_color_id={right_leg_color_id} left_leg_color_id={left_leg_color_id}>".format(
user_id=self.user_id,
content_hash=self.content_hash,
avatar_type=self.avatar_type,
head_color_id=self.head_color_id,
torso_color_id=self.torso_color_id,
right_arm_color_id=self.right_arm_color_id,
left_arm_color_id=self.left_arm_color_id,
right_leg_color_id=self.right_leg_color_id,
left_leg_color_id=self.left_leg_color_id
)
+22
View File
@@ -0,0 +1,22 @@
from app.extensions import db
class UserAvatarAsset(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True) # ID
user_id = db.Column(db.BigInteger, nullable=False, index=True) # User ID
asset_id = db.Column(db.BigInteger, db.ForeignKey('asset.id'), nullable=False, index=True) # Asset ID
asset = db.relationship('Asset', uselist=False)
def __init__(
self,
user_id,
asset_id
):
self.user_id = user_id
self.asset_id = asset_id
def __repr__(self):
return "<UserAvatarAsset user_id={user_id} asset_id={asset_id}>".format(
user_id=self.user_id,
asset_id=self.asset_id
)
+40
View File
@@ -0,0 +1,40 @@
from app.extensions import db
from datetime import datetime, timedelta
from app.enums.BanType import BanType
class UserBan(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False)
author_userid = db.Column(db.BigInteger, db.ForeignKey('user.id'), nullable=False)
reason = db.Column(db.String(512), nullable=False)
ban_type = db.Column(db.Enum(BanType), nullable=False)
moderator_note = db.Column(db.String(512), nullable=True)
created_at = db.Column(db.DateTime, nullable=False)
expires_at = db.Column(db.DateTime, nullable=True)
acknowledged = db.Column(db.Boolean, nullable=False, default=False)
def __init__(
self,
userid: int,
author_userid: int,
reason: str,
ban_type: BanType,
moderator_note: str,
expires_at: datetime,
created_at: datetime = None
):
self.userid = userid
self.author_userid = author_userid
self.reason = reason
self.ban_type = ban_type
self.moderator_note = moderator_note
self.expires_at = expires_at
if created_at is None:
created_at = datetime.utcnow()
self.created_at = created_at
def __repr__(self):
return f'<UserBan {self.id} {self.userid} {self.author_userid} {self.reason} {self.ban_type} {self.moderator_note} {self.created_at} {self.expires_at} {self.acknowledged}>'
+19
View File
@@ -0,0 +1,19 @@
from app.extensions import db
from datetime import datetime
class UserEmail( db.Model ):
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True)
email = db.Column(db.String(256), nullable=False, primary_key=True)
verified = db.Column(db.Boolean, nullable=False, default=False)
updated_at = db.Column(db.DateTime, nullable=False)
user = db.relationship("User", foreign_keys=[user_id], uselist=False, lazy="joined")
def __init__(self, user_id, email, verified):
self.user_id = user_id
self.email = email
self.verified = verified
self.updated_at = datetime.utcnow()
def __repr__(self):
return f"<UserEmail {self.user_id} {self.email} {self.verified}>"
+18
View File
@@ -0,0 +1,18 @@
from app.extensions import db
from datetime import datetime, timedelta
class UserHWIDLog( db.Model ):
id = db.Column( db.BigInteger, primary_key = True, autoincrement = True, nullable = False )
user_id = db.Column( db.BigInteger, db.ForeignKey( "user.id" ), nullable = False, index=True)
hwid = db.Column( db.Text, nullable = False, index=True )
created_at = db.Column( db.DateTime, nullable = False )
def __init__(
self,
user_id,
hwid,
created_at = None
):
self.user_id = user_id
self.hwid = hwid
self.created_at = created_at or datetime.utcnow()
+24
View File
@@ -0,0 +1,24 @@
from app.extensions import db
from app.enums.MembershipType import MembershipType
from datetime import datetime, timedelta
class UserMembership(db.Model):
user_id = db.Column(db.BigInteger, db.ForeignKey('user.id'), primary_key=True)
membership_type = db.Column(db.Enum(MembershipType), nullable=False)
created = db.Column(db.DateTime, nullable=True)
expiration = db.Column(db.DateTime, nullable=True)
next_stipend = db.Column(db.DateTime, nullable=True)
def __init__(self, user_id, membership_type, created, expiration):
self.user_id = user_id
self.membership_type = membership_type
self.created = created
self.expiration = expiration
if created is not None:
self.next_stipend = created + timedelta(hours=24)
else:
self.next_stipend = None
def __repr__(self):
return '<UserMembership %r>' % self.user_id
+24
View File
@@ -0,0 +1,24 @@
from app.extensions import db
class UserThumbnail(db.Model):
userid = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True)
full_contenthash = db.Column(db.String(512), nullable=True)
headshot_contenthash = db.Column(db.String(512), nullable=True)
full_3dcontenthash = db.Column(db.String(512), nullable=True) # column for 3D avatar
updated_at = db.Column(db.DateTime, nullable=True)
def __init__(self, userid, full_contenthash, headshot_contenthash, updated_at, full_3dcontenthash=None):
self.userid = userid
self.full_contenthash = full_contenthash
self.headshot_contenthash = headshot_contenthash
self.full_3dcontenthash = full_3dcontenthash
self.updated_at = updated_at
def __repr__(self):
return "<UserThumbnail userid={userid}, full_contenthash={full_contenthash}, headshot_contenthash={headshot_contenthash}, full_3dcontenthash={full_3dcontenthash}, updated_at={updated_at}>".format(
userid=self.userid,
full_contenthash=self.full_contenthash,
headshot_contenthash=self.headshot_contenthash,
full_3dcontenthash=self.full_3dcontenthash,
updated_at=self.updated_at
)
+17
View File
@@ -0,0 +1,17 @@
from app.extensions import db
class UserTradeItem(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
tradeid = db.Column(db.BigInteger, nullable=False, index=True)
userid = db.Column(db.BigInteger, nullable=False, index=True)
user_asset_id = db.Column(db.BigInteger, db.ForeignKey("user_asset.id"), nullable=False)
userasset = db.relationship("UserAsset", backref="tradeitems", lazy=True)
def __init__(self, tradeid : int, userid : int, user_asset_id : int):
self.tradeid = tradeid
self.userid = userid
self.user_asset_id = user_asset_id
def __repr__(self):
return f"<UserTradeItem {self.id} {self.tradeid} {self.userid} {self.user_asset_id}>"
+39
View File
@@ -0,0 +1,39 @@
from app.extensions import db
from app.enums.TradeStatus import TradeStatus
from datetime import datetime, timedelta
class UserTrade(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
sender_userid = db.Column(db.BigInteger, nullable=False, index=True)
recipient_userid = db.Column(db.BigInteger, nullable=False, index=True)
sender_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the sender is offering
recipient_userid_robux = db.Column(db.BigInteger, nullable=False, default=0) # Robux the recipient is offering
status = db.Column(db.Enum(TradeStatus), nullable=False, default=TradeStatus.Pending)
created_at = db.Column(db.DateTime, nullable=False)
updated_at = db.Column(db.DateTime, nullable=False)
expires_at = db.Column(db.DateTime, nullable=False)
def __init__(
self,
sender_userid : int,
recipient_userid : int,
sender_userid_robux : int = 0,
recipient_userid_robux : int = 0,
status : TradeStatus = TradeStatus.Pending,
created_at : datetime = None,
updated_at : datetime = None,
expires_at : datetime = None
):
self.sender_userid = sender_userid
self.recipient_userid = recipient_userid
self.sender_userid_robux = sender_userid_robux
self.recipient_userid_robux = recipient_userid_robux
self.status = status
self.created_at = created_at or datetime.utcnow()
self.updated_at = updated_at or datetime.utcnow()
self.expires_at = expires_at or datetime.utcnow() + timedelta(days=7)
def __repr__(self):
return f"<UserTrade {self.id} {self.sender_userid} {self.recipient_userid} {self.sender_userid_robux} {self.recipient_userid_robux} {self.status} {self.created_at} {self.updated_at} {self.expires_at}>"
+51
View File
@@ -0,0 +1,51 @@
from app.extensions import db
from app.enums.TransactionType import TransactionType
from sqlalchemy import Enum
from datetime import datetime
class UserTransaction(db.Model):
id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
reciever_id = db.Column(db.BigInteger, nullable=False, index=True)
reciever_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group
sender_id = db.Column(db.BigInteger, nullable=False, index=True)
sender_type = db.Column(db.Integer, nullable=False, default=0) # 0 = User, 1 = Group
currency_amount = db.Column(db.BigInteger, nullable=False)
currency_type = db.Column(db.Integer, nullable=False, default=0) # 0 = Robux, 1 = Tix
assetId = db.Column(db.BigInteger, nullable=True, default=None, index=True)
custom_text = db.Column(db.Text, nullable=True, default=None)
transaction_type = db.Column(Enum(TransactionType), nullable=False, index=True)
created_at = db.Column(db.DateTime, nullable=False)
def __init__(
self,
reciever_id,
reciever_type,
sender_id,
sender_type,
currency_amount,
currency_type,
transaction_type,
asset_id=None,
custom_text=None,
created_at=None
):
self.reciever_id = reciever_id
self.reciever_type = reciever_type
self.sender_id = sender_id
self.sender_type = sender_type
self.currency_amount = currency_amount
self.currency_type = currency_type
self.transaction_type = transaction_type
self.assetId = asset_id
self.custom_text = custom_text
if created_at is None:
self.created_at = datetime.utcnow()
else:
self.created_at = created_at
def __repr__(self):
return "<UserTransaction id=%d>" % self.id
+43
View File
@@ -0,0 +1,43 @@
from app.extensions import db
from datetime import datetime
class UserAsset(db.Model):
id = db.Column(db.BigInteger, primary_key=True, nullable=False, unique=True, autoincrement=True)
userid = db.Column(db.BigInteger, nullable=False, index=True)
assetid = db.Column(db.BigInteger, db.ForeignKey("asset.id"), nullable=False, index=True)
serial = db.Column(db.BigInteger, nullable=True, default=None)
price = db.Column(db.BigInteger, nullable=False, default=0)
created = db.Column(db.DateTime, nullable=False)
updated = db.Column(db.DateTime, nullable=False)
is_for_sale = db.Column(db.Boolean, nullable=False, default=False)
asset = db.relationship("Asset", foreign_keys=[assetid], uselist=False, lazy="joined")
def __init__(
self,
userid,
assetid,
serial=None,
price=0
):
self.userid = userid
self.assetid = assetid
self.serial = serial
self.price = price
self.created = datetime.utcnow()
self.updated = datetime.utcnow()
def __repr__(self):
return "<UserAsset id={id}, userid={userid}, assetid={assetid}, serial={serial}, price={price}, created={created}, updated={updated}>".format(
id=self.id,
userid=self.userid,
assetid=self.assetid,
serial=self.serial,
price=self.price,
created=self.created,
updated=self.updated
)
+16
View File
@@ -0,0 +1,16 @@
from app.extensions import db
class UserEconomy(db.Model):
userid = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True, unique=True, nullable=False )
robux = db.Column(db.Integer, nullable=False, default=0)
tix = db.Column(db.Integer, nullable=False, default=0)
user = db.relationship('User', backref=db.backref('economy', lazy=True, uselist=False), uselist=False)
def __init__(self, userid, robux, tix):
self.userid = userid
self.robux = robux
self.tix = tix
def __repr__(self):
return '<UserEconomy {} ({} R$, {} T$)>'.format(self.userid, str(self.robux), str(self.tix))