205 lines
8.8 KiB
Python
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'}
|