flask-contacts/contacts/contacts.py

225 lines
9.7 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 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'}