seed_test_data: use new queries

This commit is contained in:
2025-12-10 16:02:05 +09:00
parent 980a111ce7
commit b9ed646186

View File

@@ -1,48 +1,116 @@
import json from datetime import datetime
from dibbler.db import Session
from pathlib import Path from pathlib import Path
from dibbler.models.Product import Product from dibbler.db import Session
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(session): # TODO: integrate this as a part of create-db, either asking interactively
session.query(Product).delete() # whether to seed test data, or by using command line arguments for
session.query(User).delete() # automatating the answer.
session.commit()
def clear_db(sql_session):
sql_session.query(Product).delete()
sql_session.query(User).delete()
sql_session.commit()
def main(): def main():
session = Session() # TODO: There is some leftover json data in the mock_data.json file.
clear_db(session) # It should be dealt with before merging this PR, either by removing
product_items = [] # it or using it here.
user_items = [] sql_session = Session()
clear_db(sql_session)
with 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)
session.add_all(product_items) # Add transactions
session.add_all(user_items) transactions = [
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()