예제 #1
0
class Question(db.Model):
    __tablename__ = 'questions'

    def __init__(self, title, text):
        self.title = title
        self.text = text

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    text = db.Column(db.String(500), nullable=False)
    timestamp = db.Column(db.DateTime(),
                          nullable=False,
                          server_default=func.now())

    topic_id = db.Column(db.Integer,
                         db.ForeignKey('topics.id'),
                         nullable=False)
    topic = db.relationship('Topic', uselist=False, back_populates='questions')

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', back_populates='questions')

    answers = db.relationship('Answer',
                              back_populates='question',
                              order_by=Answer.id)

    def serialize(self):
        return {'id': self.id, 'title': self.title, 'text': self.text, \
            'timestampStr': self.timestamp.strftime('%d/%m/%Y, %H:%M:%S')}
예제 #2
0
class Project(db.Model):
    """Project Class contains link to the user that interact with this project,
        the top level tasks related to id"""
    id = db.Column(db.Integer, primary_key=True)
    changed_at = db.Column(
        db.DateTime(), default=datetime.now(), onupdate=datetime.now())
    name = db.Column(db.String(80))
    description = db.Column(db.String(250))
    tasks = db.relationship('Task', secondary=project_tasks, lazy='subquery',
                            backref=db.backref('project', lazy=True))
    users = db.relationship('User', secondary=project_users, lazy='subquery',
                            backref=db.backref('project', lazy=True))

    def add_task(self, name, description, end_time):
        """Adds a new Task to this Project"""
        self.tasks.append(
            Task(name=name, description=description, end_time=end_time)
        )
        db.session.update(self)
        db.session.commit()

    def add_user(self, em_usname):
        """Adds existing user to thihs project"""
        user = User.query.filter_by(email=em_usname).first()
        if not user:
            user = User.query.filter_by(username=em_usname).first()
        if user:
            self.users.append(user)
            db.session.update(self)
            db.session.commit()
        else:
            raise Exception()
예제 #3
0
class Task(db.Model):
    __tablename__ = 'task'

    """Task class contains subTasks"""
    id = db.Column(db.Integer, primary_key=True)
    changed_at = db.Column(
        db.DateTime(), default=datetime.now(), onupdate=datetime.now())
    name = db.Column(db.String(80))
    description = db.Column(db.String(80))
    end_time = db.Column(db.Date())
    supertask = db.Column(db.Integer, db.ForeignKey('task.id'))
    tasks = db.relationship('Task', cascade="all", backref=db.backref(
        "parent", remote_side='Task.id'))
    questionnaires = db.relationship(
        'Questionnaire', backref='taks', lazy=True)
예제 #4
0
파일: grade.py 프로젝트: milica-beep/e-ques
class Grade(db.Model):
    __tablename__ = 'grades'

    value = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime(), server_default=func.now())

    user_id = db.Column(db.Integer,
                        db.ForeignKey('users.id'),
                        primary_key=True)
    user = db.relationship('User', back_populates='grades')

    answers = db.relationship('Answer',
                              secondary=AnswerGrade,
                              back_populates='grades')

    def serialize(self):
        return {
            'value': self.value,
            'timestampStr': self.timestamp,
            'userId': self.user_id
        }
예제 #5
0
class Comment(db.Model):
    __tablename__='comments'

    def __init__(self, text, answer_id, user_id):
        self.text = text
        self.answer_id = answer_id
        self.user_id = user_id
       
    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(500), nullable=False)
    timestamp = db.Column(db.DateTime(), nullable=False, server_default=func.now())

    answer_id = db.Column(db.Integer, db.ForeignKey('answers.id'), nullable=False)
    answer = db.relationship('Answer', back_populates='comments')
    
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', back_populates='comments')

    def serialize(self):
        return {'id': self.id, 'text': self.text, 'timestampStr': self.timestamp, \
                'answerId': self.answer_id, 'userId': self.user_id }
예제 #6
0
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    changed_at = db.Column(
        db.DateTime(), default=datetime.now(), onupdate=datetime.now())
    email = db.Column(db.String(80), unique=True, nullable=False)
    name = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(80), nullable=False)
    tasks = db.relationship('Task', secondary=user_tasks, lazy='subquery',
                            backref=db.backref('users', lazy=True))

    def add_task(self, id):
        task = Task.query.filter_by(id=id).first()
        if task:
            self.tasks.append(task)
            db.session.update(self)
            db.session.commit()
        else:
            raise Exception()

    def get_project_grid(self, n):
        grid = []
        for i in range(0, len(self.project), n):
            grid.append(self.project[i:i + n])
        return grid

    def get_index_data(self):
        tasks = []
        projects = []
        for count, task in enumerate(sorted(self.tasks, key=(lambda x: x.end_time))):
            if count >= 5:
                break
            else:
                tasks.append(task)
        for count, project in enumerate(sorted(self.project, key=(lambda x: x.name))):
            if count >= 5:
                break
            else:
                projects.append(project)
        return {'tasks': tasks, 'projects': projects}
예제 #7
0
class Answer(db.Model):
    __tablename__ = 'answers'

    def __init__(self, text, question_id, user_id, is_pinned, grade):
        self.text = text
        self.question_id = question_id
        self.user_id = user_id
        self.is_pinned = is_pinned
        self.average_grade = grade

    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(500), nullable=False)
    is_pinned = db.Column(db.Boolean)
    average_grade = db.Column(db.Float)
    timestamp = db.Column(db.DateTime(),
                          nullable=False,
                          server_default=func.now())

    question_id = db.Column(db.Integer,
                            db.ForeignKey('questions.id'),
                            nullable=False)
    question = db.relationship('Question', back_populates='answers')

    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', back_populates='answers')

    comments = db.relationship('Comment', back_populates='answer')
    images = db.relationship('Image', back_populates='answer')
    grades = db.relationship('Grade',
                             secondary=AnswerGrade,
                             back_populates='answers')

    def serialize(self):
        return {'id': self.id, 'text': self.text, 'isPinned': self.is_pinned, 'averageGrade': self.average_grade, \
                'timestampStr': self.timestamp, 'questionId': self.question_id, 'userId': self.user_id, \
                'grades': [x.serialize() for x in self.grades] }