From b1a22cb7bdf6a20dc5221972f874b9758cb13768 Mon Sep 17 00:00:00 2001 From: Luke Else Date: Mon, 1 Jan 2024 20:19:57 +0000 Subject: [PATCH] Created base database controller and user database controller to allow for initial database control --- app.py | 2 +- controllers/__init__.py | 0 controllers/database/__init__.py | 0 controllers/database/database.py | 31 +++++++++++++++++++++++++ controllers/database/user.py | 33 +++++++++++++++++++++++++++ {web => controllers/web}/__init__.py | 0 {web => controllers/web}/endpoints.py | 7 +++++- models/users/admin.py | 6 ++--- models/users/customer.py | 6 ++--- models/users/seller.py | 6 ++--- models/users/user.py | 2 ++ scripts/create_database.py | 3 +-- scripts/create_tables.sql | 2 +- 13 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 controllers/__init__.py create mode 100644 controllers/database/__init__.py create mode 100644 controllers/database/database.py create mode 100644 controllers/database/user.py rename {web => controllers/web}/__init__.py (100%) rename {web => controllers/web}/endpoints.py (82%) diff --git a/app.py b/app.py index 6e2f70d..52671c4 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,6 @@ from flask import Flask from os import environ -from web import blueprint +from controllers.web import blueprint ''' Main entrypoint for Flask application. diff --git a/controllers/__init__.py b/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/controllers/database/__init__.py b/controllers/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/controllers/database/database.py b/controllers/database/database.py new file mode 100644 index 0000000..7a6425b --- /dev/null +++ b/controllers/database/database.py @@ -0,0 +1,31 @@ +from abc import ABC, abstractmethod +import sqlite3 + +class DatabaseController(ABC): + __sqlitefile = "./data/wmgzon.db" + + def __init__(self): + self._conn = None + try: + self._conn = sqlite3.connect(self.__sqlitefile) + except sqlite3.Error as e: + # Close the connection if still open + if self._conn: + self._conn.close() + print(e) + + @abstractmethod + def create(self): + pass + + @abstractmethod + def read(self): + pass + + @abstractmethod + def update(self): + pass + + @abstractmethod + def delete(self): + pass \ No newline at end of file diff --git a/controllers/database/user.py b/controllers/database/user.py new file mode 100644 index 0000000..ef6e49a --- /dev/null +++ b/controllers/database/user.py @@ -0,0 +1,33 @@ +from .database import DatabaseController +from models.users.user import User + +class UserController(DatabaseController): + + def __init__(self): + super().__init__() + + def create(self, user: User): + params = [ + user.firstName, + user.lastName, + user.email, + user.phone, + user.password, + user.role + ] + + self._conn.execute( + "INSERT INTO Users (first_name, last_name, email, phone, password, role) VALUES (?, ?, ?, ?, ?, ?)", + params + ) + self._conn.commit() + user.login() + + def read(self): + print("Doing work") + + def update(self): + print("Doing work") + + def delete(self): + print("Doing work") \ No newline at end of file diff --git a/web/__init__.py b/controllers/web/__init__.py similarity index 100% rename from web/__init__.py rename to controllers/web/__init__.py diff --git a/web/endpoints.py b/controllers/web/endpoints.py similarity index 82% rename from web/endpoints.py rename to controllers/web/endpoints.py index 5ee6323..03a9448 100644 --- a/web/endpoints.py +++ b/controllers/web/endpoints.py @@ -1,5 +1,7 @@ from . import blueprint -from flask import render_template, redirect, request, session +from flask import render_template, redirect, request +from controllers.database.user import UserController +from models.users.customer import Customer # Function responsible for displaying the main landing page of the site @@ -31,5 +33,8 @@ def display_signup(): # Function responsible for handling signups to the site @blueprint.post('/signup') def signup(): + database = UserController() + database.create(Customer()) + print("Tryin to signup as " + request.form['username']) return redirect("/") diff --git a/models/users/admin.py b/models/users/admin.py index ea3f067..8a36525 100644 --- a/models/users/admin.py +++ b/models/users/admin.py @@ -1,4 +1,4 @@ -from user import User +from .user import User class Admin(User): ''' @@ -8,10 +8,10 @@ class Admin(User): super().__init__() self.store = "" - def login(): + def login(self): print("Logging in as Admin") - def signup(): + def signup(self): print("Signing up as Admin") def createProduct(): diff --git a/models/users/customer.py b/models/users/customer.py index afdf00d..2f5448c 100644 --- a/models/users/customer.py +++ b/models/users/customer.py @@ -1,4 +1,4 @@ -from user import User +from .user import User class Customer(User): ''' @@ -9,9 +9,9 @@ class Customer(User): def __init__(self): super().__init__() - def login(): + def login(self): print("Logging in as Customer") - def signup(): + def signup(self): print("Signing up as Customer") diff --git a/models/users/seller.py b/models/users/seller.py index 28958d3..e16fc62 100644 --- a/models/users/seller.py +++ b/models/users/seller.py @@ -1,4 +1,4 @@ -from user import User +from .user import User class Seller(User): ''' @@ -8,10 +8,10 @@ class Seller(User): super().__init__() self.store = "" - def login(): + def login(self): print("Logging in as Seller") - def signup(): + def signup(self): print("Signing up as Seller") def createProduct(): diff --git a/models/users/user.py b/models/users/user.py index 99e361d..4d5822f 100644 --- a/models/users/user.py +++ b/models/users/user.py @@ -11,6 +11,8 @@ class User(ABC): self.firstName = "" self.lastName = "" self.phone = "" + self.password = "" + self.role="" @abstractmethod def login(self): diff --git a/scripts/create_database.py b/scripts/create_database.py index 61046f6..eb3a44e 100644 --- a/scripts/create_database.py +++ b/scripts/create_database.py @@ -1,5 +1,4 @@ import sqlite3 -from sqlite3 import Error def create_connection(db_file): @@ -15,7 +14,7 @@ def create_connection(db_file): print("SQLite Version: " + sqlite3.version) print("Table creation complete") - except Error as e: + except sqlite3.Error as e: print(e) finally: if conn: diff --git a/scripts/create_tables.sql b/scripts/create_tables.sql index 656b5c6..893c556 100644 --- a/scripts/create_tables.sql +++ b/scripts/create_tables.sql @@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS Products ( CREATE TABLE IF NOT EXISTS Orders ( id INTEGER PRIMARY KEY, sellerID TEXT NOT NULL - REFERENCES Users (id) + REFERENCES Users (id) ON DELETE NO ACTION ON UPDATE NO ACTION, total DECIMAL NOT NULL,