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 Contacts(Resource): def get(self): db = get_db() cur = db.cursor() cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, street_val, build, build_k, apartment, telephone" " 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 street on main.street = street_id") contacts = cur.fetchall() def convert(data): return { 'uid': data[0], 'last_name': data[1], 'first_name': data[2], 'middle_name': data[3], 'street': data[4], 'build': data[5], 'build_k': data[6], 'apartment': data[7], 'telephone': data[8] } contacts = [convert(contact) for contact in contacts] return contacts 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('street') parser.add_argument('build') parser.add_argument('build_k') parser.add_argument('apartment') parser.add_argument('telephone', required=True) 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 street_id FROM street WHERE street_val = %s", (args['street'],)) street = cur.fetchone() if street is None: cur.execute("INSERT INTO street (street_val) VALUES (%s)", (args['street'],)) cur.execute("SELECT street_id FROM street WHERE street_val = %s", (args['street'],)) street = cur.fetchone() street = street[0] else: street = street[0] cur.execute("INSERT INTO main (uid, last_name, first_name, middle_name, street, build, build_k, apartment, telephone)" " VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", (uid, last_name, first_name, middle_name, street, args['build'], args['build_k'], args['apartment'], args['telephone'])) db.commit() return {'uid': uid}, 201 class Contact(Resource): def get(self, uid): db = get_db() cur = db.cursor() cur.execute("SELECT uid, last_name_val, first_name_val, middle_name_val, street_val, build, build_k, apartment, telephone" " 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 street on main.street = street_id" " WHERE uid = %s", (uid,)) contact = cur.fetchone() if contact is None: return {'message': 'Contact not found'}, 404 def convert(data): return { 'uid': data[0], 'last_name': data[1], 'first_name': data[2], 'middle_name': data[3], 'street': data[4], 'build': data[5], 'build_k': data[6], 'apartment': data[7], 'telephone': data[8] } contact = convert(contact) return contact def delete(self, uid): db = get_db() cur = db.cursor() cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,)) contact = cur.fetchone() if contact is None: return {'message': 'Contact not found'}, 404 cur.execute("DELETE FROM main WHERE uid = %s", (uid,)) db.commit() return {'message': 'Contact 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('street') parser.add_argument('build') parser.add_argument('build_k') parser.add_argument('apartment') parser.add_argument('telephone') args = parser.parse_args() db = get_db() cur = db.cursor() cur.execute("SELECT uid FROM main WHERE uid = %s", (uid,)) contact = cur.fetchone() if contact is None: return {'message': 'Contact 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['street'] is not None: cur.execute("SELECT street_id FROM street WHERE street_val = %s", (args['street'],)) street = cur.fetchone() if street is None: cur.execute("INSERT INTO street (street_val) VALUES (%s)", (args['street'],)) cur.execute("SELECT street_id FROM street WHERE street_val = %s", (args['street'],)) street = cur.fetchone() street = street[0] else: street = street[0] cur.execute("UPDATE main SET street = %s WHERE uid = %s", (street, uid)) if args['build'] is not None: cur.execute("UPDATE main SET build = %s WHERE uid = %s", (args['build'], uid)) if args['build_k'] is not None: cur.execute("UPDATE main SET build_k = %s WHERE uid = %s", (args['build_k'], uid)) if args['apartment'] is not None: cur.execute("UPDATE main SET apartment = %s WHERE uid = %s", (args['apartment'], uid)) if args['telephone'] is not None: cur.execute("UPDATE main SET telephone = %s WHERE uid = %s", (args['telephone'], uid)) db.commit() return {'message': 'Contact updated'}