Beispiel #1
0
class TodoModel(Base):
    __tablename__ = 'todos'

    id = db.Column(db.Integer, primary_key=True)
    desc = db.Column(db.String(200))
    done = db.Column(db.Boolean())

    project_id = db.Column(db.Integer, db.ForeignKey('projects.id'))
    project = db.relationship('ProjectModel')

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    user = db.relationship('UserModel')

    def __init__(self, desc, done, project_id=None, user_id=None):
        self.desc = desc
        self.done = done
        self.project_id = project_id
        self.user_id = user_id

    def json(self):
        return {
            'id':
            self.id,
            'desc':
            self.desc,
            'done':
            self.done,
            'project':
            self.project.query.filter_by(id=self.project_id).first().name,
            'created_by':
            self.user.query.filter_by(id=self.user_id).first().username
        }
Beispiel #2
0
class UserModel(Base):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80))
    password = db.Column(db.String(80))
    oauth = db.Column(db.Boolean())

    todos = db.relationship('TodoModel', lazy='dynamic')
    projects = db.relationship('ProjectModel', lazy='dynamic')

    def __init__(self, username, password=None, oauth=False):
        self.username = username
        if password:
            self.password = generate_password_hash(password).decode('utf-8')
        else:
            self.password = password
        self.oauth = oauth

    def json(self):
        return {
            'id': self.id,
            'username': self.username,
            'todos': [todo.json() for todo in self.todos.all()]
        }
    
    @classmethod
    def find_by_username(cls, username):
        return cls.query.filter_by(username=username).first()
Beispiel #3
0
class Agency(db.Model):
    """
    The model of agency
    """
    id = db.Column(db.Integer,
                   autoincrement=True,
                   nullable=False,
                   primary_key=True,
                   unique=True)
    name = db.Column(db.String(50), nullable=False)
    introduction = db.Column(db.Text, nullable=True)
    city = db.Column(db.String(20), nullable=False)
    address = db.Column(db.String(200), nullable=False)
    phone = db.Column(db.String(15), nullable=False)
    certification = db.Column(db.Boolean, nullable=False, default=False)
    create_time = db.Column(db.DateTime, nullable=False)
    last_update = db.Column(db.DateTime, nullable=True)
    avator = db.Column(db.Integer, db.ForeignKey("image.id"), nullable=False)
    trust_orders = db.relationship("TrusteeshipOrder", backref='agency')
    images = db.relationship("Image",
                             secondary=agency_image,
                             lazy='subquery',
                             backref=db.backref('image_of', lazy=True))
    managers = db.relationship("User", backref="own_agency")
    comments = db.relationship("Comment", backref="comment_for")
    counter = db.relationship("Counter", backref="counter_for")
Beispiel #4
0
class Role(db.Model):
    '''
    权限
    '''
    __tablename__ = 'db_role'
    id = db.Column(db.Integer,
                   nullable=False,
                   primary_key=True,
                   index=True,
                   autoincrement=True)
    role_id = db.Column(db.String(36), index=True, nullable=False, unique=True)
    name = db.Column(db.String(64), nullable=False, unique=True)
    mark = db.Column(db.String(64), nullable=False, unique=True)
    is_disabled = db.Column(db.Boolean, index=True, default=False)
    admins = db.relationship('Admin', backref='role')
    menus = db.relationship('Menu',
                            secondary=MenuToRole,
                            backref=db.backref('db_role', lazy='dynamic'),
                            lazy='dynamic')
    interfaces = db.relationship('Interface',
                                 secondary=InterfaceToRole,
                                 backref=db.backref('db_interface',
                                                    lazy='dynamic'),
                                 lazy='dynamic')
    __table_args__ = ({"useexisting": True})

    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        return dict

    def __repr__(self):
        return '<Role %r>' % self.name
