Esempio n. 1
0
    def get(self, table, directoryId, className):
        if table not in studentTablesIgnorePopulate:
            return errors.NoTable
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()
        if isUnique('className', className, 'classes', db):
            return errors.NoClass()
        
        response = db.session.execute('SELECT * FROM people WHERE directoryId = :d;', {'d':directoryId})

        result = [dict(r) for r in response]
        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        response = db.session.execute('SELECT studentId FROM students t1 JOIN people t2 ON t1.personId = t2.personId WHERE directoryId = :directoryId', {'directoryId' : directoryId})
        result = [dict(r) for r in response]
        studentId = result[0]['studentId']

        response = db.session.execute('SELECT classId FROM classes WHERE className = :className;', {'className' : className})
        result = [dict(r) for r in response]
        classId = result[0]['classId']

        response = db.session.execute('SELECT * FROM {} WHERE classId = :cid AND studentId = :sid;'.format(table), {'cid':classId, 'sid':studentId})

        if response is None:
            return errors.NoStudent()
        return make_response(jsonify([dict(r) for r in response]), 200)
Esempio n. 2
0
    def get(self, directoryId):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        response = db.session.execute('SELECT * FROM people WHERE directoryId = :d;', {'d':directoryId})

        result = [dict(r) for r in response]
        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        response = db.session.execute('SELECT studentId FROM students t1 JOIN people t2 ON t1.personId = t2.personId WHERE directoryId = :directoryId', {'directoryId':directoryId})

        result = [dict(r) for r in response]
        studentId = result[0]['studentId']

        response = db.session.execute('''
        SELECT groups.groupId, groups.name, classes.className, groups.watch, groups.groupHealth, groups.groupScore FROM groups
        JOIN student_teams ON groups.groupId = student_teams.groupId
        JOIN classes ON groups.classId = classes.classId
        WHERE student_teams.studentId = :sid;
        ''', {
            'sid':studentId
        })
        return make_response(json.dumps([dict(r) for r in response]), 200)
Esempio n. 3
0
    def get(self, directoryId):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()
        # Get student with given UID as a JOIN on Person and Student
        response = db.session.execute(
            'SELECT * FROM people WHERE directoryId = :d;', {'d': directoryId})
        result = [dict(r) for r in response]

        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        response = db.session.execute(
            'SELECT studentId, firstName, lastName, directoryId, uid FROM people t1 JOIN students t2 ON t1.personId = t2.personID WHERE t1.directoryId = :d;',
            {'d': directoryId})
        result = [dict(r) for r in response]

        return make_response(json.dumps(result[0]), 200)
Esempio n. 4
0
    def delete(self, directoryId, name):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()
        if isUnique('name', name, 'groups', db):
            return errors.NoGroup()

        response = db.session.execute(
            'SELECT * FROM people WHERE directoryId = :d;', {'d': directoryId})
        result = [dict(r) for r in response]

        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        student = db.session.execute(
            """SELECT studentId FROM student_teams WHERE
                                studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId from people WHERE directoryId=:directoryId)) AND
                                groupId=(SELECT groupId FROM groups WHERE name=:n)""",
            {
                'directoryId': directoryId,
                "n": name
            }).fetchone()

        if student is None:
            return errors.NoStudent()
        else:
            studentId = student['studentId']

        db.session.execute(
            """DELETE FROM student_teams WHERE
                                studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId from people WHERE directoryId=:directoryId)) AND
                                groupId=(SELECT groupId FROM groups WHERE name=:n)""",
            {
                'directoryId': directoryId,
                "n": name
            })

        db.session.commit()

        return make_response('', 204)
Esempio n. 5
0
    def get(self, directoryId):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        response = db.session.execute(
            'SELECT * FROM people WHERE directoryId = :d;', {'d': directoryId})

        result = [dict(r) for r in response]
        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        query = """
        SELECT className FROM classes
        JOIN groups ON classes.classId = groups.classId
        JOIN student_teams ON groups.groupId = student_teams.groupId
        JOIN students ON student_teams.studentId = students.studentId
        WHERE students.personId = :p;
        """
        response = db.session.execute(query, {"p": personId})
        return make_response(json.dumps([dict(r) for r in response]), 200)
