コード例 #1
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Cart(db.Model):
    __tablename__ = 'cart'
    email_id = db.Column(db.String(50),
                         db.ForeignKey('users.email_id'),
                         primary_key=True,
                         unique=True,
                         nullable=False)
    product_id = db.Column(db.Integer,
                           db.ForeignKey('products.product_id'),
                           primary_key=True,
                           nullable=False)
    qty = db.Column(db.Integer, nullable=False)
    sub_total = db.Column(db.Float, nullable=False)
    products = db.relationship('Products', backref='cart_br', lazy=True)

    def to_dict(self, include_email=False):
        data = {
            'product_id': self.product_id,
            'qty': self.qty,
            'sub_total': self.sub_total,
            '_links': {
                'self': ''
            }
        }

        if include_email:
            data['email_id'] = self.email_id

        return data
コード例 #2
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class User_type(db.Model):
    __tablename__ = 'user_type'
    type_id = db.Column(db.Integer,
                        primary_key=True,
                        unique=True,
                        nullable=False)
    type_name = db.Column(db.String(10), nullable=False, unique=True)
    users = db.relationship('Users', backref='users_type_br', lazy=True)
コード例 #3
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Ratings(db.Model):
    __tablename__ = 'ratings'
    rating_value = db.Column(db.Integer, primary_key=True, nullable=False)
    rating_description = db.Column(db.String(10), nullable=False)
    products = db.relationship('Products',
                               backref='products_ratings_br',
                               lazy=True)
    users = db.relationship('Users', backref='users_ratings_br', lazy=True)
コード例 #4
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Categories(db.Model):
    __tablename__ = 'categories'
    category_id = db.Column(db.Integer, primary_key=True, nullable=False)
    category_name = db.Column(db.String(20))
    products = db.relationship('Products',
                               backref='products_categories_br',
                               lazy=True)

    def __repr__(self):
        return f"Categories('{self.category_id}', '{self.category_name}')"
コード例 #5
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"
コード例 #6
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Products(db.Model):
    __tablename__ = 'products'
    product_id = db.Column(db.Integer, primary_key=True, nullable=False)
    product_name = db.Column(db.String(20), nullable=False)
    category_id = db.Column(db.Integer,
                            db.ForeignKey('categories.category_id'),
                            nullable=False)
    qty = db.Column(db.Integer, nullable=False)
    price = db.Column(db.Integer, nullable=False)
    rating = db.Column(db.Integer,
                       db.ForeignKey('ratings.rating_value'),
                       nullable=True,
                       default=0)
    seller_id = db.Column(db.Integer,
                          db.ForeignKey('users.email_id'),
                          nullable=False)
    description = db.Column(db.Text, nullable=True)

    def __repr__(self):
        return f"Products('{self.product_id}', '{self.product_name}', '{self.price}')"

    def to_dict(self):
        data = {
            'product_id': self.product_id,
            'product_name': self.product_name,
            'category_id': self.category_id,
            'qty': self.qty,
            'price': self.price,
            'rating': self.rating,
            'seller_id': self.seller_id,
            'description': self.description,
            '_links': {
                'self':
                '',
                'seller':
                url_for('api.get_user',
                        email_id=self.seller_id,
                        _external=True)
            }
        }

        return data
コード例 #7
0
ファイル: models.py プロジェクト: sidrsp/e-Store
class Users(db.Model, UserMixin, PaginatedAPIMixin):
    __tablename__ = 'users'
    email_id = db.Column(db.String(50),
                         primary_key=True,
                         unique=True,
                         nullable=False)
    name = db.Column(db.String(50), nullable=False)
    user_name = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(100), nullable=False)
    user_type = db.Column(db.Integer,
                          db.ForeignKey('user_type.type_id'),
                          nullable=False)
    address_line1 = db.Column(db.Text, nullable=False)
    address_line2 = db.Column(db.Text, nullable=False)
    area = db.Column(db.String(20), nullable=False)
    city = db.Column(db.String(20), nullable=False)
    state = db.Column(db.String(20), nullable=False)
    country = db.Column(db.String(20), nullable=False)
    pincode = db.Column(db.Integer, nullable=False)
    phone = db.Column(db.String(10), nullable=False)
    rating = db.Column(db.Integer,
                       db.ForeignKey('ratings.rating_value'),
                       nullable=False,
                       default=0)
    products = db.relationship('Products',
                               backref='products_sellers_br',
                               lazy='dynamic')
    cart_collection = db.relationship('Cart',
                                      backref='user_br',
                                      lazy='dynamic')

    token = db.Column(db.String(32), index=True, unique=True)
    token_expiration = db.Column(db.DateTime)

    def __repr__(self):
        return f"User('{self.name}', '{self.email_id}', '{self.user_name}', '{self.users_type_br.type_name}')"

    def get_id(self):
        return (self.email_id)

    def check_password(self, password):
        return bcrypt.check_password_hash(self.password, password)

    def to_dict(self, include_email=False):
        data = {
            'name': self.name,
            'user_name': self.user_name,
            'password': self.password,
            'user_type': self.user_type,
            'address_line1': self.address_line1,
            'address_line2': self.address_line2,
            'area': self.area,
            'city': self.city,
            'state': self.state,
            'country': self.country,
            'pincode': self.pincode,
            'phone': self.phone,
            'rating': self.rating,
            '_links': {
                'self':
                url_for('api.get_user', email_id=self.email_id,
                        _external=True),
                'products':
                url_for('api.get_products',
                        email_id=self.email_id,
                        _external=True)
            }
        }

        if include_email:
            data['email_id'] = self.email_id

        return data

    def from_dict(self, data, new_user=False):
        for field in [
                'email_id', 'name', 'user_name', 'address_line1',
                'address_line2', 'area', 'city', 'state', 'country', 'pincode',
                'phone'
        ]:
            if field in data:
                setattr(self, field, data[field])

        if new_user and 'password' in data:
            hashed_password = bcrypt.generate_password_hash(
                data['password']).decode('utf-8')
            self.password = hashed_password

    def get_token(self, expires_in=120):
        now = datetime.utcnow()

        if self.token and self.token_expiration > now + timedelta(seconds=20):
            print('active token exists')
            return self.token

        self.token = base64.b64encode(os.urandom(24)).decode('utf-8')
        self.token_expiration = now + timedelta(seconds=expires_in)
        db.session.add(self)
        print('prev token has expired')
        print(f'new token : {self.token}')
        return self.token

    def revoke_token(self):
        self.token_expiration = datetime.utcnow() - timedelta(seconds=1)

    @staticmethod
    def check_token(token):
        user = Users.query.filter_by(token=token).first()
        if user is None or user.token_expiration < datetime.utcnow():
            print(f'invalid token')
            return None
        return user