syntaxwebsite/app/models/exchange_offer.py

54 lines
2.3 KiB
Python

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