Esempio n. 6
0
    def delete(self, directoryId):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        response = db.session.execute(
            'SELECT * FROM people WHERE directoryId = :d;', {'d': directoryId})
        result = [dict(r) for r in response]

        personId = result[0]['personId']

        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        query = '''DELETE FROM student_teams WHERE studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId FROM people WHERE directoryId=:did));
                    DELETE FROM elmsData WHERE studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId FROM people WHERE directoryId=:did));
                    DELETE FROM answers WHERE studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId FROM people WHERE directoryId=:did));
                    DELETE FROM students WHERE personId=(SELECT personId from people WHERE directoryId=:did);'''
        db.session.execute(query, {'did': directoryId})

        db.session.commit()

        return make_response('', 204)
Esempio n. 7
0
    def post(self, directoryId, name):
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()
        if isUnique('name', name, 'groups', db):
            return errors.NoGroup()

        response = db.session.execute(
            'SELECT * FROM people WHERE directoryId = :d;', {'d': directoryId})
        result = [dict(r) for r in response]

        personId = result[0]['personId']
        if isUnique('personId', personId, 'students', db):
            return errors.NoStudent()

        getStudentGroupQuery = '''SELECT * FROM student_teams WHERE
                                    studentId=(SELECT studentId FROM students WHERE personId=(SELECT personId from people WHERE directoryId=:directoryId)) AND
                                    groupId=(SELECT groupId FROM groups WHERE name=:n)
                                '''

        resp = db.session.execute(getStudentGroupQuery, {
            'directoryId': directoryId,
            'n': name
        })
        if [dict(r) for r in resp]:
            return errors.AlreadyGrouped()

        query = """INSERT INTO student_teams (studentId, groupId)
                    SELECT
                        (SELECT studentId FROM students WHERE personId=(SELECT personId from people WHERE directoryId=:directoryId)),
                        (SELECT groupId FROM groups WHERE name=:n);"""

        db.session.execute(query, {'directoryId': directoryId, 'n': name})
        db.session.commit()
        resp = db.session.execute(getStudentGroupQuery, {
            'directoryId': directoryId,
            'n': name
        })
        return make_response(json.dumps([dict(r) for r in resp][0]), 200)
Esempio n. 8
0
    def post(self, directoryId):
        if request.json is not None:
            return errors.InvalidBody()
        nullableArgs = ['uid']

        parser = reqparse.RequestParser(bundle_errors=True)
        parser = addToParser(nullableArgs, parser)

        args = parser.parse_args()

        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        if args['uid'] is not None and not isUnique('uid', args['uid'],
                                                    'students', db):
            return errors.DuplicateUID()

        if args['uid'] is not None and not args['uid'].isnumeric():
            return errors.NotNumeric()

        person = db.session.execute(
            "SELECT * FROM people WHERE directoryId = :did;", {
                'did': directoryId
            }).fetchone()
        personId = person['personId']

        if not isUnique('personId', personId, 'students', db):
            return errors.DuplicateDID()

        query = "INSERT INTO students (uid, personId) VALUES (:uid, :personId);"
        db.session.execute(query, {'uid': args['uid'], 'personId': personId})
        db.session.commit()

        response = db.session.execute(
            'SELECT studentId, firstName, lastName, directoryId, uid FROM people t1 JOIN students t2 ON t1.personId = t2.personID WHERE t1.directoryId = :d;',
            {'d': directoryId})

        return make_response(json.dumps([dict(r) for r in response][0]), 200)
Esempio n. 9
0
    def put(self, directoryId, className):
        if isUnique('className', className, 'classes', db):
            return errors.NoClass()
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        #Class - student
        query = """
        SELECT * FROM people JOIN students ON people.personId = students.personId 
        JOIN student_teams ON students.studentId = student_teams.studentId
        JOIN groups ON student_teams.groupId = groups.groupId
        JOIN classes ON groups.classId = classes.classId
        JOIN surveys ON classes.classId = surveys.classId
        WHERE classes.className = :cn AND people.directoryId = :directoryId;
        """
        response = db.session.execute(query, {
            "cn": className,
            "directoryId": directoryId
        })

        result = [dict(r) for r in response]
        if len(result) == 0:
            return errors.NoStudent()

        studentId = result[0]['studentId']
        surveyId = result[0]['surveyId']

        # Questions for this Survey
        questionIds = []
        query = "SELECT * FROM questions WHERE surveyId = :s;"
        response = db.session.execute(query, {"s": surveyId})
        questions = [dict(r) for r in response]

        for question in questions:
            questionIds.append(question['questionId'])

        #Gather answers
        answers = request.json
        if not isinstance(answers, list):
            return errors.MalformedList()

        answerList = []
        for answerObj in answers:
            if 'answer' not in answerObj:
                return errors.MalformedJSON()
            else:
                answerList.append(answerObj['answer'])

        if len(answerList) != len(questionIds):
            return errors.UnevenLength()

        #Check replace condition
        query = "SELECT * FROM answers JOIN questions ON answers.questionId = questions.questionId WHERE studentId = :s AND surveyId = :sid;"
        response = db.session.execute(query, {
            "s": studentId,
            "sid": surveyId
        }).fetchone()

        newAnswer = response is None or len(response) == 0

        #Insert
        if newAnswer:
            for idx in range(len(answerList)):
                query = "INSERT INTO answers (studentId, questionId, answer) VALUES (:s, :q, :a);"
                db.session.execute(query, {
                    "s": studentId,
                    "q": questionIds[idx],
                    "a": answerList[idx]
                })
        else:
            for idx in range(len(answerList)):
                query = "UPDATE answers SET answer = :a WHERE studentId = :s AND questionId = :q;"
                db.session.execute(query, {
                    "s": studentId,
                    "q": questionIds[idx],
                    "a": answerList[idx]
                })

        db.session.commit()
        return make_response('', 204)
Esempio n. 10
0
    def get(self, directoryId, className):
        if isUnique('className', className, 'classes', db):
            return errors.NoClass()
        if isUnique('directoryId', directoryId, 'people', db):
            return errors.NoPerson()

        #Get Questions
        query = """
        SELECT * FROM questions;
        """
        response = db.session.execute(query)
        result = [dict(r) for r in response]

        questions = []
        for questionObj in result:
            questions.append(questionObj['question'])

        #Gather Info
        query = """
        SELECT *
        FROM students JOIN people ON students.personId = people.personId
        JOIN student_teams ON students.studentId = student_teams.studentId
        JOIN groups ON student_teams.groupId = groups.groupId
        JOIN classes ON groups.classId = classes.classId
        WHERE classes.className = :c AND people.directoryId = :d;
        """
        response = db.session.execute(query, {
            "c": className,
            "d": directoryId
        })

        result = [dict(r) for r in response]
        if len(result) == 0:
            return errors.NoStudent()

        output = {}
        questions = output.update({"questions": questions})

        studentObjs = []

        for student in result:
            query = """
            SELECT *
            FROM surveys JOIN questions ON questions.surveyId = surveys.surveyId
            LEFT JOIN answers ON answers.questionId = questions.questionId
            WHERE surveys.classId = :c AND answers.studentId = :s; 
            """
            response = db.session.execute(query, {
                "c": student['classId'],
                "s": student['studentId']
            })

            answerObjs = [dict(r) for r in response]
            answerList = []
            for a in answerObjs:
                answerList.append(a['answer'])

            studentObjs.append({
                "answers": answerList,
                "firstName": student['firstName'],
                "lastName": student['lastName'],
                "uid": student['uid'],
                "className": student['className']
            })

        output.update({"results": studentObjs[0]})

        return make_response(json.dumps(output), 200)