seed_test_data: use new queries

This commit is contained in:
2025-12-10 16:02:05 +09:00
parent 1727fa7102
commit 189e6f0f63

View File

@@ -1,46 +1,114 @@
import json from datetime import datetime
from pathlib import Path from pathlib import Path
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from dibbler.models.Product import Product from dibbler.models import Product, Transaction, User
from dibbler.models.User import User from dibbler.queries import joint_buy_product
JSON_FILE = Path(__file__).parent.parent.parent / "mock_data.json" JSON_FILE = Path(__file__).parent.parent.parent / "mock_data.json"
def clear_db(sql_session: Session) -> None: def clear_db(sql_session: Session) -> None:
# TODO: integrate this as a part of create-db, either asking interactively
# whether to seed test data, or by using command line arguments for
# automatating the answer.
sql_session.query(Product).delete() sql_session.query(Product).delete()
sql_session.query(User).delete() sql_session.query(User).delete()
sql_session.commit() sql_session.commit()
def main(sql_session: Session) -> None: def main(sql_session: Session) -> None:
# TODO: There is some leftover json data in the mock_data.json file.
# It should be dealt with before merging this PR, either by removing
# it or using it here.
clear_db(sql_session) clear_db(sql_session)
product_items = []
user_items = []
with Path.open(JSON_FILE) as f: # Add users
json_obj = json.load(f) user1 = User("Test User 1")
user2 = User("Test User 2")
user3 = User("Test User 3")
for product in json_obj["products"]: sql_session.add(user1)
product_item = Product( sql_session.add(user2)
bar_code=product["bar_code"], sql_session.add(user3)
name=product["name"], sql_session.commit()
price=product["price"],
stock=product["stock"],
)
product_items.append(product_item)
for user in json_obj["users"]: # Add products
user_item = User( product1 = Product("1234567890123", "Test Product 1")
name=user["name"], product2 = Product("9876543210987", "Test Product 2")
card=user["card"], sql_session.add(product1)
rfid=user["rfid"], sql_session.add(product2)
credit=user["credit"], sql_session.commit()
)
user_items.append(user_item)
sql_session.add_all(product_items) # Add transactions
sql_session.add_all(user_items) transactions = [
sql_session.commit() Transaction.adjust_balance(
time=datetime(2023, 10, 1, 10, 0, 0),
amount=100,
user_id=user1.id,
),
Transaction.adjust_balance(
time=datetime(2023, 10, 1, 10, 0, 1),
amount=50,
user_id=user2.id,
),
Transaction.adjust_balance(
time=datetime(2023, 10, 1, 10, 0, 2),
amount=-50,
user_id=user1.id,
),
Transaction.add_product(
time=datetime(2023, 10, 1, 12, 0, 0),
amount=27 * 2,
per_product=27,
product_count=2,
user_id=user1.id,
product_id=product1.id,
),
Transaction.buy_product(
time=datetime(2023, 10, 1, 12, 0, 1),
product_count=1,
user_id=user2.id,
product_id=product1.id,
),
]
sql_session.add_all(transactions)
sql_session.flush()
joint_buy_product(
sql_session,
time=datetime(2023, 10, 1, 12, 0, 2),
instigator=user1,
product_count=1,
users=[user1, user2, user3],
product=product2,
)
joint_buy_product(
sql_session,
time=datetime(2023, 10, 1, 13, 0, 2),
instigator=user3,
product_count=2,
users=[user2, user3],
product=product2,
)
transactions = [
Transaction.buy_product(
time=datetime(2023, 10, 2, 14, 0, 0),
product_count=1,
user_id=user1.id,
product_id=product1.id,
),
Transaction.buy_product(
time=datetime(2023, 10, 2, 14, 0, 1),
product_count=1,
user_id=user2.id,
product_id=product2.id,
),
]
sql_session.add_all(transactions)
sql_session.commit()