flask-contacts/backend/students.py

205 lines
8.8 KiB
Python

import functools
from flask import (
Blueprint, flash, g, redirect, render_template, request, session, url_for
)
from flask import Blueprint
from flask_restful import Resource, Api, reqparse
from .db import get_db
class Students(Resource):
def get(self):
db = get_db()
cur = db.cursor()
cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, discipline_val, mark"
" FROM main"
" join last_name on main.last_name = last_name_id"
" join first_name on main.first_name = first_name_id"
" join middle_name on main.middle_name = middle_name_id"
" join discipline on main.discipline = discipline_id")
students = cur.fetchall()
def convert(data):
return {
'uid': data[0],
'last_name': data[1],
'first_name': data[2],
'middle_name': data[3],
'discipline': data[4],
'mark': data[5]
}
students = [convert(student) for student in students]
return students
def post(self):
db = get_db()
cur = db.cursor()
parser = reqparse.RequestParser()
parser.add_argument('last_name')
parser.add_argument('first_name')
parser.add_argument('middle_name')
parser.add_argument('discipline')
parser.add_argument('mark')
args = parser.parse_args()
cur.execute("SELECT uid FROM main ORDER BY uid DESC LIMIT 1")
uid = cur.fetchone()
if uid is None:
uid = 0
else:
uid = uid[0] + 1
cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],))
last_name = cur.fetchone()
if last_name is None:
cur.execute("INSERT INTO last_name (last_name_val) VALUES (%s)", (args['last_name'],))
cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],))
last_name = cur.fetchone()
last_name = last_name[0]
else:
last_name = last_name[0]
cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],))
first_name = cur.fetchone()
if first_name is None:
cur.execute("INSERT INTO first_name (first_name_val) VALUES (%s)", (args['first_name'],))
cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],))
first_name = cur.fetchone()
first_name = first_name[0]
else:
first_name = first_name[0]
cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],))
middle_name = cur.fetchone()
if middle_name is None:
cur.execute("INSERT INTO middle_name (middle_name_val) VALUES (%s)", (args['middle_name'],))
cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],))
middle_name = cur.fetchone()
middle_name = middle_name[0]
else:
middle_name = middle_name[0]
cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],))
discipline = cur.fetchone()
if discipline is None:
cur.execute("INSERT INTO discipline (discipline_val) VALUES (%s)", (args['discipline'],))
cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],))
discipline = cur.fetchone()
discipline = discipline[0]
else:
discipline = discipline[0]
cur.execute("INSERT INTO main (uid, last_name, first_name, middle_name, discipline, mark)"
" VALUES (%s, %s, %s, %s, %s, %s)",
(uid, last_name, first_name, middle_name, discipline, args['mark']))
db.commit()
return {'uid': uid}, 201
class Student(Resource):
def get(self, uid):
db = get_db()
cur = db.cursor()
cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, discipline_val, mark"
" FROM main"
" join last_name on main.last_name = last_name_id"
" join first_name on main.first_name = first_name_id"
" join middle_name on main.middle_name = middle_name_id"
" join discipline on main.discipline = discipline_id"
" WHERE uid = %s", (uid,))
student = cur.fetchone()
if student is None:
return {'message': 'Student not found'}, 404
def convert(data):
return {
'uid': data[0],
'last_name': data[1],
'first_name': data[2],
'middle_name': data[3],
'discipline': data[4],
'mark': data[5]
}
student = convert(student)
return student
def delete(self, uid):
db = get_db()
cur = db.cursor()
cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,))
student = cur.fetchone()
if student is None:
return {'message': 'Student not found'}, 404
cur.execute("DELETE FROM main WHERE uid = %s", (uid,))
db.commit()
return {'message': 'Student deleted'}
def put(self, uid):
parser = reqparse.RequestParser()
parser.add_argument('last_name')
parser.add_argument('first_name')
parser.add_argument('middle_name')
parser.add_argument('discipline')
parser.add_argument('mark')
args = parser.parse_args()
db = get_db()
cur = db.cursor()
cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,))
student = cur.fetchone()
if student is None:
return {'message': 'Student not found'}, 404
if args['last_name'] is not None:
cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],))
last_name = cur.fetchone()
if last_name is None:
cur.execute("INSERT INTO last_name (last_name_val) VALUES (%s)", (args['last_name'],))
cur.execute("SELECT last_name_id FROM last_name WHERE last_name_val = %s", (args['last_name'],))
last_name = cur.fetchone()
last_name = last_name[0]
else:
last_name = last_name[0]
cur.execute("UPDATE main SET last_name = %s WHERE uid = %s", (last_name, uid))
if args['first_name'] is not None:
cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],))
first_name = cur.fetchone()
if first_name is None:
cur.execute("INSERT INTO first_name (first_name_val) VALUES (%s)", (args['first_name'],))
cur.execute("SELECT first_name_id FROM first_name WHERE first_name_val = %s", (args['first_name'],))
first_name = cur.fetchone()
first_name = first_name[0]
else:
first_name = first_name[0]
cur.execute("UPDATE main SET first_name = %s WHERE uid = %s", (first_name, uid))
if args['middle_name'] is not None:
cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],))
middle_name = cur.fetchone()
if middle_name is None:
cur.execute("INSERT INTO middle_name (middle_name_val) VALUES (%s)", (args['middle_name'],))
cur.execute("SELECT middle_name_id FROM middle_name WHERE middle_name_val = %s", (args['middle_name'],))
middle_name = cur.fetchone()
middle_name = middle_name[0]
else:
middle_name = middle_name[0]
cur.execute("UPDATE main SET middle_name = %s WHERE uid = %s", (middle_name, uid))
if args['discipline'] is not None:
cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],))
discipline = cur.fetchone()
if discipline is None:
cur.execute("INSERT INTO discipline (discipline_val) VALUES (%s)", (args['discipline'],))
cur.execute("SELECT discipline_id FROM discipline WHERE discipline_val = %s", (args['discipline'],))
discipline = cur.fetchone()
discipline = discipline[0]
else:
discipline = discipline[0]
cur.execute("UPDATE main SET discipline = %s WHERE uid = %s", (discipline, uid))
if args['mark'] is not None:
cur.execute("UPDATE main SET mark = %s WHERE uid = %s", (args['mark'], uid))
db.commit()
return {'message': 'Student updated'}