Example #1
0
class CommentReadTable(db.Model):
    __tablename__ = "commentreadtable"

    userid = db.Column('userid',
                       UUID(as_uuid=True),
                       db.ForeignKey('usertable.userid', ondelete='CASCADE'),
                       primary_key=True)
    commentid = db.Column('commentid',
                          UUID(as_uuid=True),
                          db.ForeignKey('commenttable.commentid',
                                        ondelete='CASCADE'),
                          primary_key=True)

    user = db.relationship(UserTable,
                           foreign_keys=userid,
                           backref=db.backref('commenter',
                                              lazy='joined',
                                              cascade="all, delete-orphan"))
    comment = db.relationship(CommentTable,
                              foreign_keys=commentid,
                              backref=db.backref('commented',
                                                 lazy='joined',
                                                 cascade="all, delete-orphan"))

    def __init__(self, data):
        self.commentid = data["commentid"]
        self.userid = data["userid"]
Example #2
0
class GroupTable(db.Model):
    __tablename__ = "grouptable"

    groupid = db.Column(UUID(as_uuid=True), primary_key=True)
    groupname = db.Column(db.String(64), nullable=False)
    groupleaderid = db.Column('groupleader',
                              UUID(as_uuid=True),
                              db.ForeignKey('usertable.userid'),
                              nullable=False)

    groupleader = db.relationship(UserTable,
                                  foreign_keys=groupleaderid,
                                  backref=db.backref('leader', lazy='joined'))

    def __init__(self, data):
        self.groupid = str(uuid.uuid1())
        self.groupname = data["groupname"]
        self.groupleaderid = data["groupleaderid"]

    def serialise(self):
        return {
            "groupid": str(self.groupid),
            "groupname": str(self.groupname),
            "groupleaderid": str(self.groupleaderid)
        }
Example #3
0
class Project(db.Model):
    __tablename__ = 'projects'
    id = db.Column(db.Integer, primary_key=True)
    project_name = db.Column(db.String(80))
    project_desc = db.Column(db.String(80))
    owner_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    task = db.relationship("Task", backref="project", lazy='dynamic')
    members = db.relationship("User", secondary=proj_allocation,
                              backref=db.backref('curr_projects',
                                                 lazy='dynamic')
                              )

    def __init__(self, id: int, project_name: str,
                 project_desc: str, owner: int, **kwargs):
        self.id = id
        self.project_name = project_name
        self.project_desc = project_desc
        self.owner_id = owner

    @classmethod
    def find_by_project_id(cls, project_id):
        return cls.query.filter_by(id=project_id).first()

    @classmethod
    def find_by_project_name(cls, project_name):
        return cls.query.filter_by(project_name=project_name).first()

    def has_member(self, user):
        if user in self.members:
            return True
        return False

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

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

    def json(self):
        return {'id': self.id,
                'project_name': self.project_name,
                'project_desc': self.project_desc,
                'owner': self.owner.basicDetails()['username'],
                # 'members': [usr.json() for usr in self.members],
                # 'task': [tsk.json() for tsk in self.task.all()]
                }

    def editMembers(self, members: List):
        original_users = self.members
        updated_users = []
        if not members:
            return
        for mem in members:
            uname = mem['username']
            mem = User.find_by_username(uname)
            if mem:
                updated_users.append(mem)
        if self.owner not in updated_users:
            updated_users.append(self.owner)
        # Above line is to prevent owner to to lose ownership
        deleted_members = set(original_users) - set(updated_users)
        new_members = set(updated_users) - set(original_users)
        for member in deleted_members:
            self.members.remove(member)
        for member in new_members:
            self.members.append(member)