Beispiel #5
0
class Reply(db.Model):
    __tablename__ = 'reply'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.String(140), nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)
    # 所属主贴
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    post = db.relationship('Post', backref=db.backref('posts'))
    # 回复用户
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', backref=db.backref('replies'))
Beispiel #6
0
class BookingRequest(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    booking_date = db.Column(db.Date)
    booking_time = db.Column(db.Time)
    details = db.Column(db.String(240))
    status = db.Column(db.String(20))
    booking_id = db.Column(db.Integer(), db.ForeignKey(Booking.id))
    worker_id = db.Column(db.Integer(), db.ForeignKey(User.id))
    booking = db.relationship(Booking, foreign_keys=[booking_id])
    worker = db.relationship(User, foreign_keys=[worker_id])

    def __str__(self):
        return self.details
Beispiel #7
0
class Menu(db.Model):
    '''
    菜单
    '''
    __tablename__ = 'db_menu'
    id = db.Column(db.Integer,
                   nullable=False,
                   primary_key=True,
                   index=True,
                   autoincrement=True)
    menu_id = db.Column(db.String(36), index=True, nullable=False, unique=True)
    pid = db.Column(db.String(36), nullable=False, index=True, default='0')
    title = db.Column(db.String(64), nullable=False, unique=True)
    path = db.Column(db.String(255), nullable=False, unique=True)
    icon = db.Column(db.String(255), nullable=False)
    mark = db.Column(db.String(255), nullable=False, unique=True)
    sort = db.Column(db.SmallInteger, index=True, default=1)
    is_disabled = db.Column(db.Boolean, index=True, default=False)
    interfaces = db.relationship('Interface', backref='menu')
    __table_args__ = ({"useexisting": True})

    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        return dict

    def __repr__(self):
        return '<Menu %r>' % self.title
Beispiel #8
0
class OAuth2AuthorizationCode(db.Model, OAuth2AuthorizationCodeMixin):
    __tablename__ = 'oauth2_code'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(
        db.Integer, db.ForeignKey('account.id', ondelete='CASCADE'))
    user = db.relationship('User')
Beispiel #9
0
class Folder(db.Model):
    '''
    文件夹
    '''
    __tablename__ = 'db_folder'
    id = db.Column(db.Integer,
                   nullable=False,
                   primary_key=True,
                   index=True,
                   autoincrement=True)
    folder_id = db.Column(db.String(36),
                          index=True,
                          nullable=False,
                          unique=True)
    admin_id = db.Column(db.String(36), index=True)
    pid = db.Column(db.String(36), nullable=False, index=True, default='0')
    name = db.Column(db.String(36), index=True, nullable=False)
    is_sys = db.Column(db.Boolean, index=True, default=True)  # True = 系统文件夹
    create_time = db.Column(db.DateTime,
                            index=True,
                            default=datetime.datetime.now)
    documents = db.relationship('Document', backref='folder')
    __table_args__ = ({"useexisting": True})

    def to_json(self):
        dict = self.__dict__
        if "_sa_instance_state" in dict:
            del dict["_sa_instance_state"]
        if "create_time" in dict:
            dict["create_time"] = dict["create_time"].strftime(
                '%Y-%m-%d %H:%M:%S')
        return dict

    def __repr__(self):
        return '<Folder %r>' % self.name
Beispiel #10
0
class TrusteeshipOrder(db.Model):
    """
    The model of trusteeship orders
    """
    id = db.Column(db.Integer,
                   autoincrement=True,
                   nullable=False,
                   primary_key=True,
                   unique=True)
    ord_num = db.Column(db.String(30), nullable=False)
    species = db.Column(db.String(50), nullable=False)
    pet_name = db.Column(db.String(50), nullable=False)
    age = db.Column(db.Integer, nullable=False)
    weight = db.Column(db.Float, nullable=False)
    expiration = db.Column(db.Integer, nullable=False)
    sterilization = db.Column(db.Boolean, nullable=False)
    naughty = db.Column(db.Boolean)
    shy = db.Column(db.Boolean)
    friendly = db.Column(db.Boolean)
    comment = db.Column(db.Text)
    price = db.Column(db.Float, nullable=False)
    status = db.Column(db.Integer, nullable=False, default=0)
    create_time = db.Column(db.DateTime, nullable=False)
    open_time = db.Column(db.DateTime)
    close_time = db.Column(db.DateTime)
    agency_fee = db.Column(db.Float)
    agency_id = db.Column(db.Integer,
                          db.ForeignKey('agency.id'),
                          nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    images = db.relationship("Image",
                             secondary=trust_order_image,
                             lazy='subquery',
                             backref=db.backref('image_in', lazy=True))
Beispiel #11
0
class ResetPassword(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    password = db.Column(db.String(80))
    user_id = db.Column(db.Integer(), db.ForeignKey(User.id))
    user = db.relationship(User, foreign_keys=[user_id])

    def __str__(self):
        return self.username
Beispiel #12
0
class Post(db.Model):
    __tablename__ = 'post'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    content = db.Column(db.String(140), nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    author = db.relationship('User', backref=db.backref('posts'))
    image = db.Column(db.String(10), default='/')
Beispiel #13
0
class Booking(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    booking_date = db.Column(db.Date)
    booking_time = db.Column(db.Time)
    details = db.Column(db.String(240))
    address = db.Column(db.String(200))
    is_taken = db.Column(db.Boolean)
    is_done = db.Column(db.Boolean)
    is_cancel = db.Column(db.Boolean)
    service_name = db.Column(db.Integer, db.ForeignKey(Service.name))
    service = db.relationship(Service, backref='service')
    customer_id = db.Column(db.Integer(), db.ForeignKey(User.id))
    customer = db.relationship(User, foreign_keys=[customer_id])
    worker_id = db.Column(db.Integer(), db.ForeignKey(User.id))
    worker = db.relationship(User, foreign_keys=[worker_id])

    def __str__(self):
        return 'Need "{}" by "{} {}" on "{} {}"'.format(
            self.service.name, self.customer.first_name,
            self.customer.last_name, self.booking_date, self.booking_time)
Beispiel #14
0
class OAuth2Token(db.Model, OAuth2TokenMixin):
    __tablename__ = 'oauth2_token'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(
        db.Integer, db.ForeignKey('account.id', ondelete='CASCADE'))
    user = db.relationship('User')

    def is_refresh_token_expired(self):
        expires_at = self.issued_at + self.expires_in * 2
        return expires_at < time.time()
Beispiel #15
0
class ProjectModel(Base):
    __tablename__ = 'projects'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200))
    todos = db.relationship('TodoModel', lazy='dynamic')

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    user = db.relationship('UserModel')

    def __init__(self, name, user_id=None):
        self.name = name,
        self.user_id = user_id

    def json(self):
        return {
            'id': self.id,
            'name': self.name,
            'user_id': self.user_id,
            'todos': [todo.json() for todo in self.todos.all()]
            }
Beispiel #16
0
class Word(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    frequency = db.Column(db.Integer)
    site_id = db.Column(db.Integer, db.ForeignKey('site.id'), nullable=False)
    site = db.relationship('Site',
                           backref=db.backref('words',
                                              lazy='dynamic',
                                              cascade='all, delete'))

    @property
    def json(self):
        return to_json(self, self.__class__)
Beispiel #17
0
class AuditLog(IdMixin, CreationTimeMixin, db.Model):
    __tablename__ = 'audit_logs'

    entity_id = db.Column(db.BigInteger)
    entity_type = db.Column(db.String, nullable=False)
    action = db.Column(db.String, nullable=False)
    user_id = db.Column(db.BigInteger,
                        db.ForeignKey('base_users.id'),
                        nullable=True)
    old_value = db.Column(db.String)
    new_value = db.Column(db.String)

    user = db.relationship('User', lazy=True)
Beispiel #18
0
class Image(db.Model):
    """
    The model of images
    """
    id = db.Column(db.Integer,
                   autoincrement=True,
                   nullable=False,
                   primary_key=True,
                   unique=True)
    name = db.Column(db.String(50), nullable=False)
    physical_name = db.Column(db.String(50), nullable=False)
    url = db.Column(db.String(250), nullable=False)
    upload_time = db.Column(db.DateTime, nullable=False)
    agency_avator = db.relationship("Agency", backref='avator_of')
Beispiel #19
0
class UserCred(db.Model):
    __tablename__ = 'cred'
    user_id = db.Column(db.Integer, primary_key=True)
    login = db.Column(db.String(20), unique=True)
    pw_hash = db.Column(db.String(180), unique=True)
    info = db.relationship('UserInfo', uselist=False,
                           back_populates="cred")  # NOT USE

    def __init__(self, login, password):
        self.login = login
        self.pw_hash = bcrypt.generate_password_hash(password).decode('utf8')

    def create_auth_token(self):
        try:
            return os.urandom(24).hex()
        except Exception as e:
            return e
Beispiel #20
0
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(100))
    last_name = db.Column(db.String(100))
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True)
    address = db.Column(db.String(200))
    barangay = db.Column(db.String(100))
    phone_no = db.Column(db.String(30))
    role = db.Column(db.String(20))
    registration_id = db.Column(db.String(300))
    is_verified = db.Column(db.Boolean)
    services = db.relationship(Service,
                               secondary=user_services_table,
                               backref=db.backref('users'))

    def __str__(self):
        return '{} {}'.format(self.first_name, self.last_name)
Beispiel #21
0
class UserInfo(db.Model):
    __tablename__ = 'info'
    info_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    surname = db.Column(db.String(20))
    age = db.Column(db.Integer)
    user_id = db.Column(db.Integer, db.ForeignKey('cred.user_id'))  # NOT USE
    cred = db.relationship('UserCred', uselist=False,
                           back_populates="info")  # NOT USE

    def __init__(self, id, name=None, surname=None, age=None):
        self.name = name
        self.surname = surname
        self.age = age
        self.user_id = id

    def update_fields(self, fields):
        keys = ['name', 'surname', 'age']
        for key in keys:
            if fields.get(key) is not None:
                setattr(self, key, fields[key])
class User(db.Model):
    """
    The model of user and authorization information
    """
    id = db.Column(
        db.Integer,
        autoincrement=True,
        nullable=False,
        primary_key=True,
        unique=True
        )
    username = db.Column(db.String(20), nullable=False)
    password_hash = db.Column(db.String(120), nullable=False)
    phone = db.Column(db.String(15), nullable=False)
    email = db.Column(db.String(50), nullable=False)
    create_time = db.Column(db.DateTime, nullable=False)
    own_agent_id = db.Column(
        db.Integer,
        db.ForeignKey("agency.id"),
        nullable=True
        )
    comments = db.relationship("Comment", backref="author")
    comments_order = db.relationship("TrusteeshipOrder", backref="consumer")

    def hash_password(self, password):
        """
        Save the hash password
        :param password: origin password
        """
        self.password_hash = custom_app_context.hash(str(password))

    def verify_password(self, password):
        """
        Verify the password
        :param password: origin password
        :return: bool
        """
        return custom_app_context.verify(password, self.password_hash)

    def generate_token(self, expiration=600):
        """
        Generate a new token
        :param expiration: how long it lasts
        :return: the signature
        """
        serializer = TimedJSONWebSignatureSerializer(SECRET_KEY, expiration)
        return serializer.dumps({"id": self.id}).decode("utf-8")

    @staticmethod
    def verify_token(token):
        """
        Verify the token
        :param token: the given signature
        :return: the user information or error message
        """
        serializer = TimedJSONWebSignatureSerializer(SECRET_KEY)
        try:
            data = serializer.loads(bytes(token, encoding="utf-8"))
        except SignatureExpired:
            return None
        except BadSignature:
            return None
        return User.query.get(data["id"])