Esempio n. 1
0
class Address(db.Model):

    __tablename__ = 'address'
    addressID = db.Column(db.Integer, primary_key=True, autoincrement=True)
    addressStreet = db.Column(db.String(45))
    addressCity = db.Column(db.String(45))
    addressState = db.Column(db.String(45))
    addressZip = db.Column(db.String(45))
Esempio n. 2
0
class BookCategory(db.Model):
    __tablename__ = 'book_categories'
    categoryID = db.Column(db.Integer, primary_key=True)
    categoryName = db.Column(db.String(45))

    books = db.relationship('Book',
                            secondary='book_has_book_categories',
                            back_populates='categories')
Esempio n. 3
0
class User(db.Model):

    # global vars for login management
    is_authenticated = False
    logged_in = False

    __tablename__ = 'users'
    userID = db.Column(db.Integer, primary_key=True, autoincrement=True)
    userEmail = db.Column(db.String(45))  # varchar(115)
    userFName = db.Column(db.String(45))
    userLName = db.Column(db.String(45))
    userStatus = db.Column(db.String(45))
    userType = db.Column(db.String(45))
    userPassword = db.Column(db.String(250))
    userPhone = db.Column(db.String(45))
    userSubStatus = db.Column(db.String(45))

    addressID = db.Column(db.Integer, db.ForeignKey('address.addressID'))
    address = db.relationship('Address', lazy=True)

    cards = db.relationship('PaymentCard', secondary='users_has_card')

    # override print
    def __str__(self):
        return (str(self.userID) + ', ' + self.userEmail + ', ' +
                self.userFName + ', ' + self.userLName + ', ' +
                self.userStatus + ', ' + self.userType)

    # specific for flask_login
    def is_authenticated(self):
        return self.is_authenticated

    def get_id(self):
        return str(self.userID)

    def set_status(self, status):
        self.userStatus = status.value

    def set_type(self, type):
        self.userType = type.value

    # set to value of boolean
    def set_subscription(self, active):
        self.userSubStatus = 'Active' if active else 'Deactive'

    # encryption/decryption methods
    @hybrid_property
    def password(self):
        return fernet.decrypt(self.userPassword.encode()).decode()

    # must commit to database before using value
    @password.setter
    def password(self, plaintext):
        self.userPassword = fernet.encrypt(plaintext.encode())

    # return true if encrypted password matches attempted_password
    def check_password(self, attempted_password):
        return (self.password == attempted_password)
Esempio n. 4
0
class PaymentCard(db.Model):

    __tablename__ = 'card'
    cardID = db.Column(db.Integer, primary_key=True, autoincrement=True)
    cardNumber = db.Column(db.String(250)) # do not access directly
    cardExpDate = db.Column(db.DateTime)
    cardType = db.Column(db.String(45))
    cardSVC = db.Column(db.String(250)) # do not access directly

    users = db.relationship('User', secondary='users_has_card', back_populates='cards')

    def __init__(self, cardNumber, cardExpDate, cardType, cardSVC, **kwargs):

        super(PaymentCard, self).__init__(**kwargs)
        self.cardType = cardType
        self.cardExpDate = cardExpDate

        self.card_number = cardNumber
        self.card_svc = cardSVC

    # encryption/decryption methods #
    @hybrid_property
    def card_number(self):
        return fernet.decrypt(self.cardNumber.encode()).decode()

    @card_number.setter
    def card_number(self, number):
        self.cardNumber = fernet.encrypt(number.encode())

    @hybrid_property
    def card_svc(self):
        return fernet.decrypt(self.cardSVC.encode()).decode()

    @card_svc.setter
    def card_svc(self, svc):
        self.cardSVC = fernet.encrypt(svc.encode())
Esempio n. 5
0
class Book(db.Model):

    __tablename__ = 'book'
    ISBN = db.Column(db.String(13), primary_key=True)  # char(13) PK
    bookTitle = db.Column(db.String(115))  # varchar(115)
    authorFName = db.Column(db.String(45))
    authorLName = db.Column(db.String(45))
    bookImage = db.Column(db.String(50))
    bookPrice = db.Column(db.Float)
    bookQuantity = db.Column(db.Integer)
    bookRating = db.Column(db.Integer)
    bookPublisher = db.Column(db.String(45))
    bookPublicationDate = db.Column(db.DateTime)
    bookDescription = db.Column(db.String(1000))

    categories = db.relationship('BookCategory',
                                 secondary='book_has_book_categories',
                                 back_populates='books',
                                 lazy=True)
Esempio n. 6
0
import enum
from bookmarqueapp import app, db

# associative table
book_has_book_categories = db.Table(
    'book_has_book_categories',
    db.Column('ISBN',
              db.String(13),
              db.ForeignKey('book.ISBN'),
              primary_key=True),
    db.Column('categoryID',
              db.Integer,
              db.ForeignKey('book_categories.categoryID'),
              primary_key=True))


class Book(db.Model):

    __tablename__ = 'book'
    ISBN = db.Column(db.String(13), primary_key=True)  # char(13) PK
    bookTitle = db.Column(db.String(115))  # varchar(115)
    authorFName = db.Column(db.String(45))
    authorLName = db.Column(db.String(45))
    bookImage = db.Column(db.String(50))
    bookPrice = db.Column(db.Float)
    bookQuantity = db.Column(db.Integer)
    bookRating = db.Column(db.Integer)
    bookPublisher = db.Column(db.String(45))
    bookPublicationDate = db.Column(db.DateTime)
    bookDescription = db.Column(db.String(1000))
Esempio n. 7
0

class UserType(enum.Enum):
    ADMIN = 'Admin'
    CUSTOMER = 'Customer'
    WEB_USER = '******'


# user info
class Address(db.Model):

    __tablename__ = 'address'
    addressID = db.Column(db.Integer, primary_key=True, autoincrement=True)
    addressStreet = db.Column(db.String(45))
    addressCity = db.Column(db.String(45))
    addressState = db.Column(db.String(45))
    addressZip = db.Column(db.String(45))


# associative table
users_has_card = db.Table(
    'users_has_card',
    db.Column('userEmail',
              db.String(45),
              db.ForeignKey('users.userEmail'),
              primary_key=True),
    db.Column('cardID',
              db.Integer,
              db.ForeignKey('card.cardID'),
              primary_key=True))