Files

46 lines
1.5 KiB
Python

from datetime import datetime, timezone
import bcrypt
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, nullable=False)
password_hash = db.Column(db.LargeBinary(60), nullable=False)
balance = db.Column(db.Integer, nullable=False, default=1000)
purchases = db.relationship("Purchase", backref="user", lazy=True)
def set_password(self, password):
self.password_hash = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
def check_password(self, password):
return bcrypt.checkpw(password.encode("utf-8"), self.password_hash)
class Crystal(db.Model):
__tablename__ = "crystals"
id = db.Column(db.Integer, primary_key=True)
color = db.Column(db.String(32), unique=True, nullable=False)
price = db.Column(db.Integer, nullable=False)
stock = db.Column(db.Integer, nullable=False, default=0)
class Purchase(db.Model):
__tablename__ = "purchases"
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False)
crystal_id = db.Column(db.Integer, db.ForeignKey("crystals.id"), nullable=False)
quantity = db.Column(db.Integer, nullable=False)
total_price = db.Column(db.Integer, nullable=False)
created_at = db.Column(
db.DateTime, nullable=False, default=lambda: datetime.now(timezone.utc)
)