예제 #1
0
class UserBookings(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(),
                        db.ForeignKey('user.id', ondelete='CASCADE'))

    event_id = db.Column(db.Integer(), nullable=False)
    ticket_id = db.Column(db.Integer(), nullable=False)
    ticket_type = db.Column(db.String(100), nullable=False)
    number_booked = db.Column(db.Integer(), nullable=False)
    number_scanned = db.Column(db.Integer(), nullable=False)
    payment_status = db.Column(db.String(100), nullable=False)

    image_file = db.Column(db.String(50),
                           nullable=False,
                           default='default_qr.jpeg')
예제 #2
0
class Ticket(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    event_id = db.Column(db.Integer,
                         db.ForeignKey('event.id', ondelete='CASCADE'),
                         nullable=False)
    ticket_type = db.Column(db.String(30), nullable=False)
    # number of tickets per type
    num_tickets = db.Column(db.Integer, nullable=False)
    num_bought = db.Column(db.Integer, nullable=False, server_default="0")
    price = db.Column(db.Float, nullable=False)
예제 #3
0
class UserRoles(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(),
                        db.ForeignKey('user.id', ondelete='CASCADE'))
    role_id = db.Column(db.Integer(),
                        db.ForeignKey('role.id', ondelete='CASCADE'))
예제 #4
0
class Role(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), unique=False)
예제 #5
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    # username and email are the only ones decided by the user upon registration
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    # image file is automatically done by default
    image_file = db.Column(db.String(20),
                           nullable=False,
                           default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    first_name = db.Column(db.String(100), nullable=False, server_default='')
    last_name = db.Column(db.String(100), nullable=False, server_default='')
    # backref is like adding another column to an event
    # what it does is when we have an event we can use the manager attribute to see who made the event
    events = db.relationship('Event', backref='manager', lazy=True)
    bookings = db.relationship('UserBookings', backref='customer', lazy=True)

    roles = db.relationship('Role',
                            secondary='user_roles',
                            backref=db.backref('users', lazy='dynamic'))

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id}).decode('utf-8')

    def generate_auth_token(self, expires_sec=600):
        s = Serializer(current_app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except:
            return None
        return User.query.get(user_id)

    @staticmethod
    def verify_auth_token(token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
            # data = s.loads(token)
        except SignatureExpired:
            return None  # valid token, but expired
        except BadSignature:
            return None  # invalid token
        # user = User.query.get(data['user_id'])
        user = User.query.get(user_id)
        return user

    def confirm(self, token):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        if data.get('confirm') != self.id:
            return False
        self.confirmed = True
        db.session.add(self)
        return True

    def __repr__(self):  # how our object is printed
        return f"User('{self.username}','{self.email}','{self.image_file}')"
예제 #6
0
class EventStaff(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(),
                        db.ForeignKey('user.id', ondelete='CASCADE'))
    event_id = db.Column(db.Integer(),
                         db.ForeignKey('event.id', ondelete='CASCADE'))
예제 #7
0
class Event(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    # controllable items start here
    title = db.Column(db.String(100), nullable=False)
    event_type = db.Column(db.Text, nullable=False)
    # date and time will be the event date and time

    event_date = db.Column(db.Date, nullable=False)
    time_from = db.Column(db.Time, nullable=False)
    time_to = db.Column(db.Time, nullable=False)

    # num_tickets = db.Column(db.Integer, nullable=False)
    content = db.Column(db.Text, nullable=False)
    content_eng = db.Column(db.Text, nullable=True)
    address = db.Column(db.String(100), nullable=False)
    city = db.Column(db.String(100), nullable=False)
    location = db.Column(db.String(100), nullable=False)

    tickets = db.relationship('Ticket',
                              backref='event',
                              lazy=True,
                              cascade='all,delete-orphan')

    image_file = db.Column(db.String(20),
                           nullable=False,
                           default='default_event.jpg')

    # automatically set items start here
    # date_posted will be for when the event is created
    date_posted = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.utcnow)
    # lower case, table and column name is referenced
    # for backref/relationship purposes
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    staffers = db.relationship('User',
                               secondary='event_staff',
                               backref=db.backref('users', lazy='dynamic'))

    # automatically set items stop here

    def __repr__(self):  # how our object is printed
        return f"Event('{self.title}','{self.date_posted}','{self.content}')"