From 938fee1a4e02b3b9f6f64e6f5465794333847eec Mon Sep 17 00:00:00 2001 From: Felix Mucha <3016498@stud.hs-mannheim.de> Date: Sat, 30 Nov 2024 18:05:58 +0100 Subject: [PATCH] moved files into layer dir --- README.md | 24 +++++++++++-- {db => src/framework_driver/db}/db_cart.py | 32 ++++++------------ {db => src/framework_driver/db}/db_product.py | 2 +- {db => src/framework_driver/db}/db_setup.py | 2 +- {db => src/framework_driver/db}/db_user.py | 2 +- {db => src/framework_driver/db}/shop.db | Bin 16384 -> 16384 bytes 6 files changed, 35 insertions(+), 27 deletions(-) rename {db => src/framework_driver/db}/db_cart.py (68%) rename {db => src/framework_driver/db}/db_product.py (98%) rename {db => src/framework_driver/db}/db_setup.py (97%) rename {db => src/framework_driver/db}/db_user.py (97%) rename {db => src/framework_driver/db}/shop.db (99%) diff --git a/README.md b/README.md index 4f84601..fe9b642 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,26 @@ ** Master MDS HSMA ** Clean Architecture - Architekturstil am praktischen Beispiel z.B. in Python. +run python script as a module e.g.: python -m framework_driver.db.db_cart - -# Layer: Framework Driver Database -- Implemented a small sqllite3 database for a online shop \ No newline at end of file +## Layers +- entities + - cart_item.py + - cart.py + - product.py +- use_cases + - cart_reporsitory_interface.py + - view_cart.py +- interfaces_adapters + - cart_database_interface.py + - cart_repository.py +- framework_driver + - db + - db_cart.py + - db_product.py + - db_setup.py + - db_user.py + - shop.db + - ui + - coming soon ... diff --git a/db/db_cart.py b/src/framework_driver/db/db_cart.py similarity index 68% rename from db/db_cart.py rename to src/framework_driver/db/db_cart.py index 3e9821b..7018a3c 100644 --- a/db/db_cart.py +++ b/src/framework_driver/db/db_cart.py @@ -1,6 +1,8 @@ import sqlite3 +from typing import Optional, List +from interface_adapters.cart_database_interface import CartDatabaseInterface -class CartDatabase: +class CartDatabase(CartDatabaseInterface): def __init__(self, db_file): """Initialize the CartDatabase with a connection to the SQLite database.""" self.conn = sqlite3.connect(db_file) @@ -16,16 +18,17 @@ class CartDatabase: except sqlite3.Error as e: print(e) - def get_cart_for_user(self, user_id): - """Retrieve the cart items for a specific user.""" + def fetch_cart_items(self, user_id: int) -> Optional[List[dict]]: + """Fetch cart items from the database for a given user ID.""" sql = "SELECT * FROM cart WHERE user_id = ?" try: c = self.conn.cursor() c.execute(sql, (user_id,)) - return c.fetchall() + rows = c.fetchall() + return [{"id": row[0], "user_id": row[1], "product_id": row[2], "quantity": row[3]} for row in rows] except sqlite3.Error as e: print(e) - return [] + return None def update_cart_item(self, user_id, product_id, quantity): """Update the quantity of a specific cart item based on user_id and product_id.""" @@ -57,19 +60,9 @@ class CartDatabase: except sqlite3.Error as e: print(e) - def get_cart_total(self, user_id): - """Calculate the total cost of all items in a user's cart.""" - sql = "SELECT SUM(products.price * cart.quantity) FROM cart JOIN products ON cart.product_id = products.id WHERE cart.user_id = ?" - try: - c = self.conn.cursor() - c.execute(sql, (user_id,)) - return c.fetchone()[0] - except sqlite3.Error as e: - print(e) - return 0 def main(): - database = "db/shop.db" + database = "framework_driver/db/shop.db" cart_db = CartDatabase(database) @@ -81,14 +74,11 @@ def main(): # user id, product id, quantity cart_db.add_to_cart(ex_user_id, 1, 2) cart_db.add_to_cart(ex_user_id, 3, 5) - - print(f"Cart items for user {ex_user_id}:", cart_db.get_cart_for_user(ex_user_id)) - print(f"Total cost for user {ex_user_id}:", cart_db.get_cart_total(ex_user_id)) + print(f"Cart items for user {ex_user_id}:", cart_db.fetch_cart_items(ex_user_id)) # user id, product id, quantity cart_db.update_cart_item(ex_user_id, 3, 3) - print(f"Cart items for user {ex_user_id}:", cart_db.get_cart_for_user(ex_user_id)) - print(f"Total cost for user {ex_user_id}:", cart_db.get_cart_total(ex_user_id)) + print(f"Cart items for user {ex_user_id}:", cart_db.fetch_cart_items(ex_user_id)) if __name__ == "__main__": main() \ No newline at end of file diff --git a/db/db_product.py b/src/framework_driver/db/db_product.py similarity index 98% rename from db/db_product.py rename to src/framework_driver/db/db_product.py index bead3a0..801963b 100644 --- a/db/db_product.py +++ b/src/framework_driver/db/db_product.py @@ -59,7 +59,7 @@ class ProductDatabase: print(e) def main(): - database = "db/shop.db" + database = "framework_driver/db/shop.db" product_db = ProductDatabase(database) diff --git a/db/db_setup.py b/src/framework_driver/db/db_setup.py similarity index 97% rename from db/db_setup.py rename to src/framework_driver/db/db_setup.py index 4ceaa25..c3fff08 100644 --- a/db/db_setup.py +++ b/src/framework_driver/db/db_setup.py @@ -29,7 +29,7 @@ def delete_table(conn, table_name): print(e) def main(): - database = "db/shop.db" + database = "framework_driver/db/shop.db" sql_user_table = """CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, diff --git a/db/db_user.py b/src/framework_driver/db/db_user.py similarity index 97% rename from db/db_user.py rename to src/framework_driver/db/db_user.py index df223c1..a828989 100644 --- a/db/db_user.py +++ b/src/framework_driver/db/db_user.py @@ -60,7 +60,7 @@ class UserDatabase: return [] def main(): - database = "db/shop.db" + database = "framework_driver/db/shop.db" user_db = UserDatabase(database) diff --git a/db/shop.db b/src/framework_driver/db/shop.db similarity index 99% rename from db/shop.db rename to src/framework_driver/db/shop.db index dce4b65bf657b761e857a005c50a03d6df88c3aa..63ac42d99245db6d593cb1ad8cc6ab8d849af7e9 100644 GIT binary patch delta 23 ecmZo@U~Fh$oFL6uHBrWywTeM6+-qaX9D4v(Xa`pS delta 23 ecmZo@U~Fh$oFL7ZHBrWyHH$&7tb1e19D4v(_Xn2%