示例#1
0
class Category (db.Model):
    __tablename__ = 'category_model'

    id = db.Column (db.Integer, primary_key = True)
    name = db.Column (db.String (30) , nullable = False, unique = True)
    #color = db.Column (db.String (10), nullable = False)
    subcategories = db.relationship ('SubCategory' , cascade = 'all,delete', backref = 'category_model' , lazy = True)


    def __init__ (self, name):#, color = '#00000000'):
        self.name = name
        #self.color = color

    def save (self):
        db.session.add (self)
        db.session.commit()

    def edit (self, name):
        self.name = name
        db.session.commit()

    def delete (self):
        db.session.delete (self)
        db.session.commit()

    def append_subcategory (self, subcategory):
        self.subcategories.append (subcategory)
        db.session.commit()

    def serialize_one (self):
        return CategorySchema().dump(self)

    @staticmethod
    def serialize_many (arg):
        return CategorySchema(many=True).dump(arg)
示例#2
0
class Podcast(db.Model):
    __tablename__ = 'podcast_model'

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(40), nullable=False)
    description = db.Column(db.Text, nullable=False)
    url = db.Column(db.Text, nullable=False)
    timestamp = db.Column(db.DateTime)

    def __init__(self, title, description, url):
        self.title = title
        self.description = description
        self.url = url
        self.timestamp = datetime.now()

    def save(self):
        db.session.add(self)
        db.session.commit()

    def edit(self, title, description, url):
        self.title = title
        self.description = description
        self.url = url
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def serialize_one(self):
        return PodcastSchema().dump(self)

    @staticmethod
    def serialize_many(arg):
        return PodcastSchema(many=True).dump(arg)
示例#3
0
class Motivation (db.Model):
    __tablename__ = 'motivation_model'

    id = db.Column(db.Integer, primary_key = True)
    title = db.Column (db.String(40), nullable = True)
    description = db.Column (db.Text , nullable = False)
    subcategory_id = db.Column(db.Integer, db.ForeignKey('subcategory_model.id', ondelete = 'CASCADE'))
    timestamp = db.Column (db.DateTime)
    usermotivations = db.relationship ('UserMotivation' , cascade = 'all,delete', backref = 'motivation_model' , lazy = True)

    def __init__ (self, description, subcategory_id, title = None):
        self.title = title
        self.description = description
        self.timestamp = datetime.now()
        if title :
            self.title = title
        self.subcategory_id = subcategory_id

    def save (self):
        db.session.add (self)
        db.session.commit()

    def edit (self, title, description):
        self.title = title
        self.description = description
        db.session.commit()

    def delete (self):
        db.session.delete (self)
        db.session.commit()

    def append_usermotivation (self, usermotivation):
        self.usermotivations.append (usermotivation)
        db.session.commit()

    def serialize_one (self):
        return MotivationSchema().dump(self)

    @staticmethod
    def serialize_many (arg):
        return MotivationSchema(many=True).dump(arg)
示例#4
0
class SubCategory (db.Model):
    __tablename__ = 'subcategory_model'

    id = db.Column (db.Integer, primary_key = True)
    name = db.Column (db.String (50) , nullable = False)
    icon_url = db.Column (db.Text)
    category_id = db.Column(db.Integer, db.ForeignKey('category_model.id', ondelete = 'CASCADE'))
    motivations = db.relationship ('Motivation' , cascade = 'all,delete', backref = 'subcategory_model' , lazy = True)
    usermotivations = db.relationship ('UserMotivation' , cascade = 'all,delete', backref = 'subcategory_model' , lazy = True)


    def __init__ (self, name, url, category_id):
        self.name = name
        self.icon_url = url
        self.category_id = category_id

    def save (self):
        db.session.add (self)
        db.session.commit()

    def edit (self, name, icon):
        self.name = name
        self.icon_url = icon
        db.session.commit()

    def delete (self):
        db.session.delete (self)
        db.session.commit()

    def append_motivation (self, motivation):
        self.motivations.append (motivation)
        db.session.commit()

    def serialize_one (self):
        return SubCategorySchema().dump(self)

    @staticmethod
    def serialize_many (arg):
        return SubCategorySchema(many=True).dump(arg)
示例#5
0
class User(db.Model, UserMixin):
    __tablename__ = 'user_model'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(50), unique=True, nullable=False)
    role = db.Column(db.String(10), nullable=False)  #user, admin, owner
    pass_hash = db.Column(db.Text)
    motivation_count = db.Column(db.Integer, nullable=False)
    usermotivations = db.relationship('UserMotivation',
                                      cascade='all,delete',
                                      backref='user_model',
                                      lazy=True)
    motivation_bookmark = db.relationship('Motivation',
                                          secondary=user_motivation_bookmark)

    def __init__(self, name, email, password, role='user', count=5):
        self.name = name
        self.email = email.lower()
        self.role = role
        self.pass_hash = generate_password_hash(password)
        self.motivation_count = count

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

    def save(self):
        db.session.add(self)
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    def rename(self, new_name):
        self.name = new_name
        db.session.commit()

    def change_password(self, pw):
        self.pass_hash = generate_password_hash(pw)
        db.session.commit()

    def edit_count(self, count):
        self.motivation_count = count
        db.session.commit()

    def add_bookmark(self, motivation):
        self.motivation_bookmark.append(motivation)
        db.session.commit()

    def remove_bookmark(self, motivation):
        self.motivation_bookmark.remove(motivation)
        db.session.commit()

    def get_bookmark(self):
        return self.motivation_bookmark

    def clear_visited_motivations(self):
        UserMotivation.query.filter(UserMotivation.user_id == self.id,
                                    UserMotivation.visited == False).delete()
        db.session.commit()

    @staticmethod
    def initialize_motivations(user_id, user_count):
        random.seed(user_id)
        for subcategory_id, in SubCategory.query.with_entities(
                SubCategory.id).all():
            motivations = Motivation.query.filter_by(
                subcategory_id=subcategory_id).all()
            samples = random.sample(motivations, user_count * 7)
            for i in range(7):
                for j in range(user_count):
                    new_record = UserMotivation(user_id,
                                                samples[j +
                                                        (i * user_count)].id,
                                                subcategory_id,
                                                days=i)
                    new_record.save()
        print("DONE###########################################")

    @staticmethod
    def reinitialize_motivations(user_id, user_count):
        random.seed(user_id)
        for subcategory_id, in SubCategory.query.with_entities(
                SubCategory.id).all():
            useless_motivations = UserMotivation.query.with_entities\
                                            (UserMotivation.motivation_id)\
                                            .filter(UserMotivation.user_id == user_id,\
                                            UserMotivation.subcategory_id == subcategory_id).all()

            #motivations from this category except those which are useless
            useful_motivations = Motivation.query.filter \
                                    (~Motivation.id.in_ (useless_motivations),\
                                    Motivation.subcategory_id == subcategory_id).all()

            samples = random.sample(useful_motivations, user_count * 7)
            for i in range(7):
                for j in range(user_count):
                    new_record = UserMotivation(user_id,
                                                samples[j +
                                                        (i * user_count)].id,
                                                subcategory_id,
                                                days=i)
                    new_record.save()

        print("DONE REINIT$$$$$$$$$$$##################")

    @staticmethod
    def query_by_email(email):
        return User.query.filter_by(email=email).first()

    def serialize_one(self):
        return UserSchema().dump(self)

    @staticmethod
    def serialize_many(arg):
        return UserSchema(many=True).dump(arg)