From 867e36274ab8803f90fe0b356cdfa550abcd785d Mon Sep 17 00:00:00 2001 From: Mikkel <4072916+Mikk3@users.noreply.github.com> Date: Tue, 24 May 2022 12:35:43 +0200 Subject: [PATCH] Add mo sql and models --- aula/models.py | 258 +++++++++++++++++++++++++++++++++++++++++++ aula/schema_drop.sql | 8 ++ aula/schema_ins.sql | 14 +++ 3 files changed, 280 insertions(+) create mode 100644 aula/models.py create mode 100644 aula/schema_drop.sql create mode 100644 aula/schema_ins.sql diff --git a/aula/models.py b/aula/models.py new file mode 100644 index 0000000..47c0eec --- /dev/null +++ b/aula/models.py @@ -0,0 +1,258 @@ +# write all your SQL queries in this file. +from datetime import datetime +from bank import conn, login_manager +from flask_login import UserMixin +from psycopg2 import sql + +@login_manager.user_loader +def load_user(user_id): + cur = conn.cursor() + + schema = 'customers' + id = 'cpr_number' + if str(user_id).startswith('60'): + schema = 'employees' + id = 'id' + + user_sql = sql.SQL(""" + SELECT * FROM {} + WHERE {} = %s + """).format(sql.Identifier(schema), sql.Identifier(id)) + + cur.execute(user_sql, (int(user_id),)) + if cur.rowcount > 0: + # return-if svarer til nedenstående: + # if schema == 'employees': + # return Employees(cur.fetchone()) + # else: + # return Customers(cur.fetchone()) + + return Employees(cur.fetchone()) if schema == 'employees' else Customers(cur.fetchone()) + else: + return None + + +class Group(tuple): + def __init__(self, group_data): + self.group_id = group_data[0] + self.name = group_data[1] + self.leaveable = group_data[2] + self.parents_can_post = group_data[3] + +class Message(tuple): + def __init__(self, message_data): + self.message_id = message_data[0] + self.content = message_data[1] + self.thread_id = message_data[2] + self.author_id = message_data[3] + self.created_date = message_data[4] + +class Post(tuple): + def __init__(self, post_data): + self.post_id = message_data[0] + self.group_id = message_data[1] + self.author_id = message_data[2] + self.title = message_data[3] + self.content = message_data[4] + self.created_date = message_data[5] + +class Thread(tuple): + def __init__(self, thread_data): + self.thread_id = message_data[0] + self.title = message_data[1] + self.group_id = message_data[2] + self.creator_id = message_data[3] + +class User(tuple, UserMixin): + def __init__(self, user_data): + self.user_id = user_data[0] + self.first_name = user_data[1] + self.last_name = user_data[2] + self.password = user_data[3] + self.email = user_data[4] + self.address = user_data[5] + self.role = user_data[6] + + + + +class Customers(tuple, UserMixin): + def __init__(self, user_data): + self.CPR_number = user_data[0] + self.risktype = False + self.password = user_data[2] + self.name = user_data[3] + self.address = user_data[4] + + def get_id(self): + return (self.CPR_number) + +class Employees(tuple, UserMixin): + def __init__(self, employee_data): + self.id = employee_data[0] + self.name = employee_data[1] + self.password = employee_data[2] + + def get_id(self): + return (self.id) + +class CheckingAccount(tuple): + def __init__(self, user_data): + self.id = user_data[0] + self.create_date = user_data[1] + self.CPR_number = user_data[2] + self.amount = 0 + +class InvestmentAccount(tuple): + def __init__(self, user_data): + self.id = user_data[0] + self.start_date = user_data[1] + self.maturity_date = user_data[2] + self.amount = 0 + +class Transfers(tuple): + def __init__(self, user_data): + self.id = user_data[0] + self.amount = user_data[1] + self.transfer_date = user_data[2] + +def insert_Customers(name, CPR_number, password): + cur = conn.cursor() + sql = """ + INSERT INTO Customers(name, CPR_number, password) + VALUES (%s, %s, %s) + """ + cur.execute(sql, (name, CPR_number, password)) + # Husk commit() for INSERT og UPDATE, men ikke til SELECT! + conn.commit() + cur.close() + +def insert_Employees(id, name, password): + cur = conn.cursor() + sql = """ + INSERT INTO Employees(id, name, password) + VALUES (%s, %s, %s) + """ + cur.execute(sql, (id, name, password)) + # Husk commit() for INSERT og UPDATE, men ikke til SELECT! + conn.commit() + cur.close() + +def select_Customers(CPR_number): + cur = conn.cursor() + sql = """ + SELECT * FROM Customers + WHERE CPR_number = %s + """ + cur.execute(sql, (CPR_number,)) + user = Customers(cur.fetchone()) if cur.rowcount > 0 else None; + cur.close() + return user + +def select_Employees(id): + cur = conn.cursor() + sql = """ + SELECT * FROM Employees + WHERE id = %s + """ + cur.execute(sql, (id,)) + user = Employees(cur.fetchone()) if cur.rowcount > 0 else None; + cur.close() + return user + +def select_all_Employees(): + cur = conn.cursor() + sql = """ + SELECT * FROM Employees + """ + cur.execute(sql) + tuple_resultset = cur.fetchall() + cur.close() + return tuple_resultset + +def update_CheckingAccount(amount, CPR_number): + cur = conn.cursor() + sql = """ + UPDATE CheckingAccount + SET amount = %s + WHERE CPR_number = %s + """ + cur.execute(sql, (amount, CPR_number)) + # Husk commit() for INSERT og UPDATE, men ikke til SELECT! + conn.commit() + cur.close() + +def transfer_account(date, amount, from_account, to_account): + cur = conn.cursor() + sql = """ + INSERT INTO Transfers(transfer_date, amount, from_account, to_account) + VALUES (%s, %s, %s, %s) + """ + cur.execute(sql, (date, amount, from_account, to_account)) + # Husk commit() for INSERT og UPDATE, men ikke til SELECT! + conn.commit() + cur.close() + +def select_emp_cus_accounts(emp_cpr_number): + cur = conn.cursor() + sql = """ + SELECT + e.name employee + , c.name customer + , cpr_number + , account_number + FROM manages m + NATURAL JOIN accounts + NATURAL JOIN customers c + JOIN employees e ON m.emp_cpr_number = e.id + WHERE emp_cpr_number = %s + ; + """ + cur.execute(sql, (emp_cpr_number,)) + tuple_resultset = cur.fetchall() + cur.close() + return tuple_resultset + +def select_investments(emp_cpr_number): + cur = conn.cursor() + sql = """ + SELECT i.account_number, a.cpr_number, a.created_date + FROM investmentaccounts i + JOIN accounts a ON i.account_number = a.account_number + JOIN manages m ON m.account_number = a.account_number + JOIN employees e ON e.id = m.emp_cpr_number + WHERE e.id = %s + """ + cur.execute(sql, (emp_cpr_number,)) + tuple_resultset = cur.fetchall() + cur.close() + return tuple_resultset + +def select_investments_with_certificates(emp_cpr_number): + cur = conn.cursor() + sql = """ + SELECT i.account_number, a.cpr_number, a.created_date + , cd.cd_number, start_date, maturity_date, rate, amount + FROM investmentaccounts i + JOIN accounts a ON i.account_number = a.account_number + JOIN certificates_of_deposit cd ON i.account_number = cd.account_number + JOIN manages m ON m.account_number = a.account_number + JOIN employees e ON e.id = m.emp_cpr_number + WHERE e.id = %s + """ + cur.execute(sql, (emp_cpr_number,)) + tuple_resultset = cur.fetchall() + cur.close() + return tuple_resultset + +def select_investments_certificates_sum(emp_cpr_number): + cur = conn.cursor() + sql = """ + SELECT account_number, cpr_number, created_date, sum + FROM vw_cd_sum + WHERE emp_cpr_number = %s + """ + cur.execute(sql, (emp_cpr_number,)) + tuple_resultset = cur.fetchall() + cur.close() + return tuple_resultset diff --git a/aula/schema_drop.sql b/aula/schema_drop.sql new file mode 100644 index 0000000..06bf8e2 --- /dev/null +++ b/aula/schema_drop.sql @@ -0,0 +1,8 @@ +DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS groups; +DROP TABLE IF EXISTS threads; +DROP TABLE IF EXISTS messages; +DROP TABLE IF EXISTS posts; +DROP TABLE IF EXISTS users_threads; +DROP TABLE IF EXISTS users_groups; + diff --git a/aula/schema_ins.sql b/aula/schema_ins.sql new file mode 100644 index 0000000..c90ff04 --- /dev/null +++ b/aula/schema_ins.sql @@ -0,0 +1,14 @@ +DELETE FROM users; +DELETE FROM groups; +DELETE FROM messages; +DELETE FROM threads; +DELETE FROM posts; +DELETE FROM users_threads; +DELETE FROM users_groups; + +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Gordon, Freeman, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'test@test.dk', 'aud Auditorium A, bygning 1, 1. sal Universitetsparken 15 (Zoo)', 'teacher'); +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Rachel, Green, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'rachel@test.dk', 'Cnetral Park', 'parent'); +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Joey, Trib, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'joey@test.dk', 'New York', 'student'); +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Chandler, Bing, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'Chandler@test.dk', 'Central Park', 'student'); +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Phoebe, Buffay, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'Phoebe@test.dk', 'Central Perk', 'parent'); +INSERT INTO public.users(first_name, last_name, password, email, adresse, role) VALUES (Ross, Geller, '$2b$12$KFkp1IEMGT4QrWwjPGhE3ejOv6Z3pYhx/S4qOoFbanR2sMiZqgeJO', 'Ross@test.dk', 'Central Perk', 'student');