Source code for models.chatGroup
from models.base_model import BaseModel, db_factory_func
[docs]class ChatGroupsModel(BaseModel):
"""
Implements the chat feature\n
It just keeps chatgroups and information related to table, anything about membership is not stored in this model
"""
def __init__(self, init_table=False):
super().__init__("chatgroups", {
"id": "SERIAL PRIMARY KEY", # TODO create chatgroup for studygroup
"group_admin": '''CHAR(9) NOT NULL REFERENCES student(id) ON DELETE CASCADE
ON UPDATE CASCADE''',
"name": "VARCHAR(80) NOT NULL",
"created_at": "TIMESTAMP DEFAULT now()",
"created_by": '''CHAR(9) REFERENCES student(id) ON DELETE SET NULL
ON UPDATE CASCADE '''}, init_table=init_table)
[docs] def listGroups(self):
"""
Returns a groups of student
:param data: Student info
"""
return self.find(return_cols=["id"], sort_by="id")
[docs] def createGroup(self, data):
"""
Forms a Chat group.
:param data: Chatgroup information
"""
self.create(data=data)
[docs] def removeGroup(self, data):
"""
Removes a group from database
"""
return self.delete_by_id(_id=data['id'])
[docs] def updateGroup(self, data):
"""
Updates group's information
"""
return self.update(data=data)
# Returns the groups that a people manages
[docs] @db_factory_func
def checkIsAdmin(self, conn, data):
"""
Checks wheter a student is admin of given group
"""
return conn.execute('''SELECT id FROM CHATGROUPS where group_admin='%(sid)s' and id=%(cid)s''' % data)
[docs] @db_factory_func
def getLastGroupCreatedById(self, conn, data):
"""
Returns the last group created by specific student Id. Used for adding student to group that he created simultenously
:param data: chatgroup_id
"""
return conn.execute('''SELECT id from chatgroups WHERE created_by = '%s'
ORDER BY created_at DESC''' % data)
[docs]class StudentsOnChatModel(BaseModel):
"""
Keeps information about chatgroups
"""
def __init__(self, init_table=False):
super().__init__("studentsonchat", {
"chatgroup_id": '''INTEGER NOT NULL REFERENCES chatgroups(id)
ON DELETE CASCADE''',
"student_id": '''CHAR(9) REFERENCES student(id) ON DELETE CASCADE
ON UPDATE CASCADE''',
"joined_at": "TIMESTAMP DEFAULT now()"
}, init_table=init_table)
[docs] def addMember(self, data):
"""
Adds member to chatgroup
:param data: Dictionary of chatgroup and student id
"""
self.create(data=data)
[docs] def listMembersOfGroup(self, data):
"""
Returns a dictionary that contains the members of group
"""
return self.find(query="chatgroup_id = %s" % data['cid'],
return_cols=['student_id'], sort_by='student_id')
[docs] @db_factory_func
def showGroupsOfStudent(self, conn, data):
"""
Returns a dictionary of group where student is joined
:param data: Chatgroup and student information
"""
return conn.execute('''SELECT chatgroup_id, name, group_admin FROM chatgroups JOIN studentsonchat
ON(chatgroups.id=studentsonchat.chatgroup_id)
WHERE student_id = %s''', data)
[docs] def checkIfMember(self, data):
"""
Checking membership status by student id
"""
return self.find(query='''chatgroup_id = %(cid)s
AND student_id = %(sid)s''' % data, limit=1,
return_cols=['chatgroup_id'])
[docs] def removeMember(self, data):
"""
Removes member from chat group
"""
return self.delete(query='''student_id = '%(sid)s' AND
chatgroup_id = %(cid)s ''' % data,
returning_id=False)