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"]
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) }
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)