moved files into layer dir
parent
84b3e9ff95
commit
938fee1a4e
24
README.md
24
README.md
|
|
@ -3,8 +3,26 @@
|
||||||
** Master MDS HSMA **
|
** Master MDS HSMA **
|
||||||
Clean Architecture - Architekturstil am praktischen Beispiel z.B. in Python.
|
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
|
||||||
|
|
||||||
|
|
||||||
|
## Layers
|
||||||
# Layer: Framework Driver Database
|
- entities
|
||||||
- Implemented a small sqllite3 database for a online shop
|
- 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 ...
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import sqlite3
|
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):
|
def __init__(self, db_file):
|
||||||
"""Initialize the CartDatabase with a connection to the SQLite database."""
|
"""Initialize the CartDatabase with a connection to the SQLite database."""
|
||||||
self.conn = sqlite3.connect(db_file)
|
self.conn = sqlite3.connect(db_file)
|
||||||
|
|
@ -16,16 +18,17 @@ class CartDatabase:
|
||||||
except sqlite3.Error as e:
|
except sqlite3.Error as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
def get_cart_for_user(self, user_id):
|
def fetch_cart_items(self, user_id: int) -> Optional[List[dict]]:
|
||||||
"""Retrieve the cart items for a specific user."""
|
"""Fetch cart items from the database for a given user ID."""
|
||||||
sql = "SELECT * FROM cart WHERE user_id = ?"
|
sql = "SELECT * FROM cart WHERE user_id = ?"
|
||||||
try:
|
try:
|
||||||
c = self.conn.cursor()
|
c = self.conn.cursor()
|
||||||
c.execute(sql, (user_id,))
|
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:
|
except sqlite3.Error as e:
|
||||||
print(e)
|
print(e)
|
||||||
return []
|
return None
|
||||||
|
|
||||||
def update_cart_item(self, user_id, product_id, quantity):
|
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."""
|
"""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:
|
except sqlite3.Error as e:
|
||||||
print(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():
|
def main():
|
||||||
database = "db/shop.db"
|
database = "framework_driver/db/shop.db"
|
||||||
|
|
||||||
cart_db = CartDatabase(database)
|
cart_db = CartDatabase(database)
|
||||||
|
|
||||||
|
|
@ -81,14 +74,11 @@ def main():
|
||||||
# user id, product id, quantity
|
# user id, product id, quantity
|
||||||
cart_db.add_to_cart(ex_user_id, 1, 2)
|
cart_db.add_to_cart(ex_user_id, 1, 2)
|
||||||
cart_db.add_to_cart(ex_user_id, 3, 5)
|
cart_db.add_to_cart(ex_user_id, 3, 5)
|
||||||
|
print(f"Cart items for user {ex_user_id}:", cart_db.fetch_cart_items(ex_user_id))
|
||||||
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))
|
|
||||||
|
|
||||||
# user id, product id, quantity
|
# user id, product id, quantity
|
||||||
cart_db.update_cart_item(ex_user_id, 3, 3)
|
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"Cart items for user {ex_user_id}:", cart_db.fetch_cart_items(ex_user_id))
|
||||||
print(f"Total cost for user {ex_user_id}:", cart_db.get_cart_total(ex_user_id))
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
@ -59,7 +59,7 @@ class ProductDatabase:
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
database = "db/shop.db"
|
database = "framework_driver/db/shop.db"
|
||||||
|
|
||||||
product_db = ProductDatabase(database)
|
product_db = ProductDatabase(database)
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ def delete_table(conn, table_name):
|
||||||
print(e)
|
print(e)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
database = "db/shop.db"
|
database = "framework_driver/db/shop.db"
|
||||||
|
|
||||||
sql_user_table = """CREATE TABLE IF NOT EXISTS users (
|
sql_user_table = """CREATE TABLE IF NOT EXISTS users (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
|
|
@ -60,7 +60,7 @@ class UserDatabase:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
database = "db/shop.db"
|
database = "framework_driver/db/shop.db"
|
||||||
|
|
||||||
user_db = UserDatabase(database)
|
user_db = UserDatabase(database)
|
||||||
